Mijn schema’s

Ik gebruik drie schematechnieken: een klassendiagram, een sequence diagram en een activiteitendiagram. Hiermee laat ik de modellen, het ophalen van data en de controles op een request zien. Ik heb de schema’s voor mijn portfolio uitgewerkt met de code erbij.

1. Klassendiagram

Courses en programmes hebben veel dezelfde velden. Die staan in ProductBaseDto. CourseDto en ProgrammeDto voegen hun eigen velden toe. Het diagram toont de belangrijkste velden; de volledige modellen staan in de map Dtos van het Core-project.

classDiagram
    class ProductBaseDto {
        +IdentifierEntry PrimaryCode
        +List~LanguageTypedString~ Name
        +List~LanguageTypedString~ Description
        +StudyLoadDescriptor StudyLoad
        +string Duration
        +string Level
        +string OrganisationId
        +OrganisationDto Organisation
    }
    class CourseDto {
        +string CourseId
    }
    class ProgrammeDto {
        +string ProgrammeId
        +string ProgrammeType
    }
    class OrganisationDto {
        +string OrganisationId
        +IdentifierEntry PrimaryCode
        +string OrganisationType
        +List~LanguageTypedString~ Name
        +string ShortName
    }
    ProductBaseDto <|-- CourseDto
    ProductBaseDto <|-- ProgrammeDto
    ProductBaseDto --> "0..1" OrganisationDto : Organisation

De pijlen naar ProductBaseDto betekenen dat beide DTO’s daarvan erven. Met expand=organisation kan de organisatie als object worden meegestuurd. Daardoor hoef ik de gedeelde velden niet in beide DTO’s opnieuw te schrijven.

2. Sequence diagram

Dit is de route van een geldige course-lijstrequest. Ik laat hier zien welke onderdelen elkaar aanroepen. De function en service zijn terug te vinden in Functions/Course.cs en Services/ProductService.cs in het Retriever-project. APIM is de ingang uit mijn omgevingsontwerp.

sequenceDiagram
    actor Client
    participant APIM
    participant Middleware
    participant Function as Course function
    participant Service as ProductService
    participant Repo as OracleReadRepository
    participant DB as OU database
    participant Mapping as MappingService
    Client->>APIM: GET /courses?pageSize=10
    APIM->>Middleware: Request doorsturen
    Middleware->>Middleware: Token, Reader-policy en pageSize controleren
    Middleware->>Function: Request toegestaan
    Function->>Service: GetProducts met CourseDto en producttype 0
    Service->>Repo: Producten en bijbehorende brongegevens ophalen
    Repo->>DB: Leesquery uitvoeren
    DB-->>Repo: Brondata
    Repo-->>Service: Resultaten
    Service->>Mapping: Producten naar CourseDto mappen
    Mapping-->>Service: Course-objecten
    Service-->>Function: ListResponse met items en paging
    Function-->>APIM: 200 met JSON
    APIM-->>Client: Response

Programmes gebruikt dezelfde service met ProgrammeDto en producttype 4. Organisations heeft eigen ophaallogica in Functions/Organisations.cs.

3. Activiteitendiagram

Dit schema laat de keuzes bij toegangs- en pageSize-controle zien. De basis staat in Middleware.cs. De foutcodes hieronder zijn het bedoelde gedrag; losse resultaten van de 401/403-tests staan niet in het bewijs.

flowchart TD
    Start([Request ontvangen]) --> Token{Token geldig?}
    Token -->|Nee| E401[401 Unauthorized]
    Token -->|Ja| Role{Reader-policy toegestaan?}
    Role -->|Nee| E403[403 Forbidden]
    Role -->|Ja| Size{pageSize geldig of weggelaten?}
    Size -->|Nee| E400[400 Bad Request]
    Size -->|Ja| Read[Function voert request uit]
    Read --> Result[Response teruggeven]
    E401 --> Stop([Klaar])
    E403 --> Stop
    E400 --> Stop
    Result --> Stop

De toegestane pageSizes zijn 10, 20, 50, 100 en 250. Ze staan in Core/Enums/PageSize.cs. Zo is duidelijk waar een request kan stoppen voordat gegevens worden opgehaald.

Ontwerp · Onderbouwing