refactor(common): standardize hardcoded constants and enforce zero-hardcode architecture
Refactor: Standardize Constants and Enforce Zero-Hardcode Architecture
Summary of Changes
This PR eliminates all hardcoded string literals and Prisma enum leakage across the backend codebase (data-crawler-be), adhering strictly to the layer separation and Prisma exclusivity rules defined in AGENTS.md.
Key Highlights
1. Centralized Constants Layer (src/common/constants/)
-
Added
CRAWL_MODE&CrawlMode(src/common/constants/crawl-mode.constant.ts): Standardized'SCRAPE','CRAWL','SITEMAP', and'URL_LIST'. -
Added
SCHEDULE_FREQUENCY&ScheduleFrequency(src/common/constants/schedule-frequency.constant.ts): Standardized'DAILY','WEEKLY','MONTHLY', and'CUSTOM'. -
Added
ASSET_TYPE&AssetType(src/common/constants/asset-type.constant.ts): Standardized'IMAGE','LINK','PDF','FILE','VIDEO', and'OTHER'. -
Added
DEFAULT_TIMEZONE(src/common/constants/timezone.constant.ts): Centralized default timezone'Asia/Ho_Chi_Minh'. -
Barrel Export (
src/common/constants/index.ts): Re-exports all domain constants for single-point import.
2. Zero-Hardcode Refactoring
-
Crawl Jobs & Worker (
crawl.worker.processor.ts,crawl-job.service.ts,crawl-job.validation.ts):- Replaced hardcoded status strings with
JOB_STATUS.*(COMPLETED,RUNNING,FAILED,CANCELED, etc.). - Replaced mode comparisons and array definitions with
CRAWL_MODE.*andz.nativeEnum(CRAWL_MODE). - Replaced export type strings with
EXPORT_TYPE.*andz.nativeEnum(EXPORT_TYPE).
- Replaced hardcoded status strings with
-
Crawl Schedules (
crawl-schedule.service.ts,crawl-schedule.validation.ts,crawl-schedule.repository.ts):- Replaced hardcoded timezone
'Asia/Ho_Chi_Minh'withDEFAULT_TIMEZONE. - Replaced hardcoded schedule frequencies with
SCHEDULE_FREQUENCY.*andz.nativeEnum(SCHEDULE_FREQUENCY).
- Replaced hardcoded timezone
-
Users & Auth (
auth.service.ts,user.service.ts,user.validation.ts):- Replaced
'ADMIN'literal withROLES.ADMIN. - Used
z.nativeEnum(ROLES)in user query and creation schemas. - Replaced hardcoded timezone with
DEFAULT_TIMEZONE.
- Replaced
-
Exports & Dashboard (
export.service.ts,crawl-export.service.ts,dashboard.repository.ts):- Bound export handler keys using
[EXPORT_TYPE.*]. - Replaced hardcoded status counts with
JOB_STATUS.*.
- Bound export handler keys using
3. Strict Prisma Exclusivity Enforcement (AGENTS.md §1)
- Removed
@prisma/clientenum imports (UserRole,CrawlMode,CrawlJobStatus,ScheduleFrequency,ExportType,AssetType) from non-repository layers (Services, Controllers, DTOs, and Middlewares). - Isolated DTO and Service typing strictly through domain constant types.
4. Documentation & Guidelines (AGENTS.md)
- Added the Zero Hardcode Principle under Section 1 invariant rules, providing clear declarations, validation patterns, and usage code examples for future development.