Uge 36: Projekt update
- Kenneth H Sørensen
- Sep 5
- 5 min read
Updated: Sep 7

Ansvarsområde til use cases
Vi har (d. 2/9-2025) haft et teammøde, hvor vi afklarede roller og ansvar i projektet.
Jeg vil beskrive mit afgrænsede ansvarsområde, gennemgå de komponenter jeg har ansvar for og til sidst udlede use cases, der danner grundlaget for de features jeg senere skal udvikle.
Fra valgfag til model
Jeg har tidligere lavet en model som indgangsvinkel til projektet, og den har været med til at tydeliggøre, hvordan vi fordeler services og komponenter mellem os i teamet.

Efter vores seneste møde har vi nu fordelt områderne mere konkret og her fremgår det hvad jeg har ansvar for.

Mit ansvarsområde
Upload/Ingestion Service (microservice)
Database (image metadata)
Storage (images)
Jeg har ikke ansvar for Metadata/Results Service, da et andet teammedlem også arbejder med backend. Vi har derfor delt backend-ansvaret op i hver vores microservice.
Mit ansvar
Mit ansvarsområde er afgrænset til én microservice, Upload/Ingestion Service. Den rummer både usikkerheder og kompleksitet, især fordi jeg vil designe den med IT-sikkerhed tænkt ind fra start.
Usikkerhederne handler bl.a om
Integration af storage
Håndtering af metadata i databasen
Kommunikation med andre services
Som led i det vil jeg gerne lære om og implementere API-kald med GraphQL, samt events via message brokers som RabbitMQ eller Kafka, på en sikker måde.
Samlet set giver det mig mulighed for at dykke dybt i backend-udvikling & API-design, med
IT-sikkerhed som en integreret del af løsningen.
Systemkomponenternes ansvar
Mit fokus / andet
Mobilappen
Brugeren tager et billede af en maskine (f.eks på en byggeplads)
Appen uploader billedet (via pre-signed URL)
Appen sender nødvendig upload- / operationsmetadata (om objekt / proces) til Ingestion Service
API-gateway (måske)
Router requests fra appen og sender dem videre til den korrekte service
Ingestion Service
Udsteder pre-signed URLs, så billeder kan uploades eller hentes direkte til/fra storage
Gemmer metadata i databasen (om objekt / proces)
Eksponerer API med GraphQL (for forespørgsler og status opslag)
Publicerer events (f.eks "ImageUploaded") som andre services kan reagere på
Styre billeders livscyklus (retention- og sletningspolitik)
Storage
AWS S3, Azure Blob eller lignende
Indeholder de rå billeder
Adgang styres via pre-signed URLs, ikke direkte
AI-service
Konsumerer "ImageUploaded" event
Henter billede via pre-signed GET-URL
Analyserer billedet og afgør f.eks maskintype
Returnerer resultat til Results Service
Results Service
Modtager resultat output fra AI service
Gemmer analyseresultatet i egen database
Stiller resultater til rådighed for mobilapp eller andre systemer
Systemets databaser
Ingestion DB - data omkring billedet og dens status
Results DB - hvis vi vil gemme resultat-output
Jeg skal stå for ingestion-leddet i systemet, hvor billeder håndteres sikkert gennem pre-signed URLs, metadata lagres og status kan tilgås via GraphQL, events udsendes til resten af systemet, og billeders livscyklus styres i samspil med storage og databasen.
Use cases
På baggrund af oversigten over komponenternes ansvar kan jeg udarbejde use cases, der beskriver Ingestion Services rolle fra upload til endelig status.
De danner grundlaget for de features, jeg senere skal udvikle.
Scope: Det system under design, som use casen beskriver (her: Ingestion Service) Level: Abstraktionsniveau for use casen
Primær aktør: Den eksterne part (bruger, system, service), som ønsker noget fra systemet Aktørmål: Det primære mål, aktøren ønsker at opnå gennem systemet |
Use Case 1: Upload Picture
Scope: Ingestion Service
Level: User-goal
Primær aktør: Mobilapp
Aktørmål: Få et billede sikkert ind i systemet, så det kan behandles senere
Preconditions
Mobilappen er autentificeret over for systemet
Mobilappen er autoriseret til at uploade billeder
Mobilappen har (taget) et billede til upload
Main Success Scenario
Mobilapp anmoder Ingestion Service om at starte en upload
Ingestion Service verificerer anmodningen
Ingestion Service opretter en upload-session og lagrer de relevante oplysninger
Ingestion Service indhenter en midlertidig upload-URL fra storage
Ingestion Service returnerer en upload-reference og den midlertidige URL til mobilappen
Mobilapp uploader billedet direkte til storage via den midlertidige URL
Mobilapp bekræfter overfor Ingestion Service at upload er gennemført
Ingestion Service validerer resultatet, markerer upload som fuldført, og udsender en hændelse om, at et nyt billede er tilgængeligt
Use case slutter, når upload er registreret og hændelsen er udsendt
Postconditions
Systemet har registreret en fuldført upload med status Uploaded og tilhørende metadata
En hændelse om gennemført upload er udsendt til videre behandling
Extensions
2a. Ugyldig eller ikke-autoriseret anmodning - afvises
4a. Storage utilgængelig eller URL kan ikke udstedes - fejl, logges, mulig retry
6a. Upload mislykkes eller URL udløber - mobilapp kan anmode om en ny URL
7a. Bekræftelse mangler eller data stemmer ikke - upload markeres som fejl, ingen hændelse udsendes
Use Case 2: Download Picture for Processing
Scope: Ingestion Service
Level: User-goal
Primær aktør: AI Service
Aktørmål: Hente et billede sikkert fra systemet, så det kan behandles
Preconditions
AI Service er autentificeret over for systemet
AI Service er autoriseret til at tilgå billeder
Et billede er registreret som uploadet og tilgængeligt
Main Success Scenario
AI Service anmoder Ingestion Service om adgang til et billede, der er uploadet
Ingestion Service verificerer anmodningen
Ingestion Service henter en midlertidig download-URL fra storage
Ingestion Service returnerer billedreference og den midlertidige URL til AI Service
AI Service henter billedet direkte fra storage via den midlertidige URL
AI Service bekræfter over for Ingestion Service, at billedet er hentet
Ingestion Service opdaterer billedets status og logger handlingen
Use case slutter, når systemet har registreret at billedet er hentet til behandling
Postconditions
AI Service har fået adgang til billedet for videre behandling
Systemet har registreret billedets status som "hentet til behanding" (eller tilsvarende)
Adgangen er logget i systemet
Extensions
2a. Ugyldig eller ikke-autoriseret anmodning - afvises
3a. Storage utilgængelig eller URL kan ikke udstedes - fejl, logges, mulig retry
5a. Download mislykkes eller URL udløber - AI Service kan anmode om en ny URL
Use Case 3: Update Picture Status after Processing
Scope: Ingestion Service
Level: User-goal
Primær aktør: Result Service
Aktørmål: Opdatere systemet om, at et billede er analyseret og behandlet færdigt
Preconditions
Result Service er autentificeret over for systemet
Result Service er autoriseret til at opdatere billedstatus
Et billede er registreret som "hentet til behandling"
Main Success Scenario
Result Service anmoder Ingestion Service om at opdatere status for et billede
Ingestion Service verificerer anmodningen
Ingestion Service opdaterer billedets status til “behandlet” (eller tilsvarende)
Ingestion Service logger handlingen
Use case slutter, når systemet har registreret at billedet er behandlet
Postconditions
Systemet har registreret billedets status som "behandlet"
Opdateringen er logget
Extensions
2a. Ugyldig eller ikke-autoriseret anmodning - afvises
3a. Billedet er ikke i korrekt status til at blive markeret som behandlet - afvises
3b. Database utilgængelig - fejl, logges, mulig retry
Videre plan
Udarbejdelse af sekvensdiagrammer og andre modeller, der bygger bro fra HLD til LLD
Dykke ned i ressourcer om
API-sikkerhed
dokumentation for pre-signed URLs
Begynde at lære om GraphQL
Begynde at lære om Message brokers og events
Læse om arkitekturprincipper som microservices vs. monolit og hexagonal arkitektur


