add notes routes

This commit is contained in:
2025-02-07 18:39:55 +05:30
parent a130d0cb73
commit d043b5aed7
8 changed files with 312 additions and 0 deletions

83
src/note/note.service.ts Normal file
View File

@@ -0,0 +1,83 @@
import { AuthenticatedUser } from "../auth";
import { generateId } from "../utils/id";
import { CreateNoteInput, noteModel } from "./note.schema";
export async function createNote(
input: CreateNoteInput,
resourceId: string,
user: AuthenticatedUser
) {
return await noteModel.create({
tenantId: user.tenantId,
pid: generateId(),
resourceId: resourceId,
content: input.content,
createdAt: new Date(),
createdBy: user.userId,
});
}
export async function updateNote(
input: CreateNoteInput,
resourceId: string,
noteId: string,
tenantId: string
) {
return await noteModel.findOneAndUpdate(
{
$and: [
{ pid: noteId },
{ tenantId: tenantId },
{ resourceId: resourceId },
],
},
{ ...input },
{ new: true }
);
}
export async function listNotes(resourceId: string, tenantId: string) {
return await noteModel.aggregate([
{
$match: { $and: [{ resourceId: resourceId }, { tenantId: tenantId }] },
},
{
$lookup: {
from: "users",
localField: "createdBy",
foreignField: "_id",
as: "user",
},
},
{
$project: {
_id: 1,
pid: 1,
resourceId: 1,
content: 1,
createdAt: 1,
createdBy: {
$let: {
vars: { user: { $arrayElemAt: ["$user", 0] } },
in: {
_id: "$$user._id",
pid: "$$user.pid",
name: "$$user.name",
avatar: "$$user.avatar",
},
},
},
},
},
]);
}
export async function deleteNote(
resourceId: string,
noteId: string,
tenantId: string
) {
return await noteModel.deleteOne({
$and: [{ pid: noteId }, { tenantId: tenantId }, { resourceId: resourceId }],
});
}