hippofish/packages/backend/src/models/repositories/messaging-message.ts
ThatOneCalculator 6b00abf05c
refactor: 🎨 rome
2023-01-12 20:40:33 -08:00

48 lines
1.5 KiB
TypeScript

import { db } from "@/db/postgre.js";
import { MessagingMessage } from "@/models/entities/messaging-message.js";
import { Users, DriveFiles, UserGroups } from "../index.js";
import type { Packed } from "@/misc/schema.js";
import type { User } from "@/models/entities/user.js";
export const MessagingMessageRepository = db
.getRepository(MessagingMessage)
.extend({
async pack(
src: MessagingMessage["id"] | MessagingMessage,
me?: { id: User["id"] } | null | undefined,
options?: {
populateRecipient?: boolean;
populateGroup?: boolean;
},
): Promise<Packed<"MessagingMessage">> {
const opts = options || {
populateRecipient: true,
populateGroup: true,
};
const message =
typeof src === "object" ? src : await this.findOneByOrFail({ id: src });
return {
id: message.id,
createdAt: message.createdAt.toISOString(),
text: message.text,
userId: message.userId,
user: await Users.pack(message.user || message.userId, me),
recipientId: message.recipientId,
recipient:
message.recipientId && opts.populateRecipient
? await Users.pack(message.recipient || message.recipientId, me)
: undefined,
groupId: message.groupId,
group:
message.groupId && opts.populateGroup
? await UserGroups.pack(message.group || message.groupId)
: undefined,
fileId: message.fileId,
file: message.fileId ? await DriveFiles.pack(message.fileId) : null,
isRead: message.isRead,
reads: message.reads,
};
},
});