# ita-social-projects/oitassist architecture

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

- Interactive diagram: https://gitdiagram.com/ita-social-projects/oitassist
- Repository: https://github.com/ita-social-projects/oitassist

## Overview

OITAssist is a modular monolith for planning and running programming competitions. Its domain spans competition and tour lifecycle management, task authoring and assignment, participant enrollment and submissions, results aggregation, and supporting forums, files, registration, and news. The tree and README establish these capabilities; sampled service contracts clarify several behaviors, including status rules, forum access, file storage, and score aggregation. Some subsystem implementations were not sampled, so the graph leaves their internal wiring unspecified.

Main entry points: [`src/main/java/com/itasocialacademy/oitassist/auth/controller/RegistrationController.java`](https://github.com/ita-social-projects/oitassist/blob/dev/src/main/java/com/itasocialacademy/oitassist/auth/controller/RegistrationController.java) (Registration), [`src/main/java/com/itasocialacademy/oitassist/competition/controller/CompetitionController.java`](https://github.com/ita-social-projects/oitassist/blob/dev/src/main/java/com/itasocialacademy/oitassist/competition/controller/CompetitionController.java) (Competition API), [`src/main/java/com/itasocialacademy/oitassist/competition/service/CompetitionServiceImpl.java`](https://github.com/ita-social-projects/oitassist/blob/dev/src/main/java/com/itasocialacademy/oitassist/competition/service/CompetitionServiceImpl.java) (Competition lifecycle), [`src/main/java/com/itasocialacademy/oitassist/competition/service/StageServiceImpl.java`](https://github.com/ita-social-projects/oitassist/blob/dev/src/main/java/com/itasocialacademy/oitassist/competition/service/StageServiceImpl.java) (Stage management)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_identity["Identity and access"]
  node_registration["Registration"]
  node_activation["Account activation"]
  node_twofactor["Two-factor auth"]
  node_users["User profiles<br/>[UserService.java]"]
end

subgraph group_planning["Competition planning"]
  node_competition_api["Competition API"]
  node_competition["Competition lifecycle"]
  node_stages["Stage management"]
  node_tours["Tour management"]
end

subgraph group_contest["Contest participation"]
  node_participation["Enrollment"]
  node_tasks["Task authoring<br/>[TaskService.java]"]
  node_assignments["Task assignment"]
  node_submissions["Submissions"]
  node_forum["Participant forum"]
end

subgraph group_support["Files and communication"]
  node_file_api["File management"]
  node_file_service["File service"]
  node_storage["Storage providers"]
  node_sharepoint["SharePoint"]
  node_news["News and archiving"]
end

subgraph group_outcomes["Results and operations"]
  node_results["Results aggregation"]
  node_exports["Result exports"]
end

node_user(("User"))
node_postgres[("Application data")]

node_user -->|"registers"| node_registration
node_registration -->|"publishes activation event"| node_activation
node_user -->|"enrolls or verifies"| node_twofactor
node_user -->|"manages competitions"| node_competition_api
node_competition_api -->|"handles lifecycle"| node_competition
node_competition -->|"organizes stages"| node_stages
node_stages -->|"organizes tours"| node_tours
node_user -->|"authors tasks"| node_tasks
node_user -->|"manages assignments"| node_assignments
node_user -->|"requests enrollment"| node_participation
node_user -->|"submits work"| node_submissions
node_user -->|"asks questions"| node_forum
node_user -->|"uploads or retrieves files"| node_file_api
node_file_api -->|"delegates file operations"| node_file_service
node_file_service -->|"transfers file bytes"| node_storage
node_storage -.->|"optional provider"| node_sharepoint
node_user -->|"reads announcements"| node_news
node_user -->|"views scores"| node_results
node_results -->|"exports results"| node_exports

click node_registration "https://github.com/ita-social-projects/oitassist/blob/dev/src/main/java/com/itasocialacademy/oitassist/auth/controller/RegistrationController.java"
click node_activation "https://github.com/ita-social-projects/oitassist/blob/dev/src/main/java/com/itasocialacademy/oitassist/auth/listener/ActivationAccountListener.java"
click node_twofactor "https://github.com/ita-social-projects/oitassist/blob/dev/src/main/java/com/itasocialacademy/oitassist/security/service/interfaces/TwoFactorService.java"
click node_users "https://github.com/ita-social-projects/oitassist/blob/dev/src/main/java/com/itasocialacademy/oitassist/user/service/interfaces/UserService.java"
click node_competition_api "https://github.com/ita-social-projects/oitassist/blob/dev/src/main/java/com/itasocialacademy/oitassist/competition/controller/CompetitionController.java"
click node_competition "https://github.com/ita-social-projects/oitassist/blob/dev/src/main/java/com/itasocialacademy/oitassist/competition/service/CompetitionServiceImpl.java"
click node_stages "https://github.com/ita-social-projects/oitassist/blob/dev/src/main/java/com/itasocialacademy/oitassist/competition/service/StageServiceImpl.java"
click node_tours "https://github.com/ita-social-projects/oitassist/blob/dev/src/main/java/com/itasocialacademy/oitassist/competition/service/TourServiceImpl.java"
click node_participation "https://github.com/ita-social-projects/oitassist/tree/dev/src/main/java/com/itasocialacademy/oitassist/participation"
click node_tasks "https://github.com/ita-social-projects/oitassist/blob/dev/src/main/java/com/itasocialacademy/oitassist/task/service/interfaces/TaskService.java"
click node_assignments "https://github.com/ita-social-projects/oitassist/blob/dev/src/main/java/com/itasocialacademy/oitassist/taskassignment/service/interfaces/AssignmentService.java"
click node_submissions "https://github.com/ita-social-projects/oitassist/blob/dev/src/main/java/com/itasocialacademy/oitassist/submission/service/interfaces/SubmissionService.java"
click node_forum "https://github.com/ita-social-projects/oitassist/blob/dev/src/main/java/com/itasocialacademy/oitassist/chat/service/interfaces/ParticipantForumService.java"
click node_file_api "https://github.com/ita-social-projects/oitassist/blob/dev/src/main/java/com/itasocialacademy/oitassist/filemanager/controller/FileController.java"
click node_file_service "https://github.com/ita-social-projects/oitassist/blob/dev/src/main/java/com/itasocialacademy/oitassist/filemanager/service/FileServiceImpl.java"
click node_storage "https://github.com/ita-social-projects/oitassist/blob/dev/src/main/java/com/itasocialacademy/oitassist/filemanager/providers/interfaces/StorageProvider.java"
click node_sharepoint "https://github.com/ita-social-projects/oitassist/blob/dev/src/main/java/com/itasocialacademy/oitassist/filemanager/providers/SharePointStorageProvider.java"
click node_news "https://github.com/ita-social-projects/oitassist/blob/dev/src/main/java/com/itasocialacademy/oitassist/news/service/NewsServiceImpl.java"
click node_results "https://github.com/ita-social-projects/oitassist/blob/dev/src/main/java/com/itasocialacademy/oitassist/evaluation/service/ResultsAggregator.java"
click node_exports "https://github.com/ita-social-projects/oitassist/blob/dev/src/main/java/com/itasocialacademy/oitassist/export/service/ExportServiceImpl.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_registration,node_activation,node_twofactor,node_users,node_user toneBlue
class node_competition_api,node_competition,node_stages,node_tours,node_postgres toneAmber
class node_participation,node_tasks,node_assignments,node_submissions,node_forum toneMint
class node_file_api,node_file_service,node_storage,node_sharepoint,node_news toneRose
class node_results,node_exports toneIndigo
```

## Components

### Identity and access

- [Registration](https://github.com/ita-social-projects/oitassist/blob/dev/src/main/java/com/itasocialacademy/oitassist/auth/controller/RegistrationController.java): `src/main/java/com/itasocialacademy/oitassist/auth/controller/RegistrationController.java`
- [Account activation](https://github.com/ita-social-projects/oitassist/blob/dev/src/main/java/com/itasocialacademy/oitassist/auth/listener/ActivationAccountListener.java): `src/main/java/com/itasocialacademy/oitassist/auth/listener/ActivationAccountListener.java`
- [Two-factor auth](https://github.com/ita-social-projects/oitassist/blob/dev/src/main/java/com/itasocialacademy/oitassist/security/service/interfaces/TwoFactorService.java): `src/main/java/com/itasocialacademy/oitassist/security/service/interfaces/TwoFactorService.java`
- [User profiles](https://github.com/ita-social-projects/oitassist/blob/dev/src/main/java/com/itasocialacademy/oitassist/user/service/interfaces/UserService.java): `src/main/java/com/itasocialacademy/oitassist/user/service/interfaces/UserService.java`

### Competition planning

- [Competition API](https://github.com/ita-social-projects/oitassist/blob/dev/src/main/java/com/itasocialacademy/oitassist/competition/controller/CompetitionController.java): `src/main/java/com/itasocialacademy/oitassist/competition/controller/CompetitionController.java`
- [Competition lifecycle](https://github.com/ita-social-projects/oitassist/blob/dev/src/main/java/com/itasocialacademy/oitassist/competition/service/CompetitionServiceImpl.java): `src/main/java/com/itasocialacademy/oitassist/competition/service/CompetitionServiceImpl.java`
- [Stage management](https://github.com/ita-social-projects/oitassist/blob/dev/src/main/java/com/itasocialacademy/oitassist/competition/service/StageServiceImpl.java): `src/main/java/com/itasocialacademy/oitassist/competition/service/StageServiceImpl.java`
- [Tour management](https://github.com/ita-social-projects/oitassist/blob/dev/src/main/java/com/itasocialacademy/oitassist/competition/service/TourServiceImpl.java): `src/main/java/com/itasocialacademy/oitassist/competition/service/TourServiceImpl.java`

### Contest participation

- [Enrollment](https://github.com/ita-social-projects/oitassist/tree/dev/src/main/java/com/itasocialacademy/oitassist/participation): `src/main/java/com/itasocialacademy/oitassist/participation`
- [Task authoring](https://github.com/ita-social-projects/oitassist/blob/dev/src/main/java/com/itasocialacademy/oitassist/task/service/interfaces/TaskService.java): `src/main/java/com/itasocialacademy/oitassist/task/service/interfaces/TaskService.java`
- [Task assignment](https://github.com/ita-social-projects/oitassist/blob/dev/src/main/java/com/itasocialacademy/oitassist/taskassignment/service/interfaces/AssignmentService.java): `src/main/java/com/itasocialacademy/oitassist/taskassignment/service/interfaces/AssignmentService.java`
- [Submissions](https://github.com/ita-social-projects/oitassist/blob/dev/src/main/java/com/itasocialacademy/oitassist/submission/service/interfaces/SubmissionService.java): `src/main/java/com/itasocialacademy/oitassist/submission/service/interfaces/SubmissionService.java`
- [Participant forum](https://github.com/ita-social-projects/oitassist/blob/dev/src/main/java/com/itasocialacademy/oitassist/chat/service/interfaces/ParticipantForumService.java): `src/main/java/com/itasocialacademy/oitassist/chat/service/interfaces/ParticipantForumService.java`

### Files and communication

- [File management](https://github.com/ita-social-projects/oitassist/blob/dev/src/main/java/com/itasocialacademy/oitassist/filemanager/controller/FileController.java): `src/main/java/com/itasocialacademy/oitassist/filemanager/controller/FileController.java`
- [File service](https://github.com/ita-social-projects/oitassist/blob/dev/src/main/java/com/itasocialacademy/oitassist/filemanager/service/FileServiceImpl.java): `src/main/java/com/itasocialacademy/oitassist/filemanager/service/FileServiceImpl.java`
- [Storage providers](https://github.com/ita-social-projects/oitassist/blob/dev/src/main/java/com/itasocialacademy/oitassist/filemanager/providers/interfaces/StorageProvider.java): `src/main/java/com/itasocialacademy/oitassist/filemanager/providers/interfaces/StorageProvider.java`
- [SharePoint](https://github.com/ita-social-projects/oitassist/blob/dev/src/main/java/com/itasocialacademy/oitassist/filemanager/providers/SharePointStorageProvider.java): `src/main/java/com/itasocialacademy/oitassist/filemanager/providers/SharePointStorageProvider.java`
- [News and archiving](https://github.com/ita-social-projects/oitassist/blob/dev/src/main/java/com/itasocialacademy/oitassist/news/service/NewsServiceImpl.java): `src/main/java/com/itasocialacademy/oitassist/news/service/NewsServiceImpl.java`

### Results and operations

- [Results aggregation](https://github.com/ita-social-projects/oitassist/blob/dev/src/main/java/com/itasocialacademy/oitassist/evaluation/service/ResultsAggregator.java): `src/main/java/com/itasocialacademy/oitassist/evaluation/service/ResultsAggregator.java`
- [Result exports](https://github.com/ita-social-projects/oitassist/blob/dev/src/main/java/com/itasocialacademy/oitassist/export/service/ExportServiceImpl.java): `src/main/java/com/itasocialacademy/oitassist/export/service/ExportServiceImpl.java`

### Other components

- **User**
- **Application data**

## Connections

- User → Registration: registers
- Registration → Account activation: publishes activation event
- User → Two-factor auth: enrolls or verifies
- User → Competition API: manages competitions
- Competition API → Competition lifecycle: handles lifecycle
- Competition lifecycle → Stage management: organizes stages
- Stage management → Tour management: organizes tours
- User → Task authoring: authors tasks
- User → Task assignment: manages assignments
- User → Enrollment: requests enrollment
- User → Submissions: submits work
- User → Participant forum: asks questions
- User → File management: uploads or retrieves files
- File management → File service: delegates file operations
- File service → Storage providers: transfers file bytes
- Storage providers → SharePoint: optional provider
- User → News and archiving: reads announcements
- User → Results aggregation: views scores
- Results aggregation → Result exports: exports results
