diff --git a/frontend/svelte/src/models/NoteRepository.ts b/frontend/svelte/src/models/NoteRepository.ts new file mode 100644 index 0000000..421ffce --- /dev/null +++ b/frontend/svelte/src/models/NoteRepository.ts @@ -0,0 +1,10 @@ +import type {Note} from "../types"; + +export interface NoteRepository { + getNotes(): Promise; + getNote(id: number): Promise; + getCurrentNote(): Promise; + updateNote(id: number, note: Note): Promise; + deleteNote(id: number): void; + createNote(note: Note): Promise; +} \ No newline at end of file diff --git a/frontend/svelte/src/models/StrapiNoteRepository.ts b/frontend/svelte/src/models/StrapiNoteRepository.ts new file mode 100644 index 0000000..86fb1a7 --- /dev/null +++ b/frontend/svelte/src/models/StrapiNoteRepository.ts @@ -0,0 +1,73 @@ +import type {Note} from "../types"; +import {parseCookies} from "nookies"; +import type {NoteRepository} from "./NoteRepository"; + +type HttpMethod = 'GET' | 'POST' | 'PUT' | 'DELETE' + +export class StrapiNoteRepository implements NoteRepository { + private static instance: StrapiNoteRepository; + public static getInstance(): StrapiNoteRepository { + if (this.instance === undefined || this.instance === null) { + this.instance = new StrapiNoteRepository(); + } + return this.instance; + } + + private constructor() {} + + private currentNoteId: number | undefined; + private static apiNoteEndpoint: string = "http://localhost:1337/api/notes" + + public async getNotes(): Promise{ + const response = await StrapiNoteRepository.fetchStrapi("/", 'GET'); + return await response.json(); + } + + public async getNote(id: number): Promise{ + const response = await StrapiNoteRepository.fetchStrapi("/" + id, 'GET'); + return await response.json(); + } + + public async getCurrentNote(): Promise { + if (this.currentNoteId === null || this.currentNoteId === undefined) { + return; + } + return await this.getNote(this.currentNoteId); + } + + public async updateNote(id: number, note: Note): Promise { + const response = await StrapiNoteRepository.fetchStrapi("/" + id, 'PUT', note); + return await response.json(); + } + + public async createNote(note: Note): Promise { + const response = await StrapiNoteRepository.fetchStrapi("/", 'POST', note); + return await response.json(); + } + + public async deleteNote(id: number): Promise { + await StrapiNoteRepository.fetchStrapi("/" + id, 'DELETE'); + } + + private static async fetchStrapi(path: string, method: HttpMethod, body: Note | null = null): Promise { + let requestInit: RequestInit = { + method: method, + headers: { + authorization: StrapiNoteRepository.mockedGetAuthorizationHeader() + } + }; + if (body) { + requestInit["body"] = JSON.stringify({data: body}); + } + return await fetch(StrapiNoteRepository.apiNoteEndpoint + path, requestInit); + } + + private static mockedGetAuthorizationHeader() { + return "bearer TOKEN" + } + + private static getAuthorizationHeader() { + const jwt = parseCookies().jwt; + return `bearer ${jwt}` + } +} \ No newline at end of file diff --git a/frontend/svelte/src/routes/editor/+page.svelte b/frontend/svelte/src/routes/editor/+page.svelte index eeab65c..3df1f70 100644 --- a/frontend/svelte/src/routes/editor/+page.svelte +++ b/frontend/svelte/src/routes/editor/+page.svelte @@ -1,24 +1,31 @@ - {"Pomelonote | Edit " + currNote.title} + {"Pomelonote | Edit "} -
- {currNote.content} +
+
+ +
- + \ No newline at end of file