40 lines
1.0 KiB
TypeScript
40 lines
1.0 KiB
TypeScript
|
import { messages } from "~/lib/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: "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;
|
||
|
});
|