# leets-official/job-is-be architecture

> Architecture diagram of the GitHub repository leets-official/job-is-be, generated by GitDiagram from its file tree, README and a sample of source files (last updated 2026-11-14). It is an AI-made overview: check details against the source.

- Interactive diagram: https://gitdiagram.com/leets-official/job-is-be
- Repository: https://github.com/leets-official/job-is-be

## Overview

Job-is-BE is a job-recommendation backend: users authenticate, build a profile and optionally complete a personality quiz; job data is collected and matched into daily recommendation decks, which users can review and act on. The README documents OAuth/JWT, job search and saving, resume uploads, notifications, and email alongside this main flow. Java service-to-service details and deck generation wiring were not sampled, so uncertain connections are omitted or marked unverified.

Main entry points: [`database/scripts/run_pipeline.py`](https://github.com/leets-official/job-is-be/blob/develop/database/scripts/run_pipeline.py) (Crawl Pipeline), [`src/main/java/com/leets7th/job_is_be/domain/auth/service/OAuthLoginService.java`](https://github.com/leets-official/job-is-be/blob/develop/src/main/java/com/leets7th/job_is_be/domain/auth/service/OAuthLoginService.java) (OAuth and Sessions), [`src/main/java/com/leets7th/job_is_be/domain/deck/service/RecommendationService.java`](https://github.com/leets-official/job-is-be/blob/develop/src/main/java/com/leets7th/job_is_be/domain/deck/service/RecommendationService.java) (Daily Deck), [`src/main/java/com/leets7th/job_is_be/domain/user/service/ProfileService.java`](https://github.com/leets-official/job-is-be/blob/develop/src/main/java/com/leets7th/job_is_be/domain/user/service/ProfileService.java) (Profile and Resume)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_identity["Identity and Profiles"]
  node_auth["OAuth and Sessions"]
  node_profile["Profile and Resume"]
  node_personality["Personality Quiz"]
  node_userstore[("User Records<br/>[User.java]")]
end

subgraph group_jobs["Jobs and Matching"]
  node_jobapi["Job Search and Saves<br/>[JobController.java]"]
  node_metadata["Job Metadata"]
  node_jobrecords[("Job Records<br/>[Job.java]")]
  node_crawler["Crawler Parsing"]
  node_pipeline["Crawl Pipeline<br/>[run_pipeline.py]"]
  node_matching["Job Matching<br/>[recommend.py]"]
  node_embeddings["Job Embeddings<br/>[embed.py]"]
  node_llmselect["LLM Selection<br/>[llm_select.py]"]
end

subgraph group_recommendations["Recommendations"]
  node_deck["Daily Deck"]
  node_cards[("Cards and Actions<br/>[Card.java]")]
  node_briefing["AI Briefing"]
end

subgraph group_engagement["Engagement and Messaging"]
  node_notifications["Notification Settings"]
  node_mail["Email Delivery"]
end

subgraph group_platform["Platform Integrations"]
  node_openai["OpenAI<br/>[OpenAiService.java]"]
  node_s3["AWS S3"]
  node_oauthproviders["OAuth Providers"]
end

node_user(("User"))

node_user -->|"signs in"| node_auth
node_oauthproviders -->|"authenticates"| node_auth
node_auth -->|"loads account"| node_userstore
node_user -->|"sets preferences"| node_profile
node_profile -->|"stores profile"| node_userstore
node_user -->|"takes quiz"| node_personality
node_user -->|"searches jobs"| node_jobapi
node_jobapi -.->|"queries jobs"| node_jobrecords
node_user -.->|"filters jobs"| node_metadata
node_pipeline -.->|"imports job data"| node_crawler
node_pipeline -->|"runs matching"| node_matching
node_pipeline -->|"builds embeddings"| node_embeddings
node_pipeline -->|"selects matches"| node_llmselect
node_user -->|"gets recommendations"| node_deck
node_matching -.->|"supplies matches"| node_deck
node_deck -.->|"creates cards"| node_cards
node_user -->|"acts on cards"| node_cards
node_user -->|"views briefing"| node_briefing
node_briefing -.->|"generates briefing"| node_openai
node_user -->|"sets alerts"| node_notifications
node_notifications -.->|"configures delivery"| node_mail
node_mail -->|"sends email"| node_user
node_user -->|"uploads resume"| node_s3

click node_auth "https://github.com/leets-official/job-is-be/blob/develop/src/main/java/com/leets7th/job_is_be/domain/auth/service/OAuthLoginService.java"
click node_profile "https://github.com/leets-official/job-is-be/blob/develop/src/main/java/com/leets7th/job_is_be/domain/user/service/ProfileService.java"
click node_personality "https://github.com/leets-official/job-is-be/blob/develop/src/main/java/com/leets7th/job_is_be/domain/personality/service/PersonalityQuizService.java"
click node_userstore "https://github.com/leets-official/job-is-be/blob/develop/src/main/java/com/leets7th/job_is_be/domain/user/entity/User.java"
click node_jobapi "https://github.com/leets-official/job-is-be/blob/develop/src/main/java/com/leets7th/job_is_be/domain/job/controller/JobController.java"
click node_metadata "https://github.com/leets-official/job-is-be/blob/develop/src/main/java/com/leets7th/job_is_be/domain/job/service/MetadataQueryService.java"
click node_jobrecords "https://github.com/leets-official/job-is-be/blob/develop/src/main/java/com/leets7th/job_is_be/domain/job/entity/Job.java"
click node_crawler "https://github.com/leets-official/job-is-be/blob/develop/src/main/java/com/leets7th/job_is_be/domain/job/service/JobParserService.java"
click node_pipeline "https://github.com/leets-official/job-is-be/blob/develop/database/scripts/run_pipeline.py"
click node_matching "https://github.com/leets-official/job-is-be/blob/develop/database/matching/engine/recommend.py"
click node_embeddings "https://github.com/leets-official/job-is-be/blob/develop/database/matching/engine/embed.py"
click node_llmselect "https://github.com/leets-official/job-is-be/blob/develop/database/matching/engine/llm_select.py"
click node_deck "https://github.com/leets-official/job-is-be/blob/develop/src/main/java/com/leets7th/job_is_be/domain/deck/service/RecommendationService.java"
click node_cards "https://github.com/leets-official/job-is-be/blob/develop/src/main/java/com/leets7th/job_is_be/domain/deck/entity/Card.java"
click node_briefing "https://github.com/leets-official/job-is-be/blob/develop/src/main/java/com/leets7th/job_is_be/domain/deck/service/BriefingService.java"
click node_notifications "https://github.com/leets-official/job-is-be/blob/develop/src/main/java/com/leets7th/job_is_be/domain/notification/service/NotificationSettingService.java"
click node_mail "https://github.com/leets-official/job-is-be/blob/develop/src/main/java/com/leets7th/job_is_be/domain/mail/service/MailDispatchService.java"
click node_openai "https://github.com/leets-official/job-is-be/blob/develop/src/main/java/com/leets7th/job_is_be/global/ai/OpenAiService.java"

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_auth,node_profile,node_personality,node_userstore,node_user toneBlue
class node_jobapi,node_metadata,node_jobrecords,node_crawler,node_pipeline,node_matching,node_embeddings,node_llmselect toneAmber
class node_deck,node_cards,node_briefing toneMint
class node_notifications,node_mail toneRose
class node_openai,node_s3,node_oauthproviders toneIndigo
```

## Components

### Identity and Profiles

- [OAuth and Sessions](https://github.com/leets-official/job-is-be/blob/develop/src/main/java/com/leets7th/job_is_be/domain/auth/service/OAuthLoginService.java): `src/main/java/com/leets7th/job_is_be/domain/auth/service/OAuthLoginService.java`
- [Profile and Resume](https://github.com/leets-official/job-is-be/blob/develop/src/main/java/com/leets7th/job_is_be/domain/user/service/ProfileService.java): `src/main/java/com/leets7th/job_is_be/domain/user/service/ProfileService.java`
- [Personality Quiz](https://github.com/leets-official/job-is-be/blob/develop/src/main/java/com/leets7th/job_is_be/domain/personality/service/PersonalityQuizService.java): `src/main/java/com/leets7th/job_is_be/domain/personality/service/PersonalityQuizService.java`
- [User Records](https://github.com/leets-official/job-is-be/blob/develop/src/main/java/com/leets7th/job_is_be/domain/user/entity/User.java): `src/main/java/com/leets7th/job_is_be/domain/user/entity/User.java`

### Jobs and Matching

- [Job Search and Saves](https://github.com/leets-official/job-is-be/blob/develop/src/main/java/com/leets7th/job_is_be/domain/job/controller/JobController.java): `src/main/java/com/leets7th/job_is_be/domain/job/controller/JobController.java`
- [Job Metadata](https://github.com/leets-official/job-is-be/blob/develop/src/main/java/com/leets7th/job_is_be/domain/job/service/MetadataQueryService.java): `src/main/java/com/leets7th/job_is_be/domain/job/service/MetadataQueryService.java`
- [Job Records](https://github.com/leets-official/job-is-be/blob/develop/src/main/java/com/leets7th/job_is_be/domain/job/entity/Job.java): `src/main/java/com/leets7th/job_is_be/domain/job/entity/Job.java`
- [Crawler Parsing](https://github.com/leets-official/job-is-be/blob/develop/src/main/java/com/leets7th/job_is_be/domain/job/service/JobParserService.java): `src/main/java/com/leets7th/job_is_be/domain/job/service/JobParserService.java`
- [Crawl Pipeline](https://github.com/leets-official/job-is-be/blob/develop/database/scripts/run_pipeline.py): `database/scripts/run_pipeline.py`
- [Job Matching](https://github.com/leets-official/job-is-be/blob/develop/database/matching/engine/recommend.py): `database/matching/engine/recommend.py`
- [Job Embeddings](https://github.com/leets-official/job-is-be/blob/develop/database/matching/engine/embed.py): `database/matching/engine/embed.py`
- [LLM Selection](https://github.com/leets-official/job-is-be/blob/develop/database/matching/engine/llm_select.py): `database/matching/engine/llm_select.py`

### Recommendations

- [Daily Deck](https://github.com/leets-official/job-is-be/blob/develop/src/main/java/com/leets7th/job_is_be/domain/deck/service/RecommendationService.java): `src/main/java/com/leets7th/job_is_be/domain/deck/service/RecommendationService.java`
- [Cards and Actions](https://github.com/leets-official/job-is-be/blob/develop/src/main/java/com/leets7th/job_is_be/domain/deck/entity/Card.java): `src/main/java/com/leets7th/job_is_be/domain/deck/entity/Card.java`
- [AI Briefing](https://github.com/leets-official/job-is-be/blob/develop/src/main/java/com/leets7th/job_is_be/domain/deck/service/BriefingService.java): `src/main/java/com/leets7th/job_is_be/domain/deck/service/BriefingService.java`

### Engagement and Messaging

- [Notification Settings](https://github.com/leets-official/job-is-be/blob/develop/src/main/java/com/leets7th/job_is_be/domain/notification/service/NotificationSettingService.java): `src/main/java/com/leets7th/job_is_be/domain/notification/service/NotificationSettingService.java`
- [Email Delivery](https://github.com/leets-official/job-is-be/blob/develop/src/main/java/com/leets7th/job_is_be/domain/mail/service/MailDispatchService.java): `src/main/java/com/leets7th/job_is_be/domain/mail/service/MailDispatchService.java`

### Platform Integrations

- [OpenAI](https://github.com/leets-official/job-is-be/blob/develop/src/main/java/com/leets7th/job_is_be/global/ai/OpenAiService.java): `src/main/java/com/leets7th/job_is_be/global/ai/OpenAiService.java`
- **AWS S3**
- **OAuth Providers**

### Other components

- **User**

## Connections

- User → OAuth and Sessions: signs in
- OAuth Providers → OAuth and Sessions: authenticates
- OAuth and Sessions → User Records: loads account (evidence: `src/main/java/com/leets7th/job_is_be/domain/auth/service/OAuthLoginService.java`)
- User → Profile and Resume: sets preferences
- Profile and Resume → User Records: stores profile (evidence: `src/main/java/com/leets7th/job_is_be/domain/user/service/ProfileService.java`)
- User → Personality Quiz: takes quiz
- User → Job Search and Saves: searches jobs
- Job Search and Saves → Job Records: queries jobs
- User → Job Metadata: filters jobs
- Crawl Pipeline → Crawler Parsing: imports job data
- Crawl Pipeline → Job Matching: runs matching
- Crawl Pipeline → Job Embeddings: builds embeddings
- Crawl Pipeline → LLM Selection: selects matches
- User → Daily Deck: gets recommendations
- Job Matching → Daily Deck: supplies matches
- Daily Deck → Cards and Actions: creates cards (evidence: `src/main/java/com/leets7th/job_is_be/domain/deck/service/RecommendationService.java`)
- User → Cards and Actions: acts on cards
- User → AI Briefing: views briefing
- AI Briefing → OpenAI: generates briefing
- User → Notification Settings: sets alerts
- Notification Settings → Email Delivery: configures delivery
- Email Delivery → User: sends email
- User → AWS S3: uploads resume
