Ho Ngoc Hai
6ebacbc9bf
fix: apply consistent-type-imports across API codebase (728 lint errors)
...
- Convert `import type { X }` to `import { type X }` (inline-type-imports style)
- Suppress consistent-type-imports for `typeof import()` in instrument.ts
- Includes uncommitted agent work: metrics module, redis caching, audit logs,
saved searches, circuit breaker, rate limiting, and admin enhancements
Co-Authored-By: Paperclip <noreply@paperclip.ing >
2026-04-10 23:22:21 +07:00
Ho Ngoc Hai
e927385ed5
feat(api): improve notifications, reviews, search, and subscriptions modules
...
- Add listing-sold event listener with spec for notifications
- Add review-deleted event listener with spec for reviews
- Improve search handlers with proper Typesense client injection
- Improve subscription handlers with ConfigService and quota tracking
Co-Authored-By: Paperclip <noreply@paperclip.ing >
2026-04-09 09:43:39 +07:00
Ho Ngoc Hai
7fb25eb2b1
feat(search): enhance geo-search and listing-approved handlers
...
Improve geo-search handler with better query processing and update
listing-approved event handler with enhanced indexing logic.
Tests updated accordingly.
Co-Authored-By: Paperclip <noreply@paperclip.ing >
2026-04-08 23:07:06 +07:00
Ho Ngoc Hai
2502aa69b7
fix: production readiness — resolve build, lint, and code quality issues
...
- Fix Next.js build failure: remove duplicate route at (dashboard)/listings/[id]
that conflicted with (public)/listings/[id] (same URL path in two route groups)
- Fix 772 ESLint errors: auto-fix import ordering (import-x/order), remove unused
imports/variables, convert empty interfaces to type aliases, replace require()
with ESM imports, fix consistent-type-imports violations
- Add CLAUDE.md for developer onboarding documentation
- All checks pass: 0 lint errors, typecheck clean, 230 tests passing, build success
Co-Authored-By: Paperclip <noreply@paperclip.ing >
2026-04-08 07:15:06 +07:00
Ho Ngoc Hai
2a392525a2
feat(cache): implement Redis caching layer for hot-read endpoints
...
Add cache-aside pattern for listing detail, search results, market
analytics (4 endpoints), and user profile queries. Cache invalidation
on all write mutations. Prometheus cache_hit_total/cache_miss_total
metrics with resource labels.
- CacheService: getOrSet, invalidate, invalidateByPrefix (SCAN-based)
- TTLs: listing 5m, search 1m, market 30m, profile 10m
- All 230 tests passing (13 new cache tests + 6 updated handler tests)
Co-Authored-By: Paperclip <noreply@paperclip.ing >
2026-04-08 04:14:06 +07:00
Ho Ngoc Hai
6741592cbe
feat(search): implement Search module with Typesense full-text & geo search
...
- TypesenseClient service with configurable connection
- Collection schema for listings with facets, geo-point, and Vietnamese text
- ListingIndexer service with PostGIS coordinate extraction for geo search
- CQRS commands: SyncListing, ReindexAll (batch with pagination)
- CQRS queries: SearchProperties (filters, sorting), GeoSearch (radius)
- Event handlers for listing.approved/updated/deactivated auto-sync
- REST endpoints: GET /search, GET /search/geo, POST /search/reindex (admin)
- DTOs with class-validator validation and pagination
Co-Authored-By: Paperclip <noreply@paperclip.ing >
2026-04-08 01:46:20 +07:00