## Beskrivelse Backend-logikken ligger samlet i index.ts filen. Må separere ansvar her. Samt at foreløpig håndteres direkte gjennom rå SQL. Videre i prosjektet har vi blitt enige om å bruke Drizle ORM, som er en slags mellomlag mellom backend og MySQL databasen. Fordelen er blant annet at man får bedre TypeScript-typer, autocomplete og compile-time-sjekking av databasekoden. Målet er å ha en tydelig separasjon av ansvar mellom - database connection - databaseskjema - database queries - GraphQL - Typescript typer - oppstart av backend ## Oppgaver: **Oppgaver:** ### 1. Rydde opp i backend-strukturen - Flytte database-tilkoblingen ut av `index.ts` og inn i egen fil. - Flytte GraphQL-logikken ut av `index.ts`. - Flytte database-spørringer ut av `index.ts`. - La `index.ts` hovedsakelig være ansvarlig for å starte backend-serveren. Målet er at én fil ikke skal gjøre alt samtidig. ### 2. Sette opp Drizzle - Installere og konfigurere Drizzle ORM. - Koble Drizzle til den eksisterende MySQL-databasen gjennom `mysql2`. - Opprette `drizzle.config.ts`. - Opprette `db/schema.ts` som beskriver tabellene våre i TypeScript. Målet er at backend skal kunne jobbe med databasen gjennom Drizzle i stedet for å skrive all SQL manuelt. ### 3. Rydde opp i databaseansvaret Akkurat nå oppretter `import-mitre.ts` både databasestruktur og importerer data. Når vi tar i bruk Drizzle må vi bestemme tydelig hvem som har ansvar for hva. Ønsket løsning: - Drizzle beskriver/oppretter databasestrukturen. - `import-mitre.ts` brukes til å importere MITRE-data inn i databasen. ### 4. Lage et eget lag for database-spørringer Opprette `repositories/`. F.eks`softwareRepository.ts` skal inneholde databaseoperasjoner relatert til Software, som: - hente alle software - hente software med MITRE-ID - søke/filtere software Eksisterende Software-spørringer i `index.ts` flyttes hit og skrives om til Drizzle. ### 5. Strukturere GraphQL Opprette `graphql/` med - `typeDefs` - beskriver hva frontend kan spørre backend om - `resolvers` - bestemmer hva backend gjør når frontend sender en GraphQL-query Software-resolvers skal bruke `softwareRepository` for å hente data fra databasen. ## Resultatet bør være ala. <img width="392" height="410" alt="Image" src="https://git.ntnu.no/user-attachments/assets/a816e8a2-e2d7-4368-9032-7a76dd53155a" />