Skip to content

Diagrams

In order to better understand the needs of the project, here is a use case diagram regrouping the current use cases of the project.

Connected objects

graph LR
    A[End user] --> B(Display the list of connected objects)
    A --> C(Add a connected object)
    C -->|Extend| B
    D(Import a list of connected objects) -->|Extend| B
    E(Download a model) -->|Extend| B
    F(Export the list of connected objects) -->|Extend| B
    G(Delete a connected object) -->|Extend| B
    H(Go to the details of a connected object) -->|Extend| B
    I(Search for connected objects) -->|Extend| B

Connected object models

graph LR
    A[End user] --> J(Display the list of connected object models)
    A --> K(Add a connected object model)
    K -->|Extend| J
    L(Delete a connected object model) -->|Extend| J
    M(Go to the details of a connected object model) -->|Extend| J

Connected object configurations

graph LR
    A[End user] --> N(Display the list of connected object configurations)
    A --> O(Add a connected object configuration)
    O -->|Extend| N
    P(Go to the details of a connected object configuration) --> |Extend| N

Edge connected object models

graph LR
    A[End user] --> Q(Display the list of Edge connected object models)
    R(Add an Edge connected object model) -->|Extend| Q
    S(Delete an Edge connected object model) -->|Extend| Q
    T(Go to the details of a model of Edge connected object) -->|Extend| Q
    U(Search for Edge connected object models) -->|Extend| Q

Edge connected objects

graph LR
    A[End user] --> V(Display the list of Edge connected objects)
    W(Add an Edge connected object) -->|Extend| V
    X(Delete an Edge connected object) -->|Extend| V
    Y(Go to the details of a connected object Edge) -->|Extend| V
    Z(Search for Edge connected objects) -->|Extend| V

Concentrators

graph LR
    A[End user] --> AA(Display the list of concentrators)
    AB(Add a concentrator) -->|Extend| AA
    AC(Delete a concentrator) -->|Extend| AA
    AD(Go to the details of a concentrator) -->|Extend| AA

Tags

graph LR
    A[End user] --> AE(Display the list of tags)
    AF(Add a tag) -->|Extend| AE
    AG(Delete a tag) -->|Extend| AE

Now, here is a diagram representing the multilayer technical architecture of the project.

C4Deployment
    title Multilayer technical architecture

    Deployment_Node(api, "Server", "API"){
        Container(controllers, "Controllers", "C#", "They are used to route HTTP requests, they call the methods of the services and they return the content of the HTTP response as well as a HTTP code.")
        Container(services, "Services", "C#", "They are used to define the business logic as to call the methods of the data access layer for example.")
    }

    Deployment_Node(bll, "Application", "BLL"){
        Container(iservices, "Services", C#, "This package represents the interfaces of the services.")
    }

    Deployment_Node(dal, "Infrastructure", "DAL"){
        Deployment_Node(uow, "UnitOfWork", "UOW"){
            Container(repositories, "Repositories", "C# and EntityFramework", "A repository represents all the data management methods of an entity of the project.")
        }
    }

    Deployment_Node(domain, "Domain", "Domain"){
        Container(entities, "Entities", "C#", "They are used as object representation of tables in a database.")
        Container(irepositories, "Repositories", "C#", "This package represents the interfaces of the repositories.")
    }

    Rel(iservices, services, "dependency", "")
    Rel(repositories, services, "dependency", "")
    Rel(entities, services, "dependency", "")
    Rel(entities, iservices, "dependency", "")
    Rel(iservices, repositories, "dependency", "")
    Rel(entities, repositories, "dependency", "")

Now, to better understand the technical architecture of the project, here is a class diagram representing it.

classDiagram
    direction LR
    class AdminController{
        -String value
    }
    class DashboardController{
        -String value
    }
    class DeviceConfigurationsController{
        -String value
    }
    class DeviceModelControllerBase{
        -String value
    }
    class DeviceModelPropertiesController{
        -String value
    }
    class DeviceModelPropertiesControllerBase{
        -String value
    }
    class DeviceModelController{
        -String value
    }
    class DevicesController{
        -String value
    }
    class DevicesControllerBase{
        -String value
    }
    class DeviceTagSettingsController{
        -String value
    }
    class EdgeDevicesController{
        -String value
    }
    class EdgeModelsController{
        -String value
    }
    class IdeasController{
        -String value
    }
    class SettingsController{
        -String value
    }
    class LoRaWANCommandsController{
        -String value
    }
    class LoRaWANConcentratorsController{
        -String value
    }
    class LoRaWANDeviceModelsController{
        -String value
    }
    class LoRaWANDevicesController{
        -String value
    }
    class LoRaWANFrequencyPlansController{
        -String value
    }
    LoRaWANDeviceModelsController --|> DeviceModelsControllerBase
    LoRaWANDevicesController --|> DevicesControllerBase
    DeviceModelPropertiesController --|> DeviceModelPropertiesControllerBase
    DeviceModelsController --|> DeviceModelsControllerBase
    DevicesController --|> DevicesControllerBase
    class ConfigService{
        -String value
    }
    class DeviceConfigurationsService{
        -String value
    }
    class DeviceModelPropertiesService{
        -String value
    }
    class DeviceModelService{
        -String value
    }
    class DevicePropertyService{
        -String value
    }
    class DeviceService{
        -String value
    }
    class DeviceServiceBase{
        -String value
    }
    class DeviceTagService{
        -String value
    }
    class EdgeDevicesService{
        -String value
    }
    class EdgeModelService{
        -String value
    }
    class ExternalDeviceService{
        -String value
    }
    class IdeaService{
        -String value
    }
    class LoRaWANCommandService{
        -String value
    }
    class LoRaWANConcentratorService{
        -String value
    }
    class LoRaWanDeviceService{
        -String value
    }
    class SubmitIdeaRequest{
        -String value
    }
    DeviceService --|> DeviceServiceBase
    LoRaWanDeviceService --|> DeviceServiceBase
    class IConfigService
    <<interface>> IConfigService
    class IDeviceConfigurationsService
    <<interface>> IDeviceConfigurationsService
    class IDeviceModelPropertiesService
    <<interface>> IDeviceModelPropertiesService
    class IDeviceModelService
    <<interface>> IDeviceModelService
    class IDevicePropertyService
    <<interface>> IDevicePropertyService
    class IDeviceService
    <<interface>> IDeviceService
    class IDeviceTagService
    <<interface>> IDeviceTagService
    class IEdgeDevicesService
    <<interface>> IEdgeDevicesService
    class IEdgeModelService
    <<interface>> IEdgeModelService
    class IExternalDeviceService
    <<interface>> IExternalDeviceService
    class IIdeaService
    <<interface>> IIdeaService
    class ILoRaWANCommandService
    <<interface>> ILoRaWANCommandService
    class ILoRaWANConcentratorService
    <<interface>> ILoRaWANConcentratorService
    class ILoRaWanManagementService
    <<interface>> ILoRaWanManagementService
    ConfigService ..|> IConfigService
    DeviceConfigurationsService ..|> IDeviceConfigurationsService
    DeviceModelPropertiesService ..|> IDeviceModelPropertiesService
    DeviceModelService ..|> IDeviceModelService
    DevicePropertyService ..|> IDevicePropertyService
    DeviceServiceBase ..|> IDeviceService
    DeviceTagService ..|> IDeviceTagService
    EdgeDevicesService ..|> IEdgeDevicesService
    EdgeModelService ..|> IEdgeModelService
    ExternalDeviceService ..|> IExternalDeviceService
    IdeaService ..|> IIdeaService
    LoRaWANCommandService ..|> ILoRaWANCommandService
    LoRaWANConcentratorService ..|> ILoRaWANConcentratorService
    class ConcentratorRepository{
        -String value
    }
    class DeviceModelCommandRepository{
        -String value
    }
    class DeviceModelPropertiesRepository{
        -String value
    }
    class DeviceModelRepository{
        -String value
    }
    class DeviceRepository{
        -String value
    }
    class DeviceTagRepository{
        -String value
    }
    class DeviceTagValueRepository{
        -String value
    }
    class EdgeDeviceModelCommandRepository{
        -String value
    }
    class EdgeDeviceModelRepository{
        -String value
    }
    class EdgeDeviceRepository{
        -String value
    }
    class GenericRepository{
        -String value
    }
    class LabelRepository{
        -String value
    }
    class LoRaDeviceTelemetryRepository{
        -String value
    }
    class LorawanDeviceRepository{
        -String value
    }
    class UnitOfWork{
        -String value
    }
    class IConcentratorRepository
    <<interface>> IConcentratorRepository
    class IDeviceModelCommandRepository
    <<interface>> IDeviceModelCommandRepository
    class IDeviceModelPropertiesRepository
    <<interface>> IDeviceModelPropertiesRepository
    class IDeviceModelRepository
    <<interface>> IDeviceModelRepository
    class IDeviceRepository
    <<interface>> IDeviceRepository
    class IDeviceTagRepository
    <<interface>> IDeviceTagRepository
    class IDeviceTagValueRepository
    <<interface>> IDeviceTagValueRepository
    class IEdgeDeviceModelCommandRepository
    <<interface>> IEdgeDeviceModelCommandRepository
    class IEdgeDeviceModelRepository
    <<interface>> IEdgeDeviceModelRepository
    class IEdgeDeviceRepository
    <<interface>> IEdgeDeviceRepository
    class ILabelRepository
    <<interface>> ILabelRepository
    class ILoRaDeviceTelemetryRepository
    <<interface>> ILoRaDeviceTelemetryRepository
    class ILorawanDeviceRepository
    <<interface>> ILorawanDeviceRepository
    class IRepository
    <<interface>> IRepository
    class IUnitOfWork
    <<interface>> IUnitOfWork
    UnitOfWork ..|> IUnitOfWork
    ConcentratorRepository ..|> IConcentratorRepository
    ConcentratorRepository --|> GenericRepository
    DeviceModelCommandRepository ..|> IDeviceModelCommandRepository
    DeviceModelCommandRepository --|> GenericRepository
    DeviceModelPropertiesRepository ..|> IDeviceModelPropertiesRepository
    DeviceModelPropertiesRepository --|> GenericRepository
    DeviceModelRepository ..|> IDeviceModelRepository
    DeviceModelRepository --|> GenericRepository
    DeviceRepository ..|> IDeviceRepository
    DeviceRepository --|> GenericRepository
    DeviceTagRepository ..|> IDeviceTagRepository
    DeviceTagRepository --|> GenericRepository
    DeviceTagValueRepository ..|> IDeviceTagValueRepository
    DeviceTagValueRepository --|> GenericRepository
    EdgeDeviceModelCommandRepository ..|> IEdgeDeviceModelCommandRepository
    EdgeDeviceModelCommandRepository --|> GenericRepository
    EdgeDeviceModelRepository ..|> IEdgeDeviceModelRepository
    EdgeDeviceModelRepository --|> GenericRepository
    EdgeDeviceRepository ..|> IEdgeDeviceRepository
    EdgeDeviceRepository --|> GenericRepository
    GenericRepository ..|> IRepository
    LabelRepository ..|> ILabelRepository
    LabelRepository --|> GenericRepository
    LoRaDeviceTelemetryRepository ..|> ILoRaDeviceTelemetryRepository
    LoRaDeviceTelemetryRepository --|> GenericRepository
    LorawanDeviceRepository ..|> ILorawanDeviceRepository
    LorawanDeviceRepository --|> GenericRepository