# icyscools/seekajob-api architecture

> Architecture diagram of the GitHub repository icyscools/seekajob-api, generated by GitDiagram from its file tree, README and a sample of source files (last updated 2026-09-30). It is an AI-made overview: check details against the source.

- Interactive diagram: https://gitdiagram.com/icyscools/seekajob-api
- Repository: https://github.com/icyscools/seekajob-api

## Overview

This NestJS API implements a worker/company hiring platform: users authenticate, manage profiles and jobs, workers submit applications, and companies arrange interviews. Controllers expose the domain operations; services apply role-aware rules, coordinate related records, and access TypeORM repositories. File uploads are handled separately through S3. The README is only a generic Nest starter description, so the workflow comes from the source index and excerpts; several controller and service implementations are unsampled.

Main entry points: [`src/modules/core/users/services/user.service.ts`](https://github.com/icyscools/seekajob-api/blob/main/src/modules/core/users/services/user.service.ts) (User service), [`src/main.ts`](https://github.com/icyscools/seekajob-api/blob/main/src/main.ts) (Nest app), [`src/modules/core/applications/services/application.service.ts`](https://github.com/icyscools/seekajob-api/blob/main/src/modules/core/applications/services/application.service.ts) (Application service), [`src/modules/core/auths/services/auth.service.ts`](https://github.com/icyscools/seekajob-api/blob/main/src/modules/core/auths/services/auth.service.ts) (Auth service)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_api["API and access"]
  node_app["Nest app<br/>[main.ts]"]
  node_auth_api["Auth routes<br/>[auth.controller.ts]"]
  node_role_guard["Role guard<br/>[role.guard.ts]"]
  node_jwt_strategy["JWT strategy<br/>[jwt.strategy.ts]"]
end

subgraph group_identity["Identity and profiles"]
  node_user_api["User routes<br/>[user.controller.ts]"]
  node_user_service["User service<br/>[user.service.ts]"]
  node_auth_service["Auth service<br/>[auth.service.ts]"]
end

subgraph group_hiring["Hiring workflow"]
  node_job_api["Job routes<br/>[job.controller.ts]"]
  node_job_service["Job service<br/>[job.service.ts]"]
  node_application_api["Application routes"]
  node_application_service["Application service"]
  node_interview_api["Interview routes"]
  node_interview_service["Interview service"]
end

subgraph group_infrastructure["Persistence and files"]
  node_user_data[("User records<br/>[user.entity.ts]")]
  node_worker_company[("Worker and company records<br/>[worker.entity.ts]")]
  node_job_data[("Job records<br/>[job.entity.ts]")]
  node_application_data[("Application records")]
  node_interview_data[("Interview records")]
  node_files_service["File service<br/>[files.service.ts]"]
end

node_client(("API client"))
node_cognito["Amazon Cognito"]
node_s3[("Amazon S3")]

node_client -->|"sends requests"| node_app
node_app -->|"mounts modules"| node_auth_api
node_app -->|"mounts modules"| node_user_api
node_app -->|"mounts modules"| node_job_api
node_app -->|"mounts modules"| node_application_api
node_app -->|"mounts modules"| node_interview_api
node_auth_api -->|"calls"| node_auth_service
node_user_api -->|"calls"| node_user_service
node_job_api -->|"calls"| node_job_service
node_application_api -->|"calls"| node_application_service
node_interview_api -->|"calls"| node_interview_service
node_auth_api -.->|"guards requests"| node_jwt_strategy
node_application_api -->|"guards requests"| node_role_guard
node_interview_api -->|"guards requests"| node_role_guard
node_job_api -->|"guards writes"| node_role_guard
node_auth_service -->|"authenticates users"| node_cognito
node_auth_service -->|"creates and looks up"| node_user_service
node_user_service -->|"uploads profile images"| node_files_service
node_auth_service -->|"uploads profile images"| node_files_service
node_job_service -->|"looks up users"| node_user_service
node_application_service -->|"looks up users"| node_user_service
node_interview_service -->|"uses user service"| node_user_service
node_application_service -->|"uploads resumes"| node_files_service
node_files_service -->|"uploads files"| node_s3
node_user_service -->|"reads and writes"| node_user_data
node_user_service -->|"reads and writes"| node_worker_company
node_job_service -->|"reads and writes"| node_job_data
node_application_service -->|"reads and writes"| node_application_data
node_application_service -->|"reads jobs"| node_job_data
node_application_service -->|"reads workers"| node_worker_company
node_interview_service -->|"reads and writes"| node_interview_data
node_interview_service -->|"reads applications"| node_application_data

click node_app "https://github.com/icyscools/seekajob-api/blob/main/src/main.ts"
click node_auth_api "https://github.com/icyscools/seekajob-api/blob/main/src/modules/core/auths/controllers/auth.controller.ts"
click node_role_guard "https://github.com/icyscools/seekajob-api/blob/main/src/modules/shared/roles/guards/role.guard.ts"
click node_jwt_strategy "https://github.com/icyscools/seekajob-api/blob/main/src/modules/core/auths/strategies/jwt.strategy.ts"
click node_user_api "https://github.com/icyscools/seekajob-api/blob/main/src/modules/core/users/controllers/user.controller.ts"
click node_user_service "https://github.com/icyscools/seekajob-api/blob/main/src/modules/core/users/services/user.service.ts"
click node_auth_service "https://github.com/icyscools/seekajob-api/blob/main/src/modules/core/auths/services/auth.service.ts"
click node_user_data "https://github.com/icyscools/seekajob-api/blob/main/src/entities/user.entity.ts"
click node_worker_company "https://github.com/icyscools/seekajob-api/blob/main/src/entities/worker.entity.ts"
click node_job_api "https://github.com/icyscools/seekajob-api/blob/main/src/modules/core/jobs/controllers/job.controller.ts"
click node_job_service "https://github.com/icyscools/seekajob-api/blob/main/src/modules/core/jobs/services/job.service.ts"
click node_job_data "https://github.com/icyscools/seekajob-api/blob/main/src/entities/job.entity.ts"
click node_application_api "https://github.com/icyscools/seekajob-api/blob/main/src/modules/core/applications/controllers/application.controller.ts"
click node_application_service "https://github.com/icyscools/seekajob-api/blob/main/src/modules/core/applications/services/application.service.ts"
click node_application_data "https://github.com/icyscools/seekajob-api/blob/main/src/entities/application.entity.ts"
click node_interview_api "https://github.com/icyscools/seekajob-api/blob/main/src/modules/core/interviews/controllers/interview.controller.ts"
click node_interview_service "https://github.com/icyscools/seekajob-api/blob/main/src/modules/core/interviews/services/interview.service.ts"
click node_interview_data "https://github.com/icyscools/seekajob-api/blob/main/src/entities/interview.entity.ts"
click node_files_service "https://github.com/icyscools/seekajob-api/blob/main/src/modules/shared/uploadfiles/services/files.service.ts"

classDef toneNeutral fill:#f8fafc,stroke:#334155,stroke-width:1.5px,color:#0f172a
classDef toneBlue fill:#dbeafe,stroke:#2563eb,stroke-width:1.5px,color:#172554
classDef toneAmber fill:#fef3c7,stroke:#d97706,stroke-width:1.5px,color:#78350f
classDef toneMint fill:#dcfce7,stroke:#16a34a,stroke-width:1.5px,color:#14532d
classDef toneRose fill:#ffe4e6,stroke:#e11d48,stroke-width:1.5px,color:#881337
classDef toneIndigo fill:#e0e7ff,stroke:#4f46e5,stroke-width:1.5px,color:#312e81
classDef toneTeal fill:#ccfbf1,stroke:#0f766e,stroke-width:1.5px,color:#134e4a
class node_app,node_auth_api,node_role_guard,node_jwt_strategy,node_client toneBlue
class node_user_api,node_user_service,node_auth_service,node_s3 toneAmber
class node_job_api,node_job_service,node_application_api,node_application_service,node_interview_api,node_interview_service toneMint
class node_user_data,node_worker_company,node_job_data,node_application_data,node_interview_data,node_files_service toneRose
class node_cognito toneIndigo
```

## Components

### API and access

- [Nest app](https://github.com/icyscools/seekajob-api/blob/main/src/main.ts): `src/main.ts`
- [Auth routes](https://github.com/icyscools/seekajob-api/blob/main/src/modules/core/auths/controllers/auth.controller.ts): `src/modules/core/auths/controllers/auth.controller.ts`
- [Role guard](https://github.com/icyscools/seekajob-api/blob/main/src/modules/shared/roles/guards/role.guard.ts): `src/modules/shared/roles/guards/role.guard.ts`
- [JWT strategy](https://github.com/icyscools/seekajob-api/blob/main/src/modules/core/auths/strategies/jwt.strategy.ts): `src/modules/core/auths/strategies/jwt.strategy.ts`

### Identity and profiles

- [User routes](https://github.com/icyscools/seekajob-api/blob/main/src/modules/core/users/controllers/user.controller.ts): `src/modules/core/users/controllers/user.controller.ts`
- [User service](https://github.com/icyscools/seekajob-api/blob/main/src/modules/core/users/services/user.service.ts): `src/modules/core/users/services/user.service.ts`
- [Auth service](https://github.com/icyscools/seekajob-api/blob/main/src/modules/core/auths/services/auth.service.ts): `src/modules/core/auths/services/auth.service.ts`

### Hiring workflow

- [Job routes](https://github.com/icyscools/seekajob-api/blob/main/src/modules/core/jobs/controllers/job.controller.ts): `src/modules/core/jobs/controllers/job.controller.ts`
- [Job service](https://github.com/icyscools/seekajob-api/blob/main/src/modules/core/jobs/services/job.service.ts): `src/modules/core/jobs/services/job.service.ts`
- [Application routes](https://github.com/icyscools/seekajob-api/blob/main/src/modules/core/applications/controllers/application.controller.ts): `src/modules/core/applications/controllers/application.controller.ts`
- [Application service](https://github.com/icyscools/seekajob-api/blob/main/src/modules/core/applications/services/application.service.ts): `src/modules/core/applications/services/application.service.ts`
- [Interview routes](https://github.com/icyscools/seekajob-api/blob/main/src/modules/core/interviews/controllers/interview.controller.ts): `src/modules/core/interviews/controllers/interview.controller.ts`
- [Interview service](https://github.com/icyscools/seekajob-api/blob/main/src/modules/core/interviews/services/interview.service.ts): `src/modules/core/interviews/services/interview.service.ts`

### Persistence and files

- [User records](https://github.com/icyscools/seekajob-api/blob/main/src/entities/user.entity.ts): `src/entities/user.entity.ts`
- [Worker and company records](https://github.com/icyscools/seekajob-api/blob/main/src/entities/worker.entity.ts): `src/entities/worker.entity.ts`
- [Job records](https://github.com/icyscools/seekajob-api/blob/main/src/entities/job.entity.ts): `src/entities/job.entity.ts`
- [Application records](https://github.com/icyscools/seekajob-api/blob/main/src/entities/application.entity.ts): `src/entities/application.entity.ts`
- [Interview records](https://github.com/icyscools/seekajob-api/blob/main/src/entities/interview.entity.ts): `src/entities/interview.entity.ts`
- [File service](https://github.com/icyscools/seekajob-api/blob/main/src/modules/shared/uploadfiles/services/files.service.ts): `src/modules/shared/uploadfiles/services/files.service.ts`

### Other components

- **API client**
- **Amazon Cognito**
- **Amazon S3**

## Connections

- API client → Nest app: sends requests (evidence: `src/main.ts`)
- Nest app → Auth routes: mounts modules
- Nest app → User routes: mounts modules
- Nest app → Job routes: mounts modules
- Nest app → Application routes: mounts modules
- Nest app → Interview routes: mounts modules
- Auth routes → Auth service: calls (evidence: `src/modules/core/auths/controllers/auth.controller.ts`)
- User routes → User service: calls (evidence: `src/modules/core/users/controllers/user.controller.ts`)
- Job routes → Job service: calls (evidence: `src/modules/core/jobs/controllers/job.controller.ts`)
- Application routes → Application service: calls (evidence: `src/modules/core/applications/controllers/application.controller.ts`)
- Interview routes → Interview service: calls (evidence: `src/modules/core/interviews/controllers/interview.controller.ts`)
- Auth routes → JWT strategy: guards requests
- Application routes → Role guard: guards requests (evidence: `src/modules/core/applications/controllers/application.controller.ts`)
- Interview routes → Role guard: guards requests (evidence: `src/modules/core/interviews/controllers/interview.controller.ts`)
- Job routes → Role guard: guards writes (evidence: `src/modules/core/jobs/controllers/job.controller.ts`)
- Auth service → Amazon Cognito: authenticates users (evidence: `src/modules/core/auths/services/auth.service.ts`)
- Auth service → User service: creates and looks up (evidence: `src/modules/core/auths/services/auth.service.ts`)
- User service → File service: uploads profile images (evidence: `src/modules/core/users/services/user.service.ts`)
- Auth service → File service: uploads profile images (evidence: `src/modules/core/auths/services/auth.service.ts`)
- Job service → User service: looks up users (evidence: `src/modules/core/jobs/services/job.service.ts`)
- Application service → User service: looks up users (evidence: `src/modules/core/applications/services/application.service.ts`)
- Interview service → User service: uses user service (evidence: `src/modules/core/interviews/services/interview.service.ts`)
- Application service → File service: uploads resumes (evidence: `src/modules/core/applications/services/application.service.ts`)
- File service → Amazon S3: uploads files (evidence: `src/modules/shared/uploadfiles/services/files.service.ts`)
- User service → User records: reads and writes (evidence: `src/modules/core/users/services/user.service.ts`)
- User service → Worker and company records: reads and writes (evidence: `src/modules/core/users/services/user.service.ts`)
- Job service → Job records: reads and writes (evidence: `src/modules/core/jobs/services/job.service.ts`)
- Application service → Application records: reads and writes (evidence: `src/modules/core/applications/services/application.service.ts`)
- Application service → Job records: reads jobs (evidence: `src/modules/core/applications/services/application.service.ts`)
- Application service → Worker and company records: reads workers (evidence: `src/modules/core/applications/services/application.service.ts`)
- Interview service → Interview records: reads and writes (evidence: `src/modules/core/interviews/services/interview.service.ts`)
- Interview service → Application records: reads applications (evidence: `src/modules/core/interviews/services/interview.service.ts`)
