# dulan-nimnaka/smart-campus-jaxrs-api architecture

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

- Interactive diagram: https://gitdiagram.com/dulan-nimnaka/smart-campus-jaxrs-api
- Repository: https://github.com/dulan-nimnaka/smart-campus-jaxrs-api

## Overview

This is a JAX-RS Smart Campus backend for discovering API resources and managing rooms, their sensors, and sensor readings. The main workflow is an HTTP client creating a room, registering a sensor linked to that room, then submitting and retrieving readings; the API keeps state in memory. The graph includes the documented discovery, filtering, validation, logging, and error-response capabilities. Resource and model interactions are supported by excerpts; server routing and filter registration are not shown, so those links are marked unverified.

Main entry points: [`src/main/java/com/smartcampus/resource/SensorResource.java`](https://github.com/dulan-nimnaka/smart-campus-jaxrs-api/blob/main/src/main/java/com/smartcampus/resource/SensorResource.java) (Sensor Endpoints), [`src/main/java/com/smartcampus/Main.java`](https://github.com/dulan-nimnaka/smart-campus-jaxrs-api/blob/main/src/main/java/com/smartcampus/Main.java) (Embedded Server), [`src/main/java/com/smartcampus/resource/SensorReadingResource.java`](https://github.com/dulan-nimnaka/smart-campus-jaxrs-api/blob/main/src/main/java/com/smartcampus/resource/SensorReadingResource.java) (Reading Endpoints), [`src/main/java/com/smartcampus/resource/RoomResource.java`](https://github.com/dulan-nimnaka/smart-campus-jaxrs-api/blob/main/src/main/java/com/smartcampus/resource/RoomResource.java) (Room Endpoints)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_runtime["API Runtime"]
  node_server["Embedded Server<br/>[Main.java]"]
  node_api_config["API Configuration"]
  node_discovery["API Discovery"]
  node_logging["Request Logging<br/>[LoggingFilter.java]"]
end

subgraph group_rooms["Room Management"]
  node_room_api["Room Endpoints<br/>[RoomResource.java]"]
  node_room_store[("Room State<br/>[RoomResource.java]")]
  node_room_model["Room Model<br/>[Room.java]"]
end

subgraph group_sensors["Sensor Readings"]
  node_sensor_api["Sensor Endpoints"]
  node_sensor_store[("Sensor State")]
  node_sensor_model["Sensor Model<br/>[Sensor.java]"]
  node_reading_api["Reading Endpoints"]
  node_reading_store[("Reading History")]
  node_reading_model["Reading Model<br/>[SensorReading.java]"]
end

subgraph group_errors["Error Handling"]
  node_error_types["Domain Exceptions"]
  node_error_mappers["HTTP Error Mappers"]
  node_global_errors["Global Error Mapper"]
end

node_client(("HTTP Client"))

node_client -->|"sends requests"| node_server
node_server -.->|"uses configuration"| node_api_config
node_server -.->|"routes requests"| node_discovery
node_server -.->|"routes requests"| node_room_api
node_server -.->|"routes requests"| node_sensor_api
node_server -.->|"applies filter"| node_logging
node_room_api -->|"reads and writes"| node_room_store
node_room_api -->|"handles rooms"| node_room_model
node_sensor_api -->|"reads and writes"| node_sensor_store
node_sensor_api -->|"looks up room"| node_room_store
node_sensor_api -->|"updates room link"| node_room_model
node_sensor_api -->|"handles sensors"| node_sensor_model
node_sensor_api -->|"returns subresource"| node_reading_api
node_reading_api -->|"looks up sensor"| node_sensor_store
node_reading_api -->|"reads and writes"| node_reading_store
node_reading_api -->|"updates current value"| node_sensor_model
node_reading_api -->|"handles readings"| node_reading_model
node_sensor_api -->|"throws missing-link error"| node_error_types
node_room_api -->|"throws deletion conflict"| node_error_types
node_reading_api -->|"throws unavailable error"| node_error_types
node_error_mappers -->|"maps exceptions"| node_error_types
node_error_mappers -.->|"returns HTTP errors"| node_client

click node_server "https://github.com/dulan-nimnaka/smart-campus-jaxrs-api/blob/main/src/main/java/com/smartcampus/Main.java"
click node_api_config "https://github.com/dulan-nimnaka/smart-campus-jaxrs-api/blob/main/src/main/java/com/smartcampus/config/ApplicationConfig.java"
click node_discovery "https://github.com/dulan-nimnaka/smart-campus-jaxrs-api/blob/main/src/main/java/com/smartcampus/resource/DiscoveryResource.java"
click node_logging "https://github.com/dulan-nimnaka/smart-campus-jaxrs-api/blob/main/src/main/java/com/smartcampus/filter/LoggingFilter.java"
click node_room_api "https://github.com/dulan-nimnaka/smart-campus-jaxrs-api/blob/main/src/main/java/com/smartcampus/resource/RoomResource.java"
click node_room_store "https://github.com/dulan-nimnaka/smart-campus-jaxrs-api/blob/main/src/main/java/com/smartcampus/resource/RoomResource.java"
click node_room_model "https://github.com/dulan-nimnaka/smart-campus-jaxrs-api/blob/main/src/main/java/com/smartcampus/model/Room.java"
click node_sensor_api "https://github.com/dulan-nimnaka/smart-campus-jaxrs-api/blob/main/src/main/java/com/smartcampus/resource/SensorResource.java"
click node_sensor_store "https://github.com/dulan-nimnaka/smart-campus-jaxrs-api/blob/main/src/main/java/com/smartcampus/resource/SensorResource.java"
click node_sensor_model "https://github.com/dulan-nimnaka/smart-campus-jaxrs-api/blob/main/src/main/java/com/smartcampus/model/Sensor.java"
click node_reading_api "https://github.com/dulan-nimnaka/smart-campus-jaxrs-api/blob/main/src/main/java/com/smartcampus/resource/SensorReadingResource.java"
click node_reading_store "https://github.com/dulan-nimnaka/smart-campus-jaxrs-api/blob/main/src/main/java/com/smartcampus/resource/SensorReadingResource.java"
click node_reading_model "https://github.com/dulan-nimnaka/smart-campus-jaxrs-api/blob/main/src/main/java/com/smartcampus/model/SensorReading.java"
click node_error_types "https://github.com/dulan-nimnaka/smart-campus-jaxrs-api/tree/main/src/main/java/com/smartcampus/exception"
click node_error_mappers "https://github.com/dulan-nimnaka/smart-campus-jaxrs-api/tree/main/src/main/java/com/smartcampus/exception"
click node_global_errors "https://github.com/dulan-nimnaka/smart-campus-jaxrs-api/blob/main/src/main/java/com/smartcampus/exception/GlobalExceptionMapper.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_server,node_api_config,node_discovery,node_logging,node_client toneBlue
class node_room_api,node_room_store,node_room_model toneAmber
class node_sensor_api,node_sensor_store,node_sensor_model,node_reading_api,node_reading_store,node_reading_model toneMint
class node_error_types,node_error_mappers,node_global_errors toneRose
```

## Components

### API Runtime

- [Embedded Server](https://github.com/dulan-nimnaka/smart-campus-jaxrs-api/blob/main/src/main/java/com/smartcampus/Main.java): `src/main/java/com/smartcampus/Main.java`
- [API Configuration](https://github.com/dulan-nimnaka/smart-campus-jaxrs-api/blob/main/src/main/java/com/smartcampus/config/ApplicationConfig.java): `src/main/java/com/smartcampus/config/ApplicationConfig.java`
- [API Discovery](https://github.com/dulan-nimnaka/smart-campus-jaxrs-api/blob/main/src/main/java/com/smartcampus/resource/DiscoveryResource.java): `src/main/java/com/smartcampus/resource/DiscoveryResource.java`
- [Request Logging](https://github.com/dulan-nimnaka/smart-campus-jaxrs-api/blob/main/src/main/java/com/smartcampus/filter/LoggingFilter.java): `src/main/java/com/smartcampus/filter/LoggingFilter.java`

### Room Management

- [Room Endpoints](https://github.com/dulan-nimnaka/smart-campus-jaxrs-api/blob/main/src/main/java/com/smartcampus/resource/RoomResource.java): `src/main/java/com/smartcampus/resource/RoomResource.java`
- [Room State](https://github.com/dulan-nimnaka/smart-campus-jaxrs-api/blob/main/src/main/java/com/smartcampus/resource/RoomResource.java): `src/main/java/com/smartcampus/resource/RoomResource.java`
- [Room Model](https://github.com/dulan-nimnaka/smart-campus-jaxrs-api/blob/main/src/main/java/com/smartcampus/model/Room.java): `src/main/java/com/smartcampus/model/Room.java`

### Sensor Readings

- [Sensor Endpoints](https://github.com/dulan-nimnaka/smart-campus-jaxrs-api/blob/main/src/main/java/com/smartcampus/resource/SensorResource.java): `src/main/java/com/smartcampus/resource/SensorResource.java`
- [Sensor State](https://github.com/dulan-nimnaka/smart-campus-jaxrs-api/blob/main/src/main/java/com/smartcampus/resource/SensorResource.java): `src/main/java/com/smartcampus/resource/SensorResource.java`
- [Sensor Model](https://github.com/dulan-nimnaka/smart-campus-jaxrs-api/blob/main/src/main/java/com/smartcampus/model/Sensor.java): `src/main/java/com/smartcampus/model/Sensor.java`
- [Reading Endpoints](https://github.com/dulan-nimnaka/smart-campus-jaxrs-api/blob/main/src/main/java/com/smartcampus/resource/SensorReadingResource.java): `src/main/java/com/smartcampus/resource/SensorReadingResource.java`
- [Reading History](https://github.com/dulan-nimnaka/smart-campus-jaxrs-api/blob/main/src/main/java/com/smartcampus/resource/SensorReadingResource.java): `src/main/java/com/smartcampus/resource/SensorReadingResource.java`
- [Reading Model](https://github.com/dulan-nimnaka/smart-campus-jaxrs-api/blob/main/src/main/java/com/smartcampus/model/SensorReading.java): `src/main/java/com/smartcampus/model/SensorReading.java`

### Error Handling

- [Domain Exceptions](https://github.com/dulan-nimnaka/smart-campus-jaxrs-api/tree/main/src/main/java/com/smartcampus/exception): `src/main/java/com/smartcampus/exception`
- [HTTP Error Mappers](https://github.com/dulan-nimnaka/smart-campus-jaxrs-api/tree/main/src/main/java/com/smartcampus/exception): `src/main/java/com/smartcampus/exception`
- [Global Error Mapper](https://github.com/dulan-nimnaka/smart-campus-jaxrs-api/blob/main/src/main/java/com/smartcampus/exception/GlobalExceptionMapper.java): `src/main/java/com/smartcampus/exception/GlobalExceptionMapper.java`

### Other components

- **HTTP Client**

## Connections

- HTTP Client → Embedded Server: sends requests (evidence: `README.md`)
- Embedded Server → API Configuration: uses configuration
- Embedded Server → API Discovery: routes requests
- Embedded Server → Room Endpoints: routes requests
- Embedded Server → Sensor Endpoints: routes requests
- Embedded Server → Request Logging: applies filter
- Room Endpoints → Room State: reads and writes (evidence: `src/main/java/com/smartcampus/resource/RoomResource.java`)
- Room Endpoints → Room Model: handles rooms (evidence: `src/main/java/com/smartcampus/resource/RoomResource.java`)
- Sensor Endpoints → Sensor State: reads and writes (evidence: `src/main/java/com/smartcampus/resource/SensorResource.java`)
- Sensor Endpoints → Room State: looks up room (evidence: `src/main/java/com/smartcampus/resource/SensorResource.java`)
- Sensor Endpoints → Room Model: updates room link (evidence: `src/main/java/com/smartcampus/resource/SensorResource.java`)
- Sensor Endpoints → Sensor Model: handles sensors (evidence: `src/main/java/com/smartcampus/resource/SensorResource.java`)
- Sensor Endpoints → Reading Endpoints: returns subresource (evidence: `src/main/java/com/smartcampus/resource/SensorResource.java`)
- Reading Endpoints → Sensor State: looks up sensor (evidence: `src/main/java/com/smartcampus/resource/SensorReadingResource.java`)
- Reading Endpoints → Reading History: reads and writes (evidence: `src/main/java/com/smartcampus/resource/SensorReadingResource.java`)
- Reading Endpoints → Sensor Model: updates current value (evidence: `src/main/java/com/smartcampus/resource/SensorReadingResource.java`)
- Reading Endpoints → Reading Model: handles readings (evidence: `src/main/java/com/smartcampus/resource/SensorReadingResource.java`)
- Sensor Endpoints → Domain Exceptions: throws missing-link error (evidence: `src/main/java/com/smartcampus/resource/SensorResource.java`)
- Room Endpoints → Domain Exceptions: throws deletion conflict (evidence: `src/main/java/com/smartcampus/resource/RoomResource.java`)
- Reading Endpoints → Domain Exceptions: throws unavailable error (evidence: `src/main/java/com/smartcampus/resource/SensorReadingResource.java`)
- HTTP Error Mappers → Domain Exceptions: maps exceptions (evidence: `src/main/java/com/smartcampus/exception/LinkedResourceNotFoundExceptionMapper.java`)
- HTTP Error Mappers → HTTP Client: returns HTTP errors
