# chuonghoai/smart_space architecture

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

- Interactive diagram: https://gitdiagram.com/chuonghoai/smart_space
- Repository: https://github.com/chuonghoai/smart_space

## Overview

SmartSpace is a multi-client messaging and collaboration product with a Spring Boot backend; the README names separate Flutter client, admin, and staff apps but documents no feature-level client flows. The backend’s supported workflow includes authentication, OTP registration, and token refresh, alongside conversation creation and message persistence. The graph preserves other major backend domains visible in the tree, including media, notifications, devices, and reports. Evidence is limited: most of those domain services and their controller wiring were not sampled, so their relationships are not asserted.

Main entry points: [`SmartSpace_Backend/src/main/java/com/vn/smart_space/service/auth/AuthenticationService.java`](https://github.com/chuonghoai/smart_space/blob/main/SmartSpace_Backend/src/main/java/com/vn/smart_space/service/auth/AuthenticationService.java) (Authentication), [`SmartSpace_Backend/src/main/java/com/vn/smart_space/repository/UserRepository.java`](https://github.com/chuonghoai/smart_space/blob/main/SmartSpace_Backend/src/main/java/com/vn/smart_space/repository/UserRepository.java) (User repository), [`SmartSpace_Backend/src/main/java/com/vn/smart_space/service/chat/ChatMessageService.java`](https://github.com/chuonghoai/smart_space/blob/main/SmartSpace_Backend/src/main/java/com/vn/smart_space/service/chat/ChatMessageService.java) (Chat messages), [`SmartSpace_Backend/src/main/java/com/vn/smart_space/controller/auth/AuthController.java`](https://github.com/chuonghoai/smart_space/blob/main/SmartSpace_Backend/src/main/java/com/vn/smart_space/controller/auth/AuthController.java) (Auth endpoints)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_clients["Flutter apps"]
  node_client_app["Client app"]
  node_admin_app["Admin app"]
  node_staff_app["Staff app"]
end

subgraph group_identity["Identity and profiles"]
  node_auth_api["Auth endpoints"]
  node_auth_service["Authentication"]
  node_user_service["User profiles<br/>[UserService.java]"]
  node_jwt_service["JWT handling<br/>[JwtService.java]"]
  node_auth_contracts["Auth contracts"]
  node_user_entity["User entity<br/>[User.java]"]
  node_user_repository["User repository"]
end

subgraph group_messaging["Messaging"]
  node_conversation_service["Conversations"]
  node_chat_service["Chat messages"]
  node_conversation_repository["Conversation store"]
  node_message_repository["Message store"]
end

subgraph group_operations["Product services"]
  node_media_service["Media uploads"]
  node_device_service["Device tokens<br/>[DeviceService.java]"]
  node_notification_service["Notifications"]
  node_report_service["Reports"]
end

subgraph group_platform["Backend platform"]
  node_domain_enums["Domain statuses"]
  node_exception_types["API exceptions"]
  node_invalid_token_repository["Revoked-token store"]
end

node_end_user(("App user"))
node_redis[("Redis")]
node_database[("Relational database")]
node_cloudinary["Cloudinary"]

node_end_user -.->|"uses"| node_client_app
node_client_app -.->|"calls"| node_auth_api
node_auth_api -->|"delegates to"| node_auth_service
node_auth_api -->|"delegates to"| node_user_service
node_auth_service -->|"looks up users"| node_user_repository
node_auth_service -->|"uses tokens"| node_jwt_service
node_auth_service -->|"stores OTP and refresh tokens"| node_redis
node_user_service -->|"reads and saves"| node_user_repository
node_user_service -->|"checks OTP verification"| node_redis
node_jwt_service -->|"checks revocation"| node_invalid_token_repository
node_conversation_service -->|"loads participants"| node_user_repository
node_conversation_service -->|"queries and saves"| node_conversation_repository
node_chat_service -->|"loads sender"| node_user_repository
node_chat_service -->|"checks membership and updates"| node_conversation_repository
node_chat_service -->|"saves message"| node_message_repository
node_media_service -.->|"uploads media"| node_cloudinary

click node_client_app "https://github.com/chuonghoai/smart_space/tree/main/smartspace_client"
click node_admin_app "https://github.com/chuonghoai/smart_space/tree/main/smartspace_admin"
click node_staff_app "https://github.com/chuonghoai/smart_space/tree/main/smartspace_staff"
click node_auth_api "https://github.com/chuonghoai/smart_space/blob/main/SmartSpace_Backend/src/main/java/com/vn/smart_space/controller/auth/AuthController.java"
click node_auth_service "https://github.com/chuonghoai/smart_space/blob/main/SmartSpace_Backend/src/main/java/com/vn/smart_space/service/auth/AuthenticationService.java"
click node_user_service "https://github.com/chuonghoai/smart_space/blob/main/SmartSpace_Backend/src/main/java/com/vn/smart_space/service/user/UserService.java"
click node_jwt_service "https://github.com/chuonghoai/smart_space/blob/main/SmartSpace_Backend/src/main/java/com/vn/smart_space/service/jwt/JwtService.java"
click node_auth_contracts "https://github.com/chuonghoai/smart_space/tree/main/SmartSpace_Backend/src/main/java/com/vn/smart_space/dto/request/auth"
click node_user_entity "https://github.com/chuonghoai/smart_space/blob/main/SmartSpace_Backend/src/main/java/com/vn/smart_space/model/User.java"
click node_user_repository "https://github.com/chuonghoai/smart_space/blob/main/SmartSpace_Backend/src/main/java/com/vn/smart_space/repository/UserRepository.java"
click node_conversation_service "https://github.com/chuonghoai/smart_space/blob/main/SmartSpace_Backend/src/main/java/com/vn/smart_space/service/conversation/ConversationService.java"
click node_chat_service "https://github.com/chuonghoai/smart_space/blob/main/SmartSpace_Backend/src/main/java/com/vn/smart_space/service/chat/ChatMessageService.java"
click node_conversation_repository "https://github.com/chuonghoai/smart_space/blob/main/SmartSpace_Backend/src/main/java/com/vn/smart_space/repository/ConversationRepository.java"
click node_message_repository "https://github.com/chuonghoai/smart_space/blob/main/SmartSpace_Backend/src/main/java/com/vn/smart_space/repository/ChatMessageRepository.java"
click node_media_service "https://github.com/chuonghoai/smart_space/blob/main/SmartSpace_Backend/src/main/java/com/vn/smart_space/service/cloudinary/CloudinaryService.java"
click node_device_service "https://github.com/chuonghoai/smart_space/blob/main/SmartSpace_Backend/src/main/java/com/vn/smart_space/service/device/DeviceService.java"
click node_notification_service "https://github.com/chuonghoai/smart_space/blob/main/SmartSpace_Backend/src/main/java/com/vn/smart_space/service/notification/NotificationServiceImpl.java"
click node_report_service "https://github.com/chuonghoai/smart_space/blob/main/SmartSpace_Backend/src/main/java/com/vn/smart_space/service/report/ReportServiceImpl.java"
click node_domain_enums "https://github.com/chuonghoai/smart_space/tree/main/SmartSpace_Backend/src/main/java/com/vn/smart_space/consts"
click node_exception_types "https://github.com/chuonghoai/smart_space/blob/main/SmartSpace_Backend/src/main/java/com/vn/smart_space/exception/BadRequestException.java"
click node_invalid_token_repository "https://github.com/chuonghoai/smart_space/blob/main/SmartSpace_Backend/src/main/java/com/vn/smart_space/repository/InvalidatedTokenRepository.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_client_app,node_admin_app,node_staff_app,node_end_user toneBlue
class node_auth_api,node_auth_service,node_user_service,node_jwt_service,node_auth_contracts,node_user_entity,node_user_repository,node_redis,node_database toneAmber
class node_conversation_service,node_chat_service,node_conversation_repository,node_message_repository toneMint
class node_media_service,node_device_service,node_notification_service,node_report_service toneRose
class node_domain_enums,node_exception_types,node_invalid_token_repository,node_cloudinary toneIndigo
```

## Components

### Flutter apps

- [Client app](https://github.com/chuonghoai/smart_space/tree/main/smartspace_client): `smartspace_client`
- [Admin app](https://github.com/chuonghoai/smart_space/tree/main/smartspace_admin): `smartspace_admin`
- [Staff app](https://github.com/chuonghoai/smart_space/tree/main/smartspace_staff): `smartspace_staff`

### Identity and profiles

- [Auth endpoints](https://github.com/chuonghoai/smart_space/blob/main/SmartSpace_Backend/src/main/java/com/vn/smart_space/controller/auth/AuthController.java): `SmartSpace_Backend/src/main/java/com/vn/smart_space/controller/auth/AuthController.java`
- [Authentication](https://github.com/chuonghoai/smart_space/blob/main/SmartSpace_Backend/src/main/java/com/vn/smart_space/service/auth/AuthenticationService.java): `SmartSpace_Backend/src/main/java/com/vn/smart_space/service/auth/AuthenticationService.java`
- [User profiles](https://github.com/chuonghoai/smart_space/blob/main/SmartSpace_Backend/src/main/java/com/vn/smart_space/service/user/UserService.java): `SmartSpace_Backend/src/main/java/com/vn/smart_space/service/user/UserService.java`
- [JWT handling](https://github.com/chuonghoai/smart_space/blob/main/SmartSpace_Backend/src/main/java/com/vn/smart_space/service/jwt/JwtService.java): `SmartSpace_Backend/src/main/java/com/vn/smart_space/service/jwt/JwtService.java`
- [Auth contracts](https://github.com/chuonghoai/smart_space/tree/main/SmartSpace_Backend/src/main/java/com/vn/smart_space/dto/request/auth): `SmartSpace_Backend/src/main/java/com/vn/smart_space/dto/request/auth`
- [User entity](https://github.com/chuonghoai/smart_space/blob/main/SmartSpace_Backend/src/main/java/com/vn/smart_space/model/User.java): `SmartSpace_Backend/src/main/java/com/vn/smart_space/model/User.java`
- [User repository](https://github.com/chuonghoai/smart_space/blob/main/SmartSpace_Backend/src/main/java/com/vn/smart_space/repository/UserRepository.java): `SmartSpace_Backend/src/main/java/com/vn/smart_space/repository/UserRepository.java`

### Messaging

- [Conversations](https://github.com/chuonghoai/smart_space/blob/main/SmartSpace_Backend/src/main/java/com/vn/smart_space/service/conversation/ConversationService.java): `SmartSpace_Backend/src/main/java/com/vn/smart_space/service/conversation/ConversationService.java`
- [Chat messages](https://github.com/chuonghoai/smart_space/blob/main/SmartSpace_Backend/src/main/java/com/vn/smart_space/service/chat/ChatMessageService.java): `SmartSpace_Backend/src/main/java/com/vn/smart_space/service/chat/ChatMessageService.java`
- [Conversation store](https://github.com/chuonghoai/smart_space/blob/main/SmartSpace_Backend/src/main/java/com/vn/smart_space/repository/ConversationRepository.java): `SmartSpace_Backend/src/main/java/com/vn/smart_space/repository/ConversationRepository.java`
- [Message store](https://github.com/chuonghoai/smart_space/blob/main/SmartSpace_Backend/src/main/java/com/vn/smart_space/repository/ChatMessageRepository.java): `SmartSpace_Backend/src/main/java/com/vn/smart_space/repository/ChatMessageRepository.java`

### Product services

- [Media uploads](https://github.com/chuonghoai/smart_space/blob/main/SmartSpace_Backend/src/main/java/com/vn/smart_space/service/cloudinary/CloudinaryService.java): `SmartSpace_Backend/src/main/java/com/vn/smart_space/service/cloudinary/CloudinaryService.java`
- [Device tokens](https://github.com/chuonghoai/smart_space/blob/main/SmartSpace_Backend/src/main/java/com/vn/smart_space/service/device/DeviceService.java): `SmartSpace_Backend/src/main/java/com/vn/smart_space/service/device/DeviceService.java`
- [Notifications](https://github.com/chuonghoai/smart_space/blob/main/SmartSpace_Backend/src/main/java/com/vn/smart_space/service/notification/NotificationServiceImpl.java): `SmartSpace_Backend/src/main/java/com/vn/smart_space/service/notification/NotificationServiceImpl.java`
- [Reports](https://github.com/chuonghoai/smart_space/blob/main/SmartSpace_Backend/src/main/java/com/vn/smart_space/service/report/ReportServiceImpl.java): `SmartSpace_Backend/src/main/java/com/vn/smart_space/service/report/ReportServiceImpl.java`

### Backend platform

- [Domain statuses](https://github.com/chuonghoai/smart_space/tree/main/SmartSpace_Backend/src/main/java/com/vn/smart_space/consts): `SmartSpace_Backend/src/main/java/com/vn/smart_space/consts`
- [API exceptions](https://github.com/chuonghoai/smart_space/blob/main/SmartSpace_Backend/src/main/java/com/vn/smart_space/exception/BadRequestException.java): `SmartSpace_Backend/src/main/java/com/vn/smart_space/exception/BadRequestException.java`
- [Revoked-token store](https://github.com/chuonghoai/smart_space/blob/main/SmartSpace_Backend/src/main/java/com/vn/smart_space/repository/InvalidatedTokenRepository.java): `SmartSpace_Backend/src/main/java/com/vn/smart_space/repository/InvalidatedTokenRepository.java`

### Other components

- **App user**
- **Redis**
- **Relational database**
- **Cloudinary**

## Connections

- App user → Client app: uses
- Client app → Auth endpoints: calls
- Auth endpoints → Authentication: delegates to (evidence: `SmartSpace_Backend/src/main/java/com/vn/smart_space/controller/auth/AuthController.java`)
- Auth endpoints → User profiles: delegates to (evidence: `SmartSpace_Backend/src/main/java/com/vn/smart_space/controller/auth/AuthController.java`)
- Authentication → User repository: looks up users (evidence: `SmartSpace_Backend/src/main/java/com/vn/smart_space/service/auth/AuthenticationService.java`)
- Authentication → JWT handling: uses tokens (evidence: `SmartSpace_Backend/src/main/java/com/vn/smart_space/service/auth/AuthenticationService.java`)
- Authentication → Redis: stores OTP and refresh tokens (evidence: `SmartSpace_Backend/src/main/java/com/vn/smart_space/service/auth/AuthenticationService.java`)
- User profiles → User repository: reads and saves (evidence: `SmartSpace_Backend/src/main/java/com/vn/smart_space/service/user/UserService.java`)
- User profiles → Redis: checks OTP verification (evidence: `SmartSpace_Backend/src/main/java/com/vn/smart_space/service/user/UserService.java`)
- JWT handling → Revoked-token store: checks revocation (evidence: `SmartSpace_Backend/src/main/java/com/vn/smart_space/service/jwt/JwtService.java`)
- Conversations → User repository: loads participants (evidence: `SmartSpace_Backend/src/main/java/com/vn/smart_space/service/conversation/ConversationService.java`)
- Conversations → Conversation store: queries and saves (evidence: `SmartSpace_Backend/src/main/java/com/vn/smart_space/service/conversation/ConversationService.java`)
- Chat messages → User repository: loads sender (evidence: `SmartSpace_Backend/src/main/java/com/vn/smart_space/service/chat/ChatMessageService.java`)
- Chat messages → Conversation store: checks membership and updates (evidence: `SmartSpace_Backend/src/main/java/com/vn/smart_space/service/chat/ChatMessageService.java`)
- Chat messages → Message store: saves message (evidence: `SmartSpace_Backend/src/main/java/com/vn/smart_space/service/chat/ChatMessageService.java`)
- Media uploads → Cloudinary: uploads media
