41 lines
1.1 KiB
TypeScript
41 lines
1.1 KiB
TypeScript
import { messages } from "@server/constants";
|
|
import { Ficmas } from "@models/challenges/ficmas";
|
|
import { Challenge } from "@models/challenges/gen";
|
|
import { IUser, User } from "@models/user";
|
|
|
|
export default cachedEventHandler(async (ev) => {
|
|
const id = parseInt(getRouterParam(ev, "id")!);
|
|
const dontSelect = ["-password", "-auth"];
|
|
|
|
if (!ev.context.currentUser?.profile.isAdmin) {
|
|
dontSelect.push("-ipLog");
|
|
}
|
|
|
|
let user = await User.findOne({ _id: id })
|
|
.select(dontSelect.join(" "))
|
|
.populate({ path: "favs.authors", select: dontSelect.join(" ") })
|
|
.populate({
|
|
path: "favs.stories",
|
|
populate: [
|
|
{ path: "author", select: "username _id" },
|
|
{ path: "chapters.bands" },
|
|
{
|
|
path: "ficmas",
|
|
model: Ficmas,
|
|
populate: { path: "wisher", select: "username _id" },
|
|
},
|
|
{ path: "challenge", model: Challenge },
|
|
],
|
|
})
|
|
.exec();
|
|
if (!user) {
|
|
throw createError({
|
|
statusCode: 404,
|
|
message: messages[404],
|
|
});
|
|
}
|
|
let obj: Partial<IUser> = user.toObject();
|
|
if (!obj.profile!.showEmail) delete obj.email;
|
|
return obj;
|
|
});
|