# sunmoonuniv/wadadak architecture

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

- Interactive diagram: https://gitdiagram.com/sunmoonuniv/wadadak
- Repository: https://github.com/sunmoonuniv/wadadak

## Overview

WADADAK is a running-focused social platform, with a backend for accounts, running courses, run recording, reviews, rankings, and notifications; the repository README also identifies a mobile app. A typical user journey is to sign in, discover or register a course, record a run, and then use community and ranking features. The graph preserves these distinct product stages and supporting capabilities. Source excerpts substantiate selected service interactions; broader feature branches come from the source tree, so their internal call relationships are not inferred.

Main entry points: [`BackEnd/src/main/java/com/wadadak/member/internal/auth/AuthService.java`](https://github.com/sunmoonuniv/wadadak/blob/main/BackEnd/src/main/java/com/wadadak/member/internal/auth/AuthService.java) (Social Sign-in), [`BackEnd/src/main/java/com/wadadak/course/internal/route/RouteService.java`](https://github.com/sunmoonuniv/wadadak/blob/main/BackEnd/src/main/java/com/wadadak/course/internal/route/RouteService.java) (Route Generation), [`BackEnd/src/main/java/com/wadadak/review/internal/ReviewService.java`](https://github.com/sunmoonuniv/wadadak/blob/main/BackEnd/src/main/java/com/wadadak/review/internal/ReviewService.java) (Reviews), [`BackEnd/src/main/java/com/wadadak/review/internal/ReviewQueryService.java`](https://github.com/sunmoonuniv/wadadak/blob/main/BackEnd/src/main/java/com/wadadak/review/internal/ReviewQueryService.java) (Review Queries)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_shared["Shared Backend"]
  node_bootstrap["Backend Application"]
  node_common["Shared Services"]
  node_region["Region Directory"]
  node_storage["Photo Storage<br/>[ObjectStorage.java]"]
  node_event["Domain Events"]
end

subgraph group_members["Member Accounts"]
  node_auth["Social Sign-in<br/>[AuthService.java]"]
  node_account["Member Accounts<br/>[MemberService.java]"]
  node_runnerprofile["Runner Profiles"]
  node_runnersearch["Runner Search"]
end

subgraph group_courses["Running Courses"]
  node_course["Course Domain<br/>[Course.java]"]
  node_registration["Course Registration"]
  node_route["Route Generation<br/>[RouteService.java]"]
  node_explore["Course Discovery"]
  node_bookmarks["Course Bookmarks"]
end

subgraph group_runs["Run Recording"]
  node_runs["Run Recording<br/>[RunService.java]"]
  node_judging["Run Judging"]
  node_ghost["Ghost Running"]
end

subgraph group_community["Community and Engagement"]
  node_reviews["Reviews<br/>[ReviewService.java]"]
  node_reviewquery["Review Queries"]
  node_ranking["Rankings"]
  node_notifications["Notifications"]
end

node_runner(("Runner"))
node_app["Mobile App"]
node_postgis[("PostGIS")]

node_runner -.->|"uses"| node_app
node_app -.->|"requests backend"| node_bootstrap
node_bootstrap -.->|"hosts"| node_auth
node_auth -->|"validates region"| node_region
node_auth -->|"handles photos"| node_storage
node_auth -->|"persists member"| node_account
node_runner -.->|"registers course"| node_registration
node_registration -.->|"builds route"| node_route
node_route -->|"calculates geometry"| node_postgis
node_route -.->|"creates route data"| node_course
node_runner -.->|"discovers courses"| node_explore
node_runner -.->|"records run"| node_runs
node_runs -.->|"uses judging"| node_judging
node_runner -.->|"runs against ghost"| node_ghost
node_runner -.->|"writes review"| node_reviews
node_reviews -.->|"serves review reads"| node_reviewquery
node_reviews -->|"publishes review events"| node_event
node_reviewquery -->|"fetches profiles"| node_runnerprofile
node_reviewquery -->|"loads review photos"| node_storage
node_runner -.->|"searches runners"| node_runnersearch
node_runner -.->|"saves courses"| node_bookmarks
node_runner -.->|"views rankings"| node_ranking
node_runner -.->|"receives notices"| node_notifications
node_common -.->|"supports runtime"| node_bootstrap

click node_bootstrap "https://github.com/sunmoonuniv/wadadak/blob/main/BackEnd/src/main/java/com/wadadak/WadadakApplication.java"
click node_common "https://github.com/sunmoonuniv/wadadak/tree/main/BackEnd/src/main/java/com/wadadak/common"
click node_region "https://github.com/sunmoonuniv/wadadak/blob/main/BackEnd/src/main/java/com/wadadak/common/region/RegionDirectory.java"
click node_storage "https://github.com/sunmoonuniv/wadadak/blob/main/BackEnd/src/main/java/com/wadadak/common/storage/ObjectStorage.java"
click node_auth "https://github.com/sunmoonuniv/wadadak/blob/main/BackEnd/src/main/java/com/wadadak/member/internal/auth/AuthService.java"
click node_account "https://github.com/sunmoonuniv/wadadak/blob/main/BackEnd/src/main/java/com/wadadak/member/internal/account/MemberService.java"
click node_runnerprofile "https://github.com/sunmoonuniv/wadadak/blob/main/BackEnd/src/main/java/com/wadadak/member/internal/profile/RunnerProfileService.java"
click node_runnersearch "https://github.com/sunmoonuniv/wadadak/blob/main/BackEnd/src/main/java/com/wadadak/member/internal/search/RunnerSearchService.java"
click node_course "https://github.com/sunmoonuniv/wadadak/blob/main/BackEnd/src/main/java/com/wadadak/course/internal/course/Course.java"
click node_registration "https://github.com/sunmoonuniv/wadadak/blob/main/BackEnd/src/main/java/com/wadadak/course/internal/registration/RegistrationService.java"
click node_route "https://github.com/sunmoonuniv/wadadak/blob/main/BackEnd/src/main/java/com/wadadak/course/internal/route/RouteService.java"
click node_explore "https://github.com/sunmoonuniv/wadadak/tree/main/BackEnd/src/main/java/com/wadadak/course/internal/explore"
click node_bookmarks "https://github.com/sunmoonuniv/wadadak/tree/main/BackEnd/src/main/java/com/wadadak/course/internal/bookmark"
click node_runs "https://github.com/sunmoonuniv/wadadak/blob/main/BackEnd/src/main/java/com/wadadak/run/internal/recording/RunService.java"
click node_judging "https://github.com/sunmoonuniv/wadadak/tree/main/BackEnd/src/main/java/com/wadadak/run/internal/judging"
click node_ghost "https://github.com/sunmoonuniv/wadadak/tree/main/BackEnd/src/main/java/com/wadadak/run/internal/ghost"
click node_reviews "https://github.com/sunmoonuniv/wadadak/blob/main/BackEnd/src/main/java/com/wadadak/review/internal/ReviewService.java"
click node_reviewquery "https://github.com/sunmoonuniv/wadadak/blob/main/BackEnd/src/main/java/com/wadadak/review/internal/ReviewQueryService.java"
click node_ranking "https://github.com/sunmoonuniv/wadadak/tree/main/BackEnd/src/main/java/com/wadadak/ranking/internal"
click node_notifications "https://github.com/sunmoonuniv/wadadak/tree/main/BackEnd/src/main/java/com/wadadak/notification/internal"
click node_event "https://github.com/sunmoonuniv/wadadak/tree/main/BackEnd/src/main/java/com/wadadak/event"

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_bootstrap,node_common,node_region,node_storage,node_event toneBlue
class node_auth,node_account,node_runnerprofile,node_runnersearch,node_postgis toneAmber
class node_course,node_registration,node_route,node_explore,node_bookmarks toneMint
class node_runs,node_judging,node_ghost toneRose
class node_reviews,node_reviewquery,node_ranking,node_notifications,node_runner,node_app toneIndigo
```

## Components

### Shared Backend

- [Backend Application](https://github.com/sunmoonuniv/wadadak/blob/main/BackEnd/src/main/java/com/wadadak/WadadakApplication.java): `BackEnd/src/main/java/com/wadadak/WadadakApplication.java`
- [Shared Services](https://github.com/sunmoonuniv/wadadak/tree/main/BackEnd/src/main/java/com/wadadak/common): `BackEnd/src/main/java/com/wadadak/common`
- [Region Directory](https://github.com/sunmoonuniv/wadadak/blob/main/BackEnd/src/main/java/com/wadadak/common/region/RegionDirectory.java): `BackEnd/src/main/java/com/wadadak/common/region/RegionDirectory.java`
- [Photo Storage](https://github.com/sunmoonuniv/wadadak/blob/main/BackEnd/src/main/java/com/wadadak/common/storage/ObjectStorage.java): `BackEnd/src/main/java/com/wadadak/common/storage/ObjectStorage.java`
- [Domain Events](https://github.com/sunmoonuniv/wadadak/tree/main/BackEnd/src/main/java/com/wadadak/event): `BackEnd/src/main/java/com/wadadak/event`

### Member Accounts

- [Social Sign-in](https://github.com/sunmoonuniv/wadadak/blob/main/BackEnd/src/main/java/com/wadadak/member/internal/auth/AuthService.java): `BackEnd/src/main/java/com/wadadak/member/internal/auth/AuthService.java`
- [Member Accounts](https://github.com/sunmoonuniv/wadadak/blob/main/BackEnd/src/main/java/com/wadadak/member/internal/account/MemberService.java): `BackEnd/src/main/java/com/wadadak/member/internal/account/MemberService.java`
- [Runner Profiles](https://github.com/sunmoonuniv/wadadak/blob/main/BackEnd/src/main/java/com/wadadak/member/internal/profile/RunnerProfileService.java): `BackEnd/src/main/java/com/wadadak/member/internal/profile/RunnerProfileService.java`
- [Runner Search](https://github.com/sunmoonuniv/wadadak/blob/main/BackEnd/src/main/java/com/wadadak/member/internal/search/RunnerSearchService.java): `BackEnd/src/main/java/com/wadadak/member/internal/search/RunnerSearchService.java`

### Running Courses

- [Course Domain](https://github.com/sunmoonuniv/wadadak/blob/main/BackEnd/src/main/java/com/wadadak/course/internal/course/Course.java): `BackEnd/src/main/java/com/wadadak/course/internal/course/Course.java`
- [Course Registration](https://github.com/sunmoonuniv/wadadak/blob/main/BackEnd/src/main/java/com/wadadak/course/internal/registration/RegistrationService.java): `BackEnd/src/main/java/com/wadadak/course/internal/registration/RegistrationService.java`
- [Route Generation](https://github.com/sunmoonuniv/wadadak/blob/main/BackEnd/src/main/java/com/wadadak/course/internal/route/RouteService.java): `BackEnd/src/main/java/com/wadadak/course/internal/route/RouteService.java`
- [Course Discovery](https://github.com/sunmoonuniv/wadadak/tree/main/BackEnd/src/main/java/com/wadadak/course/internal/explore): `BackEnd/src/main/java/com/wadadak/course/internal/explore`
- [Course Bookmarks](https://github.com/sunmoonuniv/wadadak/tree/main/BackEnd/src/main/java/com/wadadak/course/internal/bookmark): `BackEnd/src/main/java/com/wadadak/course/internal/bookmark`

### Run Recording

- [Run Recording](https://github.com/sunmoonuniv/wadadak/blob/main/BackEnd/src/main/java/com/wadadak/run/internal/recording/RunService.java): `BackEnd/src/main/java/com/wadadak/run/internal/recording/RunService.java`
- [Run Judging](https://github.com/sunmoonuniv/wadadak/tree/main/BackEnd/src/main/java/com/wadadak/run/internal/judging): `BackEnd/src/main/java/com/wadadak/run/internal/judging`
- [Ghost Running](https://github.com/sunmoonuniv/wadadak/tree/main/BackEnd/src/main/java/com/wadadak/run/internal/ghost): `BackEnd/src/main/java/com/wadadak/run/internal/ghost`

### Community and Engagement

- [Reviews](https://github.com/sunmoonuniv/wadadak/blob/main/BackEnd/src/main/java/com/wadadak/review/internal/ReviewService.java): `BackEnd/src/main/java/com/wadadak/review/internal/ReviewService.java`
- [Review Queries](https://github.com/sunmoonuniv/wadadak/blob/main/BackEnd/src/main/java/com/wadadak/review/internal/ReviewQueryService.java): `BackEnd/src/main/java/com/wadadak/review/internal/ReviewQueryService.java`
- [Rankings](https://github.com/sunmoonuniv/wadadak/tree/main/BackEnd/src/main/java/com/wadadak/ranking/internal): `BackEnd/src/main/java/com/wadadak/ranking/internal`
- [Notifications](https://github.com/sunmoonuniv/wadadak/tree/main/BackEnd/src/main/java/com/wadadak/notification/internal): `BackEnd/src/main/java/com/wadadak/notification/internal`

### Other components

- **Runner**
- **Mobile App**
- **PostGIS**

## Connections

- Runner → Mobile App: uses
- Mobile App → Backend Application: requests backend
- Backend Application → Social Sign-in: hosts
- Social Sign-in → Region Directory: validates region (evidence: `BackEnd/src/main/java/com/wadadak/member/internal/auth/AuthService.java`)
- Social Sign-in → Photo Storage: handles photos (evidence: `BackEnd/src/main/java/com/wadadak/member/internal/auth/AuthService.java`)
- Social Sign-in → Member Accounts: persists member (evidence: `BackEnd/src/main/java/com/wadadak/member/internal/auth/AuthService.java`)
- Runner → Course Registration: registers course
- Course Registration → Route Generation: builds route (evidence: `BackEnd/src/main/java/com/wadadak/course/internal/registration/RegistrationService.java`)
- Route Generation → PostGIS: calculates geometry (evidence: `BackEnd/src/main/java/com/wadadak/course/internal/route/RouteService.java`)
- Route Generation → Course Domain: creates route data
- Runner → Course Discovery: discovers courses
- Runner → Run Recording: records run
- Run Recording → Run Judging: uses judging
- Runner → Ghost Running: runs against ghost
- Runner → Reviews: writes review
- Reviews → Review Queries: serves review reads
- Reviews → Domain Events: publishes review events (evidence: `BackEnd/src/main/java/com/wadadak/review/internal/ReviewService.java`)
- Review Queries → Runner Profiles: fetches profiles (evidence: `BackEnd/src/main/java/com/wadadak/review/internal/ReviewQueryService.java`)
- Review Queries → Photo Storage: loads review photos (evidence: `BackEnd/src/main/java/com/wadadak/review/internal/ReviewQueryService.java`)
- Runner → Runner Search: searches runners
- Runner → Course Bookmarks: saves courses
- Runner → Rankings: views rankings
- Runner → Notifications: receives notices
- Shared Services → Backend Application: supports runtime
