add view routes
This commit is contained in:
0
src/view/view.controller.ts
Normal file
0
src/view/view.controller.ts
Normal file
0
src/view/view.route.ts
Normal file
0
src/view/view.route.ts
Normal file
64
src/view/view.schema.ts
Normal file
64
src/view/view.schema.ts
Normal file
@@ -0,0 +1,64 @@
|
||||
import { buildJsonSchemas } from "fastify-zod";
|
||||
import mongoose from "mongoose";
|
||||
import { z } from "zod";
|
||||
import { pageQueryParams } from "../pagination";
|
||||
|
||||
export const viewModel = mongoose.model(
|
||||
"view",
|
||||
new mongoose.Schema({
|
||||
tenantId: String,
|
||||
pid: {
|
||||
type: String,
|
||||
unique: true,
|
||||
required: true,
|
||||
},
|
||||
name: {
|
||||
type: String,
|
||||
required: true,
|
||||
},
|
||||
collection: String,
|
||||
createdBy: {
|
||||
type: mongoose.Types.ObjectId,
|
||||
ref: "user",
|
||||
},
|
||||
hide: new mongoose.Schema({}, { strict: false, _id: false }),
|
||||
sort: new mongoose.Schema({}, { strict: false, _id: false }),
|
||||
group: new mongoose.Schema({}, { strict: false, _id: false }),
|
||||
filters: [new mongoose.Schema({}, { strict: false, _id: false })],
|
||||
match: [new mongoose.Schema({}, { strict: false, _id: false })],
|
||||
})
|
||||
);
|
||||
|
||||
export const viewFields = ["name", "collection"];
|
||||
|
||||
const createViewInput = z.object({
|
||||
name: z.string(),
|
||||
collection: z.string(),
|
||||
hide: z.record(z.string(), z.any()).optional(),
|
||||
sort: z.record(z.string(), z.any()).optional(),
|
||||
group: z.record(z.any()).optional(),
|
||||
filters: z.array(z.any()).optional(),
|
||||
match: z.array(z.any()).optional(),
|
||||
});
|
||||
|
||||
const updateViewInput = z.object({
|
||||
name: z.string().optional(),
|
||||
collection: z.string().optional(),
|
||||
hide: z.record(z.string(), z.any()).optional(),
|
||||
sort: z.record(z.string(), z.any()).optional(),
|
||||
group: z.record(z.any()).optional(),
|
||||
filters: z.array(z.any()).optional(),
|
||||
match: z.array(z.any()).optional(),
|
||||
});
|
||||
|
||||
export type CreateViewInput = z.infer<typeof createViewInput>;
|
||||
export type UpdateViewInput = z.infer<typeof updateViewInput>;
|
||||
|
||||
export const { schemas: viewSchemas, $ref: $view } = buildJsonSchemas(
|
||||
{
|
||||
createViewInput,
|
||||
updateViewInput,
|
||||
pageQueryParams,
|
||||
},
|
||||
{ $id: "view" }
|
||||
);
|
||||
38
src/view/view.service.ts
Normal file
38
src/view/view.service.ts
Normal file
@@ -0,0 +1,38 @@
|
||||
import { AuthenticatedUser } from "../auth";
|
||||
import { generateId } from "../utils/id";
|
||||
import { CreateViewInput, UpdateViewInput, viewModel } from "./view.schema";
|
||||
|
||||
export async function createView(
|
||||
input: CreateViewInput,
|
||||
user: AuthenticatedUser
|
||||
) {
|
||||
return await viewModel.create({
|
||||
tenantId: user.tenantId,
|
||||
pid: generateId(),
|
||||
createdBy: user.userId,
|
||||
...input,
|
||||
});
|
||||
}
|
||||
|
||||
export async function getView(viewId: string, tenantId: string) {
|
||||
return await viewModel.findOne({
|
||||
$and: [{ pid: viewId }, { tenantId: tenantId }],
|
||||
});
|
||||
}
|
||||
|
||||
export async function listViews() {}
|
||||
|
||||
export async function updateView(
|
||||
viewId: string,
|
||||
input: UpdateViewInput,
|
||||
tenantId: string
|
||||
) {
|
||||
return await viewModel.findOneAndUpdate(
|
||||
{ $and: [{ pid: viewId }, { tenantId: tenantId }] },
|
||||
{ ...input }
|
||||
);
|
||||
}
|
||||
|
||||
export async function deletView(viewId: string) {
|
||||
return await viewModel.findOneAndDelete({ pid: viewId });
|
||||
}
|
||||
Reference in New Issue
Block a user