/** * @copyright 2026 NHCarrigan * @license Naomi's Public License * @author Naomi Carrigan */ import { User } from "@library/shared-types"; import { prisma } from "../lib/prisma"; export class UserService { private prisma = prisma; async getAllUsers(): Promise { const users = await this.prisma.user.findMany({ orderBy: { username: "asc" }, }); return users.map((user) => ({ id: user.id, discordId: user.discordId, username: user.username, email: user.email, avatar: user.avatar || undefined, isAdmin: user.isAdmin, isBanned: user.isBanned, inDiscord: user.inDiscord, isVip: user.isVip, isMod: user.isMod, isStaff: user.isStaff, })); } async getUserById(id: string): Promise { const user = await this.prisma.user.findUnique({ where: { id }, }); if (!user) { return null; } return { id: user.id, discordId: user.discordId, username: user.username, email: user.email, avatar: user.avatar || undefined, isAdmin: user.isAdmin, isBanned: user.isBanned, inDiscord: user.inDiscord, isVip: user.isVip, isMod: user.isMod, isStaff: user.isStaff, }; } async banUser(id: string): Promise { const user = await this.prisma.user.update({ where: { id }, data: { isBanned: true }, }); return { id: user.id, discordId: user.discordId, username: user.username, email: user.email, avatar: user.avatar || undefined, isAdmin: user.isAdmin, isBanned: user.isBanned, inDiscord: user.inDiscord, isVip: user.isVip, isMod: user.isMod, isStaff: user.isStaff, }; } async unbanUser(id: string): Promise { const user = await this.prisma.user.update({ where: { id }, data: { isBanned: false }, }); return { id: user.id, discordId: user.discordId, username: user.username, email: user.email, avatar: user.avatar || undefined, isAdmin: user.isAdmin, isBanned: user.isBanned, inDiscord: user.inDiscord, isVip: user.isVip, isMod: user.isMod, isStaff: user.isStaff, }; } async isUserBanned(id: string): Promise { const user = await this.prisma.user.findUnique({ where: { id }, select: { isBanned: true }, }); return user?.isBanned ?? false; } }