# yoohyeok/codertown-server architecture

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

- Interactive diagram: https://gitdiagram.com/yoohyeok/codertown-server
- Repository: https://github.com/yoohyeok/codertown-server

## Overview

Codertown is a project-recruitment and collaboration backend with member accounts, recruitment listings, project participation, messaging, and a Coggle discussion/notification feature. The main workflow is users discovering or creating recruitments, joining project roles, and coordinating in chat; account and community features are parallel branches. The excerpts establish several service-to-repository and service-to-domain behaviors, but most controllers and some integrations were not sampled, so those links are omitted or marked unverified.

Main entry points: [`src/main/java/io/codertown/web/service/RecruitService.java`](https://github.com/yoohyeok/codertown-server/blob/main/src/main/java/io/codertown/web/service/RecruitService.java) (Recruitment service), [`src/main/java/io/codertown/web/service/UserService.java`](https://github.com/yoohyeok/codertown-server/blob/main/src/main/java/io/codertown/web/service/UserService.java) (Account service), [`src/main/java/io/codertown/web/service/ChatRoomService.java`](https://github.com/yoohyeok/codertown-server/blob/main/src/main/java/io/codertown/web/service/ChatRoomService.java) (Chat rooms), [`src/main/java/io/codertown/web/service/CoggleService.java`](https://github.com/yoohyeok/codertown-server/blob/main/src/main/java/io/codertown/web/service/CoggleService.java) (Coggle service)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_identity["Accounts and access"]
  node_user[("Members<br/>[User.java]")]
  node_userapi["Account API"]
  node_usersvc["Account service<br/>[UserService.java]"]
  node_userrepo["Member repository"]
  node_oauth["OAuth login"]
  node_jwt["JWT provider"]
end

subgraph group_projects["Recruitment and projects"]
  node_recruitapi["Recruitment API"]
  node_recruitsvc["Recruitment service"]
  node_recruit[("Recruitment listings<br/>[Recruit.java]")]
  node_recruitquery["Recruit search"]
  node_project[("Project lifecycle<br/>[Project.java]")]
  node_projectparts[("Project roles<br/>[ProjectPart.java]")]
  node_userproject[("Project membership<br/>[UserProject.java]")]
  node_projectrepo["Project repository"]
end

subgraph group_community["Community and messaging"]
  node_coggleapi["Coggle API"]
  node_cogglesvc["Coggle service<br/>[CoggleService.java]"]
  node_coggle[("Posts and comments<br/>[Coggle.java]")]
  node_notification[("Notifications<br/>[Notification.java]")]
  node_chatapi["Chat APIs"]
  node_chatmsgapi["Message API"]
  node_chatsvc["Chat rooms"]
  node_chatmessage[("Chat messages<br/>[ChatMessage.java]")]
end

subgraph group_platform["Application infrastructure"]
  node_address["Address lookup"]
  node_addressrepo["Address repository"]
  node_stomp["WebSocket handling<br/>[StompHandler.java]"]
end

node_actor(("User"))
node_database[("Relational database")]

node_actor -->|"uses accounts"| node_userapi
node_userapi -->|"delegates to"| node_usersvc
node_usersvc -->|"reads and saves"| node_userrepo
node_usersvc -->|"creates tokens"| node_jwt
node_oauth -->|"looks up members"| node_userrepo
node_usersvc -->|"loads joined projects"| node_projectrepo
node_projectrepo -->|"queries projects"| node_project
node_actor -.->|"browses listings"| node_recruitapi
node_recruitapi -.->|"delegates to"| node_recruitsvc
node_recruitsvc -->|"searches listings"| node_recruitquery
node_recruitsvc -->|"creates projects"| node_project
node_recruitsvc -->|"updates roles"| node_projectparts
node_recruitsvc -->|"records participation"| node_userproject
node_actor -.->|"uses discussions"| node_coggleapi
node_coggleapi -.->|"delegates to"| node_cogglesvc
node_cogglesvc -->|"reads and updates"| node_coggle
node_cogglesvc -->|"manages notifications"| node_notification
node_actor -.->|"uses chat"| node_chatapi
node_chatapi -.->|"delegates to"| node_chatsvc
node_chatmsgapi -.->|"routes messages"| node_chatsvc
node_stomp -->|"checks room access"| node_chatsvc
node_chatsvc -->|"loads messages"| node_chatmessage
node_actor -->|"requests addresses"| node_address
node_address -->|"queries"| node_addressrepo
node_userrepo -.->|"persists members"| node_database
node_recruitquery -.->|"queries listings"| node_database
node_coggle -.->|"persists posts"| node_database
node_chatmessage -.->|"persists messages"| node_database

click node_user "https://github.com/yoohyeok/codertown-server/blob/main/src/main/java/io/codertown/web/entity/user/User.java"
click node_userapi "https://github.com/yoohyeok/codertown-server/blob/main/src/main/java/io/codertown/web/controller/UserApiController.java"
click node_usersvc "https://github.com/yoohyeok/codertown-server/blob/main/src/main/java/io/codertown/web/service/UserService.java"
click node_userrepo "https://github.com/yoohyeok/codertown-server/blob/main/src/main/java/io/codertown/web/repository/UserRepository.java"
click node_oauth "https://github.com/yoohyeok/codertown-server/blob/main/src/main/java/io/codertown/web/service/oauth2/CustomOAuth2UserService.java"
click node_jwt "https://github.com/yoohyeok/codertown-server/blob/main/src/main/java/io/codertown/support/jwt/JwtTokenProvider.java"
click node_recruitapi "https://github.com/yoohyeok/codertown-server/blob/main/src/main/java/io/codertown/web/controller/RecruitApiController.java"
click node_recruitsvc "https://github.com/yoohyeok/codertown-server/blob/main/src/main/java/io/codertown/web/service/RecruitService.java"
click node_recruit "https://github.com/yoohyeok/codertown-server/blob/main/src/main/java/io/codertown/web/entity/recruit/Recruit.java"
click node_recruitquery "https://github.com/yoohyeok/codertown-server/blob/main/src/main/java/io/codertown/web/repository/querydsl/RecruitQuerydslRepositoryImpl.java"
click node_project "https://github.com/yoohyeok/codertown-server/blob/main/src/main/java/io/codertown/web/entity/project/Project.java"
click node_projectparts "https://github.com/yoohyeok/codertown-server/blob/main/src/main/java/io/codertown/web/entity/ProjectPart.java"
click node_userproject "https://github.com/yoohyeok/codertown-server/blob/main/src/main/java/io/codertown/web/entity/UserProject.java"
click node_projectrepo "https://github.com/yoohyeok/codertown-server/blob/main/src/main/java/io/codertown/web/repository/ProjectRepository.java"
click node_coggleapi "https://github.com/yoohyeok/codertown-server/blob/main/src/main/java/io/codertown/web/controller/CoggleApiController.java"
click node_cogglesvc "https://github.com/yoohyeok/codertown-server/blob/main/src/main/java/io/codertown/web/service/CoggleService.java"
click node_coggle "https://github.com/yoohyeok/codertown-server/blob/main/src/main/java/io/codertown/web/entity/coggle/Coggle.java"
click node_notification "https://github.com/yoohyeok/codertown-server/blob/main/src/main/java/io/codertown/web/entity/coggle/Notification.java"
click node_chatapi "https://github.com/yoohyeok/codertown-server/blob/main/src/main/java/io/codertown/web/controller/ChatRoomApiController.java"
click node_chatmsgapi "https://github.com/yoohyeok/codertown-server/blob/main/src/main/java/io/codertown/web/controller/ChatMessageController.java"
click node_chatsvc "https://github.com/yoohyeok/codertown-server/blob/main/src/main/java/io/codertown/web/service/ChatRoomService.java"
click node_chatmessage "https://github.com/yoohyeok/codertown-server/blob/main/src/main/java/io/codertown/web/entity/chat/ChatMessage.java"
click node_address "https://github.com/yoohyeok/codertown-server/blob/main/src/main/java/io/codertown/web/controller/AddressCategoryDBController.java"
click node_addressrepo "https://github.com/yoohyeok/codertown-server/blob/main/src/main/java/io/codertown/web/repository/AddressRepository.java"
click node_stomp "https://github.com/yoohyeok/codertown-server/blob/main/src/main/java/io/codertown/support/interceptor/StompHandler.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_user,node_userapi,node_usersvc,node_userrepo,node_oauth,node_jwt,node_actor toneBlue
class node_recruitapi,node_recruitsvc,node_recruit,node_recruitquery,node_project,node_projectparts,node_userproject,node_projectrepo,node_database toneAmber
class node_coggleapi,node_cogglesvc,node_coggle,node_notification,node_chatapi,node_chatmsgapi,node_chatsvc,node_chatmessage toneMint
class node_address,node_addressrepo,node_stomp toneRose
```

## Components

### Accounts and access

- [Members](https://github.com/yoohyeok/codertown-server/blob/main/src/main/java/io/codertown/web/entity/user/User.java): `src/main/java/io/codertown/web/entity/user/User.java`
- [Account API](https://github.com/yoohyeok/codertown-server/blob/main/src/main/java/io/codertown/web/controller/UserApiController.java): `src/main/java/io/codertown/web/controller/UserApiController.java`
- [Account service](https://github.com/yoohyeok/codertown-server/blob/main/src/main/java/io/codertown/web/service/UserService.java): `src/main/java/io/codertown/web/service/UserService.java`
- [Member repository](https://github.com/yoohyeok/codertown-server/blob/main/src/main/java/io/codertown/web/repository/UserRepository.java): `src/main/java/io/codertown/web/repository/UserRepository.java`
- [OAuth login](https://github.com/yoohyeok/codertown-server/blob/main/src/main/java/io/codertown/web/service/oauth2/CustomOAuth2UserService.java): `src/main/java/io/codertown/web/service/oauth2/CustomOAuth2UserService.java`
- [JWT provider](https://github.com/yoohyeok/codertown-server/blob/main/src/main/java/io/codertown/support/jwt/JwtTokenProvider.java): `src/main/java/io/codertown/support/jwt/JwtTokenProvider.java`

### Recruitment and projects

- [Recruitment API](https://github.com/yoohyeok/codertown-server/blob/main/src/main/java/io/codertown/web/controller/RecruitApiController.java): `src/main/java/io/codertown/web/controller/RecruitApiController.java`
- [Recruitment service](https://github.com/yoohyeok/codertown-server/blob/main/src/main/java/io/codertown/web/service/RecruitService.java): `src/main/java/io/codertown/web/service/RecruitService.java`
- [Recruitment listings](https://github.com/yoohyeok/codertown-server/blob/main/src/main/java/io/codertown/web/entity/recruit/Recruit.java): `src/main/java/io/codertown/web/entity/recruit/Recruit.java`
- [Recruit search](https://github.com/yoohyeok/codertown-server/blob/main/src/main/java/io/codertown/web/repository/querydsl/RecruitQuerydslRepositoryImpl.java): `src/main/java/io/codertown/web/repository/querydsl/RecruitQuerydslRepositoryImpl.java`
- [Project lifecycle](https://github.com/yoohyeok/codertown-server/blob/main/src/main/java/io/codertown/web/entity/project/Project.java): `src/main/java/io/codertown/web/entity/project/Project.java`
- [Project roles](https://github.com/yoohyeok/codertown-server/blob/main/src/main/java/io/codertown/web/entity/ProjectPart.java): `src/main/java/io/codertown/web/entity/ProjectPart.java`
- [Project membership](https://github.com/yoohyeok/codertown-server/blob/main/src/main/java/io/codertown/web/entity/UserProject.java): `src/main/java/io/codertown/web/entity/UserProject.java`
- [Project repository](https://github.com/yoohyeok/codertown-server/blob/main/src/main/java/io/codertown/web/repository/ProjectRepository.java): `src/main/java/io/codertown/web/repository/ProjectRepository.java`

### Community and messaging

- [Coggle API](https://github.com/yoohyeok/codertown-server/blob/main/src/main/java/io/codertown/web/controller/CoggleApiController.java): `src/main/java/io/codertown/web/controller/CoggleApiController.java`
- [Coggle service](https://github.com/yoohyeok/codertown-server/blob/main/src/main/java/io/codertown/web/service/CoggleService.java): `src/main/java/io/codertown/web/service/CoggleService.java`
- [Posts and comments](https://github.com/yoohyeok/codertown-server/blob/main/src/main/java/io/codertown/web/entity/coggle/Coggle.java): `src/main/java/io/codertown/web/entity/coggle/Coggle.java`
- [Notifications](https://github.com/yoohyeok/codertown-server/blob/main/src/main/java/io/codertown/web/entity/coggle/Notification.java): `src/main/java/io/codertown/web/entity/coggle/Notification.java`
- [Chat APIs](https://github.com/yoohyeok/codertown-server/blob/main/src/main/java/io/codertown/web/controller/ChatRoomApiController.java): `src/main/java/io/codertown/web/controller/ChatRoomApiController.java`
- [Message API](https://github.com/yoohyeok/codertown-server/blob/main/src/main/java/io/codertown/web/controller/ChatMessageController.java): `src/main/java/io/codertown/web/controller/ChatMessageController.java`
- [Chat rooms](https://github.com/yoohyeok/codertown-server/blob/main/src/main/java/io/codertown/web/service/ChatRoomService.java): `src/main/java/io/codertown/web/service/ChatRoomService.java`
- [Chat messages](https://github.com/yoohyeok/codertown-server/blob/main/src/main/java/io/codertown/web/entity/chat/ChatMessage.java): `src/main/java/io/codertown/web/entity/chat/ChatMessage.java`

### Application infrastructure

- [Address lookup](https://github.com/yoohyeok/codertown-server/blob/main/src/main/java/io/codertown/web/controller/AddressCategoryDBController.java): `src/main/java/io/codertown/web/controller/AddressCategoryDBController.java`
- [Address repository](https://github.com/yoohyeok/codertown-server/blob/main/src/main/java/io/codertown/web/repository/AddressRepository.java): `src/main/java/io/codertown/web/repository/AddressRepository.java`
- [WebSocket handling](https://github.com/yoohyeok/codertown-server/blob/main/src/main/java/io/codertown/support/interceptor/StompHandler.java): `src/main/java/io/codertown/support/interceptor/StompHandler.java`

### Other components

- **User**
- **Relational database**

## Connections

- User → Account API: uses accounts (evidence: `src/main/java/io/codertown/web/controller/UserApiController.java`)
- Account API → Account service: delegates to (evidence: `src/main/java/io/codertown/web/controller/UserApiController.java`)
- Account service → Member repository: reads and saves (evidence: `src/main/java/io/codertown/web/service/UserService.java`)
- Account service → JWT provider: creates tokens (evidence: `src/main/java/io/codertown/web/service/UserService.java`)
- OAuth login → Member repository: looks up members (evidence: `src/main/java/io/codertown/web/service/oauth2/CustomOAuth2UserService.java`)
- Account service → Project repository: loads joined projects (evidence: `src/main/java/io/codertown/web/service/UserService.java`)
- Project repository → Project lifecycle: queries projects (evidence: `src/main/java/io/codertown/web/repository/ProjectRepository.java`)
- User → Recruitment API: browses listings
- Recruitment API → Recruitment service: delegates to (evidence: `src/main/java/io/codertown/web/controller/RecruitApiController.java`)
- Recruitment service → Recruit search: searches listings (evidence: `src/main/java/io/codertown/web/service/RecruitService.java`)
- Recruitment service → Project lifecycle: creates projects (evidence: `src/main/java/io/codertown/web/service/RecruitService.java`)
- Recruitment service → Project roles: updates roles (evidence: `src/main/java/io/codertown/web/service/RecruitService.java`)
- Recruitment service → Project membership: records participation (evidence: `src/main/java/io/codertown/web/service/RecruitService.java`)
- User → Coggle API: uses discussions
- Coggle API → Coggle service: delegates to (evidence: `src/main/java/io/codertown/web/controller/CoggleApiController.java`)
- Coggle service → Posts and comments: reads and updates (evidence: `src/main/java/io/codertown/web/service/CoggleService.java`)
- Coggle service → Notifications: manages notifications (evidence: `src/main/java/io/codertown/web/service/CoggleService.java`)
- User → Chat APIs: uses chat
- Chat APIs → Chat rooms: delegates to (evidence: `src/main/java/io/codertown/web/controller/ChatRoomApiController.java`)
- Message API → Chat rooms: routes messages
- WebSocket handling → Chat rooms: checks room access (evidence: `src/main/java/io/codertown/support/interceptor/StompHandler.java`)
- Chat rooms → Chat messages: loads messages (evidence: `src/main/java/io/codertown/web/service/ChatRoomService.java`)
- User → Address lookup: requests addresses (evidence: `src/main/java/io/codertown/web/controller/AddressCategoryDBController.java`)
- Address lookup → Address repository: queries (evidence: `src/main/java/io/codertown/web/controller/AddressCategoryDBController.java`)
- Member repository → Relational database: persists members
- Recruit search → Relational database: queries listings
- Posts and comments → Relational database: persists posts
- Chat messages → Relational database: persists messages
