diff --git a/src/permit/permit.schema.ts b/src/permit/permit.schema.ts index 0314d84..7cc57c6 100644 --- a/src/permit/permit.schema.ts +++ b/src/permit/permit.schema.ts @@ -1,4 +1,4 @@ -import { string, z } from "zod"; +import { z } from "zod"; import mongoose from "mongoose"; import { buildJsonSchemas } from "fastify-zod"; import { pageMetadata, pageQueryParams } from "../pagination"; diff --git a/src/view/view.controller.ts b/src/view/view.controller.ts index fb857e4..0562e50 100644 --- a/src/view/view.controller.ts +++ b/src/view/view.controller.ts @@ -93,8 +93,9 @@ export async function getDefaultViewsHanlder( req: FastifyRequest, res: FastifyReply ) { + const { collection } = req.params as { collection: string }; try { - const recInDb = await getDefaultViews(req.user); + const recInDb = await getDefaultViews(collection, req.user); return res.code(200).send(recInDb); } catch (err) { return err; @@ -109,7 +110,7 @@ export async function updateDefaultViewsHanlder( try { const recInDb = await updateDefaultView(input, req.user); - return res.code(200).send({ ...recInDb.defaultViews }); + return res.code(200).send(recInDb?.defaultViews); } catch (err) { return err; } diff --git a/src/view/view.route.ts b/src/view/view.route.ts index d4455c0..66fe914 100644 --- a/src/view/view.route.ts +++ b/src/view/view.route.ts @@ -88,9 +88,17 @@ export async function viewRoutes(fastify: FastifyInstance) { ); fastify.get( - "/defaultViews", + "/defaultViews/:collection", { - config: { requiredClaims: ["view:delete"] }, + schema: { + params: { + type: "object", + properties: { + collection: { type: "string" }, + }, + }, + }, + config: { requiredClaims: ["view:read"] }, preHandler: [fastify.authorize], }, getDefaultViewsHanlder @@ -102,7 +110,7 @@ export async function viewRoutes(fastify: FastifyInstance) { schema: { body: $view("setDefaultView"), }, - config: { requiredClaims: ["view:delete"] }, + config: { requiredClaims: ["view:write"] }, preHandler: [fastify.authorize], }, updateDefaultViewsHanlder diff --git a/src/view/view.schema.ts b/src/view/view.schema.ts index f6afd76..7f47345 100644 --- a/src/view/view.schema.ts +++ b/src/view/view.schema.ts @@ -1,5 +1,5 @@ import { buildJsonSchemas } from "fastify-zod"; -import mongoose from "mongoose"; +import mongoose, { Collection } from "mongoose"; import { TypeOf, z } from "zod"; import { pageQueryParams } from "../pagination"; @@ -66,7 +66,10 @@ export const defaultViewModel = mongoose.model( "defaultView" ); -const setDefaultView = z.record(z.string(), z.string()); +const setDefaultView = z.object({ + collection: z.string(), + viewId: z.string(), +}); export type SetDefaultView = z.infer; diff --git a/src/view/view.service.ts b/src/view/view.service.ts index 61d42c3..bf077d2 100644 --- a/src/view/view.service.ts +++ b/src/view/view.service.ts @@ -59,27 +59,19 @@ export async function deleteView(viewId: string) { return await viewModel.deleteOne({ pid: viewId }); } -export async function getDefaultViews(user: AuthenticatedUser) { +export async function getDefaultViews( + collection: string, + user: AuthenticatedUser +) { const recInDb = await defaultViewModel.findOne({ userId: user.userId }); if (!recInDb) return {}; - const viewIds = Object.values(recInDb.defaultViews); - const views = await viewModel.find().where("pid").in(viewIds).exec(); + console.log(recInDb.defaultViews); - const defaultViews = {}; - console.log(viewIds); - console.log(views); + const viewId = recInDb.defaultViews[collection]; + if (!viewId) return {}; - for (const viewId of viewIds) { - const viewObj = views.find((item) => item.pid === viewId); - - if (!viewObj) continue; - if (viewObj.createdBy.toString() !== user.userId.toString()) continue; - - defaultViews[viewObj.collection] = viewObj; - } - - return defaultViews; + return await viewModel.find({ pid: viewId }); } export async function updateDefaultView( @@ -87,16 +79,21 @@ export async function updateDefaultView( user: AuthenticatedUser ) { const recInDb = await defaultViewModel.findOne({ userId: user.userId }); + if (!recInDb) { return await defaultViewModel.create({ - defaultViews: input, + defaultViews: { + [input.collection]: input.viewId, + }, userId: user.userId, }); } + const key = `defaultViews.${input.collection}`; + return await defaultViewModel.findOneAndUpdate( { userId: user.userId }, - { defaultViews: input }, + { $set: { [key]: input.viewId } }, { new: true } ); }