view route updates

This commit is contained in:
2025-05-26 16:00:05 +05:30
parent b51e36ebad
commit ffef6fe644
5 changed files with 35 additions and 26 deletions

View File

@@ -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";

View File

@@ -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;
}

View File

@@ -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

View File

@@ -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<typeof setDefaultView>;

View File

@@ -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 }
);
}