107 lines
4.1 KiB
JavaScript
107 lines
4.1 KiB
JavaScript
import { db } from "../../db/postgre.js";
|
|
import { Bite } from "../entities/bite.js";
|
|
import { Bites, Notes, Users } from "../index.js";
|
|
import { awaitAll } from "../../prelude/await-all.js";
|
|
import config from "../../config/index.js";
|
|
export const BiteRespository = db.getRepository(Bite).extend({
|
|
targetType (bite) {
|
|
if (bite.targetUserId) return "user";
|
|
if (bite.targetBiteId) return "bite";
|
|
return "note";
|
|
},
|
|
async pack (src, me) {
|
|
const bite = typeof src === "object" ? src : await this.findOneByOrFail({
|
|
id: src
|
|
});
|
|
return await awaitAll({
|
|
id: bite.id,
|
|
user: Users.pack(bite.user ?? bite.userId, me, {
|
|
detail: false
|
|
}),
|
|
targetType: BiteRespository.targetType(bite),
|
|
target: this.packTarget(bite, me),
|
|
replied: bite.replied
|
|
});
|
|
},
|
|
async packTarget (bite, me) {
|
|
switch(BiteRespository.targetType(bite)){
|
|
case "user":
|
|
return await Users.pack(bite.targetUser ?? bite.targetUserId, me, {
|
|
detail: false
|
|
});
|
|
case "bite":
|
|
return await this.pack(bite.targetBite ?? bite.targetBiteId, me);
|
|
case "note":
|
|
return await Notes.pack(bite.targetNote ?? bite.targetNoteId, me, {
|
|
detail: false
|
|
});
|
|
}
|
|
},
|
|
async targetUri (bite) {
|
|
switch(BiteRespository.targetType(bite)){
|
|
case "user":
|
|
{
|
|
bite.targetUser = bite.targetUser ?? await Users.findOneOrFail({
|
|
where: {
|
|
id: bite.targetUserId
|
|
}
|
|
});
|
|
return bite.targetUser.uri ?? `${config.url}/users/${bite.targetUserId}`;
|
|
}
|
|
case "bite":
|
|
{
|
|
bite.targetBite = bite.targetBite ?? await Bites.findOneOrFail({
|
|
where: {
|
|
id: bite.targetBiteId
|
|
}
|
|
});
|
|
return bite.targetBite.uri ?? `${config.url}/bites/${bite.targetBiteId}`;
|
|
}
|
|
case "note":
|
|
{
|
|
bite.targetNote = bite.targetNote ?? await Notes.findOneOrFail({
|
|
where: {
|
|
id: bite.targetNoteId
|
|
}
|
|
});
|
|
return bite.targetNote.uri ?? `${config.url}/notes/${bite.targetBiteId}`;
|
|
}
|
|
}
|
|
},
|
|
async targetUserUri (bite) {
|
|
switch(BiteRespository.targetType(bite)){
|
|
case "user":
|
|
if (!bite.targetUser) bite.targetUser = await Users.findOneByOrFail({
|
|
id: bite.targetUserId
|
|
});
|
|
return bite.targetUser.uri ?? `${config.url}/users/${bite.targetUserId}`;
|
|
case "bite":
|
|
bite.targetBite = bite.targetBite ?? await Bites.findOneOrFail({
|
|
where: {
|
|
id: bite.targetBiteId
|
|
},
|
|
relations: [
|
|
"user"
|
|
]
|
|
});
|
|
bite.targetBite.user = bite.targetBite.user ?? await Users.findOneByOrFail({
|
|
id: bite.targetBite.userId
|
|
});
|
|
return bite.targetBite.user.uri ?? `${config.url}/users/${bite.targetBite.userId}`;
|
|
case "note":
|
|
bite.targetNote = bite.targetNote ?? await Notes.findOneOrFail({
|
|
where: {
|
|
id: bite.targetNoteId
|
|
},
|
|
relations: [
|
|
"user"
|
|
]
|
|
});
|
|
bite.targetNote.user = bite.targetNote.user ?? await Users.findOneByOrFail({
|
|
id: bite.targetNote.userId
|
|
});
|
|
return bite.targetNote.user.uri ?? `${config.url}/users/${bite.targetNote.userId}`;
|
|
}
|
|
}
|
|
});
|