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.