08 — NX Monorepo Structure (Admin Service)
This document details the NX workspace changes required to implement the Admin Service feature: new libraries, modified libraries, dependency graph, boundary rules, tsconfig aliases, and scaffolding commands.
1. File Tree (New + Modified)
Заголовок раздела «1. File Tree (New + Modified)»Legend: [NEW] = new file/directory, [MODIFIED] = change to existing file.
1.1 New Libraries
Заголовок раздела «1.1 New Libraries»libs/apis/configs/auth-api/jwt-admin/ [NEW] project.json tsconfig.json tsconfig.lib.json tsconfig.spec.json eslint.config.mjs jest.config.ts src/ index.ts lib/ jwt-admin-config.module.ts jwt-admin-config.service.ts jwt-admin.config.ts jwt-admin.env.ts jwt-admin.validation.ts
libs/apis/providers/auth-api/features/admin-auth/ [NEW] project.json tsconfig.json tsconfig.lib.json tsconfig.spec.json eslint.config.mjs jest.config.ts src/ index.ts lib/ admin-auth.module.ts admin-auth.controller.ts admin-auth.service.ts strategies/ jwt-admin.strategy.ts constants/ admin-auth.constants.ts
libs/apis/providers/admin-api/features/admin-project/ [NEW] project.json tsconfig.json tsconfig.lib.json tsconfig.spec.json eslint.config.mjs jest.config.ts src/ index.ts lib/ admin-project.module.ts admin-project.controller.ts admin-project.service.ts admin-project.repository.ts
libs/apis/providers/admin-api/features/admin-user/ [NEW] project.json tsconfig.json tsconfig.lib.json tsconfig.spec.json eslint.config.mjs jest.config.ts src/ index.ts lib/ admin-user.module.ts admin-user.controller.ts admin-user.service.ts admin-user.repository.ts
libs/apis/providers/admin-api/data-access/ [NEW] project.json tsconfig.json tsconfig.lib.json tsconfig.spec.json eslint.config.mjs jest.config.ts src/ index.ts lib/ dto/ block-user.dto.ts admin-project-query.dto.ts admin-user-query.dto.ts update-project-status.dto.ts constants/ admin-api.constants.ts1.2 Modified Files in Existing Libraries
Заголовок раздела «1.2 Modified Files in Existing Libraries»libs/apis/shared/src/ [MODIFIED] lib/ guards/ admin-jwt-auth.guard.ts [NEW] constants/ roles.constants.ts [MODIFIED] helpers/ pagination.helper.ts [MODIFIED] types/ admin.types.ts [NEW] index.ts [MODIFIED]
libs/apis/providers/auth-api/features/token/src/ [MODIFIED] lib/ token.module.ts [MODIFIED] token-admin.service.ts [NEW] index.ts [MODIFIED]
libs/apis/providers/auth-api/features/customer-auth/src/ [MODIFIED] lib/ customer-auth.service.ts [MODIFIED]
libs/apis/providers/auth-api/features/employee-auth/src/ [MODIFIED] lib/ employee-auth.service.ts [MODIFIED]
libs/apis/providers/email-sender-api/features/sender/src/ [MODIFIED] lib/ sender.service.ts [MODIFIED] templates/ admin-verification-code.template.ts [NEW]
libs/apis/providers/project-api/features/project/src/ [MODIFIED] lib/ project.repository.ts [MODIFIED]
libs/apis/providers/user-api/features/user/src/ [MODIFIED] lib/ user.service.ts [MODIFIED] user.repository.ts [MODIFIED]
tsconfig.base.json [MODIFIED]1.3 project.json for Each New Library
Заголовок раздела «1.3 project.json for Each New Library»jwt-admin config (libs/apis/configs/auth-api/jwt-admin/project.json):
{ "name": "config-auth-api-jwt-admin", "$schema": "../../../../../node_modules/nx/schemas/project-schema.json", "sourceRoot": "libs/apis/configs/auth-api/jwt-admin/src", "projectType": "library", "tags": ["scope:config", "type:config"], "targets": {}}admin-auth feature (libs/apis/providers/auth-api/features/admin-auth/project.json):
{ "name": "auth-api-feature-admin-auth", "$schema": "../../../../../../node_modules/nx/schemas/project-schema.json", "sourceRoot": "libs/apis/providers/auth-api/features/admin-auth/src", "projectType": "library", "tags": ["scope:auth-api", "type:feature"], "targets": {}}admin-project feature (libs/apis/providers/admin-api/features/admin-project/project.json):
{ "name": "admin-api-feature-admin-project", "$schema": "../../../../../../node_modules/nx/schemas/project-schema.json", "sourceRoot": "libs/apis/providers/admin-api/features/admin-project/src", "projectType": "library", "tags": ["scope:admin-api", "type:feature"], "targets": {}}admin-user feature (libs/apis/providers/admin-api/features/admin-user/project.json):
{ "name": "admin-api-feature-admin-user", "$schema": "../../../../../../node_modules/nx/schemas/project-schema.json", "sourceRoot": "libs/apis/providers/admin-api/features/admin-user/src", "projectType": "library", "tags": ["scope:admin-api", "type:feature"], "targets": {}}admin-api data-access (libs/apis/providers/admin-api/data-access/project.json):
{ "name": "admin-api-data-access", "$schema": "../../../../../node_modules/nx/schemas/project-schema.json", "sourceRoot": "libs/apis/providers/admin-api/data-access/src", "projectType": "library", "tags": ["scope:admin-api", "type:data-access"], "targets": {}}1.4 Barrel Exports (index.ts)
Заголовок раздела «1.4 Barrel Exports (index.ts)»Each new library re-exports its public API from src/index.ts:
export * from './lib/jwt-admin-config.module';export * from './lib/jwt-admin-config.service';
// libs/apis/providers/auth-api/features/admin-auth/src/index.tsexport * from './lib/admin-auth.module';
// libs/apis/providers/admin-api/features/admin-project/src/index.tsexport * from './lib/admin-project.module';
// libs/apis/providers/admin-api/features/admin-user/src/index.tsexport * from './lib/admin-user.module';
// libs/apis/providers/admin-api/data-access/src/index.tsexport * from './lib/dto/block-user.dto';export * from './lib/dto/admin-project-query.dto';export * from './lib/dto/admin-user-query.dto';export * from './lib/dto/update-project-status.dto';export * from './lib/constants/admin-api.constants';2. Library Dependency Graph
Заголовок раздела «2. Library Dependency Graph»graph TD subgraph "Admin API Domain" AdminProject["admin-api-feature-admin-project"] AdminUser["admin-api-feature-admin-user"] AdminDataAccess["admin-api-data-access"] end
subgraph "Auth API Domain" AdminAuth["auth-api-feature-admin-auth"] JwtAdminConfig["config-auth-api-jwt-admin"] Token["auth-api-feature-token"] Session["auth-api-feature-session"] end
subgraph "User API Domain" User["user-api-feature-user"] end
subgraph "Project API Domain" ProjectDataAccess["project-api-data-access"] end
subgraph "Shared / Utils" Shared["apis-shared"] Prisma["prisma-client"] RedisClient["redis-client"] EmailSender["email-sender-api-features-sender"] end
%% admin-auth dependencies AdminAuth --> JwtAdminConfig AdminAuth --> Token AdminAuth --> Session AdminAuth --> User AdminAuth --> RedisClient AdminAuth --> EmailSender AdminAuth --> Shared
%% admin-project dependencies AdminProject --> Prisma AdminProject --> Shared AdminProject --> ProjectDataAccess AdminProject --> AdminDataAccess
%% admin-user dependencies AdminUser --> Prisma AdminUser --> Shared AdminUser --> User AdminUser --> AdminDataAccess
%% jwt-admin-config: standalone, no deps3. NX Tags and Boundary Rules
Заголовок раздела «3. NX Tags and Boundary Rules»| Library Name | Tags | Allowed Dependencies |
|---|---|---|
config-auth-api-jwt-admin | scope:config, type:config | None (standalone) |
auth-api-feature-admin-auth | scope:auth-api, type:feature | scope:config, scope:auth-api, scope:user-api, scope:shared, scope:utils, scope:email-sender |
admin-api-feature-admin-project | scope:admin-api, type:feature | scope:shared, scope:utils, scope:project-api, scope:admin-api |
admin-api-feature-admin-user | scope:admin-api, type:feature | scope:shared, scope:utils, scope:user-api, scope:admin-api |
admin-api-data-access | scope:admin-api, type:data-access | scope:shared (DTOs/constants only, no runtime deps) |
Boundary Enforcement (eslint.config.mjs / @nx/enforce-module-boundaries)
Заголовок раздела «Boundary Enforcement (eslint.config.mjs / @nx/enforce-module-boundaries)»The following constraint entries should be added to the depConstraints array:
{ "sourceTag": "scope:admin-api", "onlyDependOnLibsWithTags": [ "scope:admin-api", "scope:shared", "scope:utils", "scope:user-api", "scope:project-api" ]},{ "sourceTag": "type:data-access", "onlyDependOnLibsWithTags": [ "type:data-access", "scope:shared", "scope:utils" ]},{ "sourceTag": "type:config", "onlyDependOnLibsWithTags": []}4. tsconfig.base.json Additions
Заголовок раздела «4. tsconfig.base.json Additions»Add the following path aliases to the compilerOptions.paths object in tsconfig.base.json:
{ "compilerOptions": { "paths": { "@crewsforge-back/apis/configs/auth-api/jwt-admin": [ "libs/apis/configs/auth-api/jwt-admin/src/index.ts" ], "@crewsforge-back/apis/providers/auth-api/features/admin-auth": [ "libs/apis/providers/auth-api/features/admin-auth/src/index.ts" ], "@crewsforge-back/apis/providers/admin-api/features/admin-project": [ "libs/apis/providers/admin-api/features/admin-project/src/index.ts" ], "@crewsforge-back/apis/providers/admin-api/features/admin-user": [ "libs/apis/providers/admin-api/features/admin-user/src/index.ts" ], "@crewsforge-back/apis/providers/admin-api/data-access": [ "libs/apis/providers/admin-api/data-access/src/index.ts" ] } }}5. NX Generate Commands
Заголовок раздела «5. NX Generate Commands»Run these commands from the workspace root to scaffold the new libraries. They follow the existing naming conventions observed in the repository (config-auth-api-jwt-*, auth-api-feature-*, *-api-feature-*, *-api-data-access).
5.1 JWT Admin Config
Заголовок раздела «5.1 JWT Admin Config»nx g @nx/nest:lib config-auth-api-jwt-admin \ --directory=libs/apis/configs/auth-api/jwt-admin \ --importPath=@crewsforge-back/apis/configs/auth-api/jwt-admin \ --tags="scope:config,type:config" \ --unitTestRunner=jest \ --projectNameAndRootFormat=as-provided5.2 Admin Auth Feature
Заголовок раздела «5.2 Admin Auth Feature»nx g @nx/nest:lib auth-api-feature-admin-auth \ --directory=libs/apis/providers/auth-api/features/admin-auth \ --importPath=@crewsforge-back/apis/providers/auth-api/features/admin-auth \ --tags="scope:auth-api,type:feature" \ --unitTestRunner=jest \ --projectNameAndRootFormat=as-provided5.3 Admin Project Feature
Заголовок раздела «5.3 Admin Project Feature»nx g @nx/nest:lib admin-api-feature-admin-project \ --directory=libs/apis/providers/admin-api/features/admin-project \ --importPath=@crewsforge-back/apis/providers/admin-api/features/admin-project \ --tags="scope:admin-api,type:feature" \ --unitTestRunner=jest \ --projectNameAndRootFormat=as-provided5.4 Admin User Feature
Заголовок раздела «5.4 Admin User Feature»nx g @nx/nest:lib admin-api-feature-admin-user \ --directory=libs/apis/providers/admin-api/features/admin-user \ --importPath=@crewsforge-back/apis/providers/admin-api/features/admin-user \ --tags="scope:admin-api,type:feature" \ --unitTestRunner=jest \ --projectNameAndRootFormat=as-provided5.5 Admin API Data Access
Заголовок раздела «5.5 Admin API Data Access»nx g @nx/nest:lib admin-api-data-access \ --directory=libs/apis/providers/admin-api/data-access \ --importPath=@crewsforge-back/apis/providers/admin-api/data-access \ --tags="scope:admin-api,type:data-access" \ --unitTestRunner=jest \ --projectNameAndRootFormat=as-providedSummary of Changes
Заголовок раздела «Summary of Changes»| Category | Count | Details |
|---|---|---|
| New libraries | 5 | jwt-admin config, admin-auth, admin-project, admin-user, admin-api data-access |
| Modified libraries | 7 | shared, token, customer-auth, employee-auth, email-sender, project, user |
| New tsconfig paths | 5 | One per new library |
| New NX projects | 5 | Matching library names per existing conventions |
| Boundary rule updates | 3 | scope:admin-api, type:data-access, type:config constraints |