# flaviusstefan/flirtly architecture

> Architecture diagram of the GitHub repository flaviusstefan/flirtly, 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/flaviusstefan/flirtly
- Repository: https://github.com/flaviusstefan/flirtly

## Overview

Flirtly is a dating platform where users register or log in, discover and like profiles, customize profiles with photos, and message other users; administrators and moderators also manage users and photo moderation. The Angular client calls the .NET API, which handles identity, profile and interaction operations over persisted application data, with SignalR supporting live communication and presence. The tree and sampled files establish the account, profile, message and repository paths; some feature wiring, including likes and real-time clients, is documented or visible in the tree but not sampled.

Main entry points: [`API/Data/UnitOfWork.cs`](https://github.com/flaviusstefan/flirtly/blob/Socialize/API/Data/UnitOfWork.cs) (Unit of work), [`API/Data/DataContext.cs`](https://github.com/flaviusstefan/flirtly/blob/Socialize/API/Data/DataContext.cs) (Data context), [`client/src/app/_services/members.service.ts`](https://github.com/flaviusstefan/flirtly/blob/Socialize/client/src/app/_services/members.service.ts) (Members service), [`API/Controllers/AccountController.cs`](https://github.com/flaviusstefan/flirtly/blob/Socialize/API/Controllers/AccountController.cs) (Account API)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_client["Angular client"]
  node_app["Angular app<br/>[app.module.ts]"]
  node_account_client["Account service<br/>[account.service.ts]"]
  node_member_ui["Member and profile UI"]
  node_members_service["Members service<br/>[members.service.ts]"]
  node_admin_ui["Admin UI"]
  node_messages_ui["Messages UI"]
  node_message_service["Message service<br/>[message.service.ts]"]
  node_presence_service["Presence service"]
end

subgraph group_identity["Identity and profiles"]
  node_account_api["Account API"]
  node_token_service["Token service<br/>[TokenService.cs]"]
  node_users_api["Users API<br/>[UsersController.cs]"]
  node_admin_api["Admin API<br/>[AdminController.cs]"]
  node_photo_service["Photo service<br/>[PhotoService.cs]"]
end

subgraph group_connections["Likes and messaging"]
  node_likes_api["Likes API<br/>[LikesController.cs]"]
  node_messages_api["Messages API"]
end

subgraph group_backend["API and persistence"]
  node_unit_of_work["Unit of work<br/>[UnitOfWork.cs]"]
  node_user_repository["User repository<br/>[UserRepository.cs]"]
  node_message_repository["Message repository"]
  node_data_context["Data context<br/>[DataContext.cs]"]
end

subgraph group_realtime["Live communication"]
  node_message_hub["Message hub<br/>[MessageHub.cs]"]
  node_presence_hub["Presence hub<br/>[PresenceHub.cs]"]
  node_presence_tracker["Presence tracker<br/>[PresenceTracker.cs]"]
end

node_visitor(("User"))
node_postgres[("PostgreSQL")]
node_cloudinary[("Cloudinary")]

node_visitor -->|"uses"| node_app
node_app -->|"restores session"| node_account_client
node_member_ui -->|"requests profiles"| node_members_service
node_members_service -->|"HTTP requests"| node_users_api
node_members_service -->|"HTTP requests"| node_likes_api
node_admin_ui -->|"manages roles"| node_admin_api
node_messages_ui -->|"uses"| node_message_service
node_message_service -->|"HTTP requests"| node_messages_api
node_presence_service -->|"connects"| node_presence_hub
node_account_client -->|"HTTP requests"| node_account_api
node_account_api -->|"creates token"| node_token_service
node_account_api -->|"identity store"| node_data_context
node_users_api -->|"calls"| node_unit_of_work
node_users_api -->|"uploads or deletes"| node_photo_service
node_admin_api -->|"queries users"| node_data_context
node_likes_api -->|"calls"| node_unit_of_work
node_messages_api -->|"calls"| node_unit_of_work
node_unit_of_work -->|"provides"| node_user_repository
node_unit_of_work -->|"provides"| node_message_repository
node_user_repository -->|"queries users"| node_data_context
node_message_repository -->|"queries messages"| node_data_context
node_data_context -->|"reads and writes"| node_postgres
node_photo_service -.->|"uploads and deletes"| node_cloudinary
node_message_hub -->|"manages groups"| node_message_repository
node_presence_hub -->|"tracks connections"| node_presence_tracker

click node_app "https://github.com/flaviusstefan/flirtly/blob/Socialize/client/src/app/app.module.ts"
click node_account_client "https://github.com/flaviusstefan/flirtly/blob/Socialize/client/src/app/_services/account.service.ts"
click node_member_ui "https://github.com/flaviusstefan/flirtly/tree/Socialize/client/src/app/members"
click node_members_service "https://github.com/flaviusstefan/flirtly/blob/Socialize/client/src/app/_services/members.service.ts"
click node_admin_ui "https://github.com/flaviusstefan/flirtly/tree/Socialize/client/src/app/admin"
click node_messages_ui "https://github.com/flaviusstefan/flirtly/blob/Socialize/client/src/app/messages/messages.component.ts"
click node_message_service "https://github.com/flaviusstefan/flirtly/blob/Socialize/client/src/app/_services/message.service.ts"
click node_presence_service "https://github.com/flaviusstefan/flirtly/blob/Socialize/client/src/app/_services/presence.service.ts"
click node_account_api "https://github.com/flaviusstefan/flirtly/blob/Socialize/API/Controllers/AccountController.cs"
click node_token_service "https://github.com/flaviusstefan/flirtly/blob/Socialize/API/Services/TokenService.cs"
click node_users_api "https://github.com/flaviusstefan/flirtly/blob/Socialize/API/Controllers/UsersController.cs"
click node_admin_api "https://github.com/flaviusstefan/flirtly/blob/Socialize/API/Controllers/AdminController.cs"
click node_likes_api "https://github.com/flaviusstefan/flirtly/blob/Socialize/API/Controllers/LikesController.cs"
click node_messages_api "https://github.com/flaviusstefan/flirtly/blob/Socialize/API/Controllers/MessagesController.cs"
click node_unit_of_work "https://github.com/flaviusstefan/flirtly/blob/Socialize/API/Data/UnitOfWork.cs"
click node_user_repository "https://github.com/flaviusstefan/flirtly/blob/Socialize/API/Data/UserRepository.cs"
click node_message_repository "https://github.com/flaviusstefan/flirtly/blob/Socialize/API/Data/MessageRepository.cs"
click node_data_context "https://github.com/flaviusstefan/flirtly/blob/Socialize/API/Data/DataContext.cs"
click node_photo_service "https://github.com/flaviusstefan/flirtly/blob/Socialize/API/Services/PhotoService.cs"
click node_message_hub "https://github.com/flaviusstefan/flirtly/blob/Socialize/API/SignalR/MessageHub.cs"
click node_presence_hub "https://github.com/flaviusstefan/flirtly/blob/Socialize/API/SignalR/PresenceHub.cs"
click node_presence_tracker "https://github.com/flaviusstefan/flirtly/blob/Socialize/API/SignalR/PresenceTracker.cs"

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_account_client,node_member_ui,node_members_service,node_admin_ui,node_messages_ui,node_message_service,node_presence_service,node_visitor toneBlue
class node_account_api,node_token_service,node_users_api,node_admin_api,node_photo_service,node_postgres,node_cloudinary toneAmber
class node_likes_api,node_messages_api toneMint
class node_unit_of_work,node_user_repository,node_message_repository,node_data_context toneRose
class node_message_hub,node_presence_hub,node_presence_tracker toneIndigo
```

## Components

### Angular client

- [Angular app](https://github.com/flaviusstefan/flirtly/blob/Socialize/client/src/app/app.module.ts): `client/src/app/app.module.ts`
- [Account service](https://github.com/flaviusstefan/flirtly/blob/Socialize/client/src/app/_services/account.service.ts): `client/src/app/_services/account.service.ts`
- [Member and profile UI](https://github.com/flaviusstefan/flirtly/tree/Socialize/client/src/app/members): `client/src/app/members`
- [Members service](https://github.com/flaviusstefan/flirtly/blob/Socialize/client/src/app/_services/members.service.ts): `client/src/app/_services/members.service.ts`
- [Admin UI](https://github.com/flaviusstefan/flirtly/tree/Socialize/client/src/app/admin): `client/src/app/admin`
- [Messages UI](https://github.com/flaviusstefan/flirtly/blob/Socialize/client/src/app/messages/messages.component.ts): `client/src/app/messages/messages.component.ts`
- [Message service](https://github.com/flaviusstefan/flirtly/blob/Socialize/client/src/app/_services/message.service.ts): `client/src/app/_services/message.service.ts`
- [Presence service](https://github.com/flaviusstefan/flirtly/blob/Socialize/client/src/app/_services/presence.service.ts): `client/src/app/_services/presence.service.ts`

### Identity and profiles

- [Account API](https://github.com/flaviusstefan/flirtly/blob/Socialize/API/Controllers/AccountController.cs): `API/Controllers/AccountController.cs`
- [Token service](https://github.com/flaviusstefan/flirtly/blob/Socialize/API/Services/TokenService.cs): `API/Services/TokenService.cs`
- [Users API](https://github.com/flaviusstefan/flirtly/blob/Socialize/API/Controllers/UsersController.cs): `API/Controllers/UsersController.cs`
- [Admin API](https://github.com/flaviusstefan/flirtly/blob/Socialize/API/Controllers/AdminController.cs): `API/Controllers/AdminController.cs`
- [Photo service](https://github.com/flaviusstefan/flirtly/blob/Socialize/API/Services/PhotoService.cs): `API/Services/PhotoService.cs`

### Likes and messaging

- [Likes API](https://github.com/flaviusstefan/flirtly/blob/Socialize/API/Controllers/LikesController.cs): `API/Controllers/LikesController.cs`
- [Messages API](https://github.com/flaviusstefan/flirtly/blob/Socialize/API/Controllers/MessagesController.cs): `API/Controllers/MessagesController.cs`

### API and persistence

- [Unit of work](https://github.com/flaviusstefan/flirtly/blob/Socialize/API/Data/UnitOfWork.cs): `API/Data/UnitOfWork.cs`
- [User repository](https://github.com/flaviusstefan/flirtly/blob/Socialize/API/Data/UserRepository.cs): `API/Data/UserRepository.cs`
- [Message repository](https://github.com/flaviusstefan/flirtly/blob/Socialize/API/Data/MessageRepository.cs): `API/Data/MessageRepository.cs`
- [Data context](https://github.com/flaviusstefan/flirtly/blob/Socialize/API/Data/DataContext.cs): `API/Data/DataContext.cs`

### Live communication

- [Message hub](https://github.com/flaviusstefan/flirtly/blob/Socialize/API/SignalR/MessageHub.cs): `API/SignalR/MessageHub.cs`
- [Presence hub](https://github.com/flaviusstefan/flirtly/blob/Socialize/API/SignalR/PresenceHub.cs): `API/SignalR/PresenceHub.cs`
- [Presence tracker](https://github.com/flaviusstefan/flirtly/blob/Socialize/API/SignalR/PresenceTracker.cs): `API/SignalR/PresenceTracker.cs`

### Other components

- **User**
- **PostgreSQL**
- **Cloudinary**

## Connections

- User → Angular app: uses
- Angular app → Account service: restores session
- Member and profile UI → Members service: requests profiles
- Members service → Users API: HTTP requests
- Members service → Likes API: HTTP requests
- Admin UI → Admin API: manages roles
- Messages UI → Message service: uses
- Message service → Messages API: HTTP requests
- Presence service → Presence hub: connects
- Account service → Account API: HTTP requests
- Account API → Token service: creates token
- Account API → Data context: identity store
- Users API → Unit of work: calls
- Users API → Photo service: uploads or deletes
- Admin API → Data context: queries users
- Likes API → Unit of work: calls
- Messages API → Unit of work: calls
- Unit of work → User repository: provides
- Unit of work → Message repository: provides
- User repository → Data context: queries users
- Message repository → Data context: queries messages
- Data context → PostgreSQL: reads and writes
- Photo service → Cloudinary: uploads and deletes
- Message hub → Message repository: manages groups
- Presence hub → Presence tracker: tracks connections
