import { AuthenticatedUser } from "../auth"; import { getFilterObject, getSortObject, PageQueryParams } from "../pagination"; import { generateId } from "../utils/id"; import { CreateViewInput, UpdateViewInput, viewFields, 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( params: PageQueryParams, user: AuthenticatedUser ) { const page = params.page || 1; const pageSize = params.pageSize || 10; const sortObj = getSortObject(params, viewFields); const filterObj = getFilterObject(params); return await viewModel.find({ $and: [ { tenantId: user.tenantId }, { createdBy: user.userId }, ...filterObj, ], }); } export async function updateView( viewId: string, input: UpdateViewInput, tenantId: string ) { return await viewModel.findOneAndUpdate( { $and: [{ pid: viewId }, { tenantId: tenantId }] }, { ...input }, { new: true } ); } export async function deleteView(viewId: string) { return await viewModel.deleteOne({ pid: viewId }); }