el.xwx.moe/lib/api/controllers/users/getUsers.ts

55 lines
1.2 KiB
TypeScript
Raw Normal View History

import { prisma } from "@/lib/api/db";
export default async function getUser({
params,
isSelf,
username,
}: {
params: {
lookupUsername?: string;
lookupId?: number;
};
isSelf: boolean;
username: string;
}) {
const user = await prisma.user.findUnique({
where: {
id: params.lookupId,
username: params.lookupUsername?.toLowerCase(),
},
include: {
whitelistedUsers: {
select: {
username: true
}
}
}
});
if (!user) return { response: "User not found.", status: 404 };
const whitelistedUsernames = user.whitelistedUsers?.map(usernames => usernames.username);
if (
!isSelf &&
user?.isPrivate &&
!whitelistedUsernames.includes(username.toLowerCase())
) {
return { response: "This profile is private.", status: 401 };
}
2023-05-20 14:25:00 -05:00
const { password, ...lessSensitiveInfo } = user;
2023-05-20 14:25:00 -05:00
2023-05-18 13:02:17 -05:00
const data = isSelf
2023-05-20 14:25:00 -05:00
? // If user is requesting its own data
{...lessSensitiveInfo, whitelistedUsers: whitelistedUsernames}
2023-05-18 13:02:17 -05:00
: {
// If user is requesting someone elses data
id: lessSensitiveInfo.id,
name: lessSensitiveInfo.name,
username: lessSensitiveInfo.username,
2023-05-18 13:02:17 -05:00
};
2023-05-20 14:25:00 -05:00
return { response: data || null, status: 200 };
}