From aa65cead2e1fa3ed62b75b3c071069c1b8912549 Mon Sep 17 00:00:00 2001 From: sprechtl Date: Mon, 10 Oct 2022 00:07:34 +0200 Subject: [PATCH 1/2] changed type path --- frontend/svelte/src/models/NoteRepository.ts | 2 +- frontend/svelte/src/models/StrapiNoteRepository.ts | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/frontend/svelte/src/models/NoteRepository.ts b/frontend/svelte/src/models/NoteRepository.ts index 421ffce..1cae27d 100644 --- a/frontend/svelte/src/models/NoteRepository.ts +++ b/frontend/svelte/src/models/NoteRepository.ts @@ -1,4 +1,4 @@ -import type {Note} from "../types"; +import type {Note} from "./types"; export interface NoteRepository { getNotes(): Promise; diff --git a/frontend/svelte/src/models/StrapiNoteRepository.ts b/frontend/svelte/src/models/StrapiNoteRepository.ts index 86fb1a7..8b3f668 100644 --- a/frontend/svelte/src/models/StrapiNoteRepository.ts +++ b/frontend/svelte/src/models/StrapiNoteRepository.ts @@ -1,4 +1,4 @@ -import type {Note} from "../types"; +import type {Note} from "./types"; import {parseCookies} from "nookies"; import type {NoteRepository} from "./NoteRepository"; From 81f0aadd3961ca4be1a1fc267e25edd9c23971e1 Mon Sep 17 00:00:00 2001 From: j-weissen Date: Mon, 10 Oct 2022 20:24:27 +0200 Subject: [PATCH 2/2] custom note create implemented, note <-> user relation fixed --- .../api/note/content-types/note/schema.json | 3 ++- .../strapi/src/api/note/controllers/note.js | 27 ++++++++++++++++--- 2 files changed, 25 insertions(+), 5 deletions(-) diff --git a/backend/strapi/src/api/note/content-types/note/schema.json b/backend/strapi/src/api/note/content-types/note/schema.json index e064764..754f73c 100644 --- a/backend/strapi/src/api/note/content-types/note/schema.json +++ b/backend/strapi/src/api/note/content-types/note/schema.json @@ -22,7 +22,8 @@ "owners": { "type": "relation", "relation": "manyToMany", - "target": "plugin::users-permissions.user" + "target": "plugin::users-permissions.user", + "mappedBy": "notes" }, "lastViewed": { "type": "datetime", diff --git a/backend/strapi/src/api/note/controllers/note.js b/backend/strapi/src/api/note/controllers/note.js index fdc5a92..20de73a 100644 --- a/backend/strapi/src/api/note/controllers/note.js +++ b/backend/strapi/src/api/note/controllers/note.js @@ -1,5 +1,6 @@ 'use strict'; //move to utils! + function getNoteIdFromUrl(url) { return Number(url.split("/").at(-1)); } @@ -43,7 +44,6 @@ module.exports = createCoreController(noteUid, ({strapi}) => ({ populate: ['owners'], }); const authorized = entry.owners.some(owner => owner.id === userId) - console.log(authorized) if (authorized) { entry = await strapi.entityService.update(noteUid, noteId, { data: { @@ -68,18 +68,37 @@ module.exports = createCoreController(noteUid, ({strapi}) => ({ populate: ['owners'], }); const authorized = entry.owners.some(owner => owner.id === userId) - let allowed; + let allPreviousOwnersKept = false; if (requestBody.data.hasOwnProperty("owners")) { - allowed = entry.owners.every(owner => requestBody.data.owners.includes(owner)); + allPreviousOwnersKept = entry.owners.every(owner => requestBody.data.owners.includes(owner)); } if (!authorized) { ctx.response.status = 403; - } else if (!allowed) { + } else if (!allPreviousOwnersKept) { ctx.response.status = 400; } else { return super.update(ctx); } }, + /** + * Creates a new note, automatically sets owners to the user making the request and lastViewed + * @param ctx + * @returns {Promise} + */ + async create(ctx) { + const userId = ctx.state.user.id; + const requestBody = ctx.request.body; + const response = await strapi.entityService.create(noteUid, { + data: { + title: requestBody.data.title, + content: requestBody.data.content, + lastViewed: Date.now(), + owners: [userId], + publishedAt: Date.now() + } + }); + return response; + }, /** * Deletes user from note owners. If note has no owners anymore, deletes note. * @param ctx