view route updates
This commit is contained in:
@@ -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";
|
||||
|
||||
@@ -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;
|
||||
}
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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>;
|
||||
|
||||
|
||||
@@ -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 }
|
||||
);
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user