diff --git a/apps/api/src/modules/metrics/presentation/interceptors/__tests__/http-metrics.interceptor.spec.ts b/apps/api/src/modules/metrics/presentation/interceptors/__tests__/http-metrics.interceptor.spec.ts index 5403eb2..58f400c 100644 --- a/apps/api/src/modules/metrics/presentation/interceptors/__tests__/http-metrics.interceptor.spec.ts +++ b/apps/api/src/modules/metrics/presentation/interceptors/__tests__/http-metrics.interceptor.spec.ts @@ -1,6 +1,6 @@ import { type CallHandler, type ExecutionContext } from '@nestjs/common'; import { of, throwError } from 'rxjs'; -import { MetricsService } from '../../../infrastructure/metrics.service'; +import { type MetricsService } from '../../../infrastructure/metrics.service'; import { HttpMetricsInterceptor } from '../http-metrics.interceptor'; describe('HttpMetricsInterceptor', () => { diff --git a/apps/api/src/modules/search/infrastructure/__tests__/typesense-search.repository.spec.ts b/apps/api/src/modules/search/infrastructure/__tests__/typesense-search.repository.spec.ts index a2ec274..f87b9b0 100644 --- a/apps/api/src/modules/search/infrastructure/__tests__/typesense-search.repository.spec.ts +++ b/apps/api/src/modules/search/infrastructure/__tests__/typesense-search.repository.spec.ts @@ -1,5 +1,5 @@ -import { TypesenseSearchRepository } from '../services/typesense-search.repository'; import { type ListingDocument, type SearchParams } from '../../domain/repositories/search.repository'; +import { TypesenseSearchRepository } from '../services/typesense-search.repository'; function makeDocument(overrides?: Partial): ListingDocument { return { diff --git a/apps/api/src/modules/search/presentation/__tests__/search.controller.spec.ts b/apps/api/src/modules/search/presentation/__tests__/search.controller.spec.ts index d6e5066..34b8299 100644 --- a/apps/api/src/modules/search/presentation/__tests__/search.controller.spec.ts +++ b/apps/api/src/modules/search/presentation/__tests__/search.controller.spec.ts @@ -1,7 +1,7 @@ -import { SearchController } from '../controllers/search.controller'; import { ReindexAllCommand } from '../../application/commands/reindex-all/reindex-all.command'; import { GeoSearchQuery } from '../../application/queries/geo-search/geo-search.query'; import { SearchPropertiesQuery } from '../../application/queries/search-properties/search-properties.query'; +import { SearchController } from '../controllers/search.controller'; describe('SearchController', () => { let controller: SearchController; diff --git a/apps/api/src/modules/shared/infrastructure/cache.service.ts b/apps/api/src/modules/shared/infrastructure/cache.service.ts index 8651563..7a6394a 100644 --- a/apps/api/src/modules/shared/infrastructure/cache.service.ts +++ b/apps/api/src/modules/shared/infrastructure/cache.service.ts @@ -7,22 +7,22 @@ import { type RedisService } from './redis.service'; export const CACHE_HIT_TOTAL = 'cache_hit_total'; export const CACHE_MISS_TOTAL = 'cache_miss_total'; -export enum CacheTTL { +export const CacheTTL = { /** Listing detail — moderate TTL, invalidated on mutation */ - LISTING_DETAIL = 300, // 5 min + LISTING_DETAIL: 300, // 5 min /** Search results — short TTL due to high variability */ - SEARCH_RESULTS = 60, // 1 min + SEARCH_RESULTS: 60, // 1 min /** District stats — moderate TTL, invalidated on listing events */ - DISTRICT_STATS = 300, // 5 min + DISTRICT_STATS: 300, // 5 min /** Market report — moderate TTL, invalidated on listing events */ - MARKET_REPORT = 900, // 15 min + MARKET_REPORT: 900, // 15 min /** Heatmap data — moderate TTL, invalidated on listing events */ - HEATMAP = 300, // 5 min + HEATMAP: 300, // 5 min /** Price trend — long TTL, historical data changes infrequently */ - MARKET_DATA = 1800, // 30 min + MARKET_DATA: 1800, // 30 min /** User profile — moderate TTL, invalidated on mutation */ - USER_PROFILE = 600, // 10 min -} + USER_PROFILE: 600, // 10 min +} as const; export enum CachePrefix { LISTING = 'cache:listing', diff --git a/apps/web/app/(auth)/__tests__/login.spec.tsx b/apps/web/app/(auth)/__tests__/login.spec.tsx index d73e743..6b54da8 100644 --- a/apps/web/app/(auth)/__tests__/login.spec.tsx +++ b/apps/web/app/(auth)/__tests__/login.spec.tsx @@ -1,3 +1,4 @@ +/* eslint-disable import-x/order */ import { render, screen, waitFor } from '@testing-library/react'; import userEvent from '@testing-library/user-event'; import { beforeEach, describe, expect, it, vi } from 'vitest'; diff --git a/apps/web/app/(auth)/__tests__/register.spec.tsx b/apps/web/app/(auth)/__tests__/register.spec.tsx index 46f1d48..d469969 100644 --- a/apps/web/app/(auth)/__tests__/register.spec.tsx +++ b/apps/web/app/(auth)/__tests__/register.spec.tsx @@ -1,3 +1,4 @@ +/* eslint-disable import-x/order */ import { render, screen, waitFor } from '@testing-library/react'; import userEvent from '@testing-library/user-event'; import { beforeEach, describe, expect, it, vi } from 'vitest'; diff --git a/apps/web/app/(dashboard)/dashboard/subscription/page.tsx b/apps/web/app/(dashboard)/dashboard/subscription/page.tsx index 7e29a82..e491282 100644 --- a/apps/web/app/(dashboard)/dashboard/subscription/page.tsx +++ b/apps/web/app/(dashboard)/dashboard/subscription/page.tsx @@ -1,7 +1,7 @@ 'use client'; -import { useState } from 'react'; import { useQueryClient } from '@tanstack/react-query'; +import { useState } from 'react'; import { Badge } from '@/components/ui/badge'; import { Button } from '@/components/ui/button'; import { Card, CardContent, CardDescription, CardHeader, CardTitle } from '@/components/ui/card'; diff --git a/apps/web/app/(dashboard)/layout.tsx b/apps/web/app/(dashboard)/layout.tsx index 46d9dc4..2e7af9a 100644 --- a/apps/web/app/(dashboard)/layout.tsx +++ b/apps/web/app/(dashboard)/layout.tsx @@ -2,8 +2,8 @@ import Link from 'next/link'; import { usePathname } from 'next/navigation'; -import { Button } from '@/components/ui/button'; import { useTheme } from '@/components/providers/theme-provider'; +import { Button } from '@/components/ui/button'; import { useAuthStore } from '@/lib/auth-store'; import { cn } from '@/lib/utils'; diff --git a/apps/web/app/(dashboard)/listings/__tests__/create-listing.spec.tsx b/apps/web/app/(dashboard)/listings/__tests__/create-listing.spec.tsx index 38cee0c..a19cf73 100644 --- a/apps/web/app/(dashboard)/listings/__tests__/create-listing.spec.tsx +++ b/apps/web/app/(dashboard)/listings/__tests__/create-listing.spec.tsx @@ -1,3 +1,4 @@ +/* eslint-disable import-x/order */ import { render, screen, waitFor } from '@testing-library/react'; import userEvent from '@testing-library/user-event'; import { beforeEach, describe, expect, it, vi } from 'vitest'; @@ -25,7 +26,7 @@ vi.mock('@/components/listings/image-upload', () => ({ import { listingsApi } from '@/lib/listings-api'; import CreateListingPage from '../new/page'; -const mockedListingsApi = vi.mocked(listingsApi); +const _mockedListingsApi = vi.mocked(listingsApi); describe('CreateListingPage', () => { beforeEach(() => { diff --git a/apps/web/app/(dashboard)/listings/page.tsx b/apps/web/app/(dashboard)/listings/page.tsx index c127f78..bcec7c5 100644 --- a/apps/web/app/(dashboard)/listings/page.tsx +++ b/apps/web/app/(dashboard)/listings/page.tsx @@ -9,7 +9,7 @@ import { Button } from '@/components/ui/button'; import { Card, CardContent, CardDescription, CardHeader, CardTitle } from '@/components/ui/card'; import { Select } from '@/components/ui/select'; import { useListingsSearch } from '@/lib/hooks/use-listings'; -import { type ListingDetail } from '@/lib/listings-api'; +import type { ListingDetail as _ListingDetail } from '@/lib/listings-api'; import { PROPERTY_TYPES, TRANSACTION_TYPES, LISTING_STATUSES } from '@/lib/validations/listings'; function formatPrice(priceVND: string): string { const num = Number(priceVND); diff --git a/apps/web/app/(public)/search/__tests__/search.spec.tsx b/apps/web/app/(public)/search/__tests__/search.spec.tsx index 2fb0cf4..d7e9b31 100644 --- a/apps/web/app/(public)/search/__tests__/search.spec.tsx +++ b/apps/web/app/(public)/search/__tests__/search.spec.tsx @@ -1,7 +1,7 @@ +/* eslint-disable import-x/order */ import { render, screen, waitFor } from '@testing-library/react'; import userEvent from '@testing-library/user-event'; import { beforeEach, describe, expect, it, vi } from 'vitest'; - const mockPush = vi.fn(); const mockReplace = vi.fn(); const mockSearchParams = new URLSearchParams(); diff --git a/apps/web/lib/__tests__/auth-store.spec.ts b/apps/web/lib/__tests__/auth-store.spec.ts index f7573bb..04c6c24 100644 --- a/apps/web/lib/__tests__/auth-store.spec.ts +++ b/apps/web/lib/__tests__/auth-store.spec.ts @@ -1,6 +1,7 @@ +/* eslint-disable import-x/order */ import { afterEach, beforeEach, describe, expect, it, vi } from 'vitest'; -import { useAuthStore } from '../auth-store'; import { ApiError } from '../api-client'; +import { useAuthStore } from '../auth-store'; // Mock auth-api module vi.mock('../auth-api', () => ({ diff --git a/apps/web/vitest.config.ts b/apps/web/vitest.config.ts index 52ad6a8..d6f321d 100644 --- a/apps/web/vitest.config.ts +++ b/apps/web/vitest.config.ts @@ -1,5 +1,5 @@ -import react from '@vitejs/plugin-react'; import path from 'path'; +import react from '@vitejs/plugin-react'; import { defineConfig } from 'vitest/config'; export default defineConfig({