import GitlabUser from '../shared/types/Gitlab/GitlabUser'; import { Prisma } from '@prisma/client'; import db from '../helpers/DatabaseHelper'; import { User } from '../types/DatabaseTypes'; class UserManager { async getByMail(mail: string, include: Prisma.UserInclude | undefined = undefined): Promise<User | undefined> { return await db.user.findUnique({ where : { mail: mail }, include: include }) as unknown as User ?? undefined; } async getById(id: number, include: Prisma.UserInclude | undefined = undefined): Promise<User | undefined> { return await db.user.findUnique({ where : { id: id }, include: include }) as unknown as User ?? undefined; } async getByGitlabId(gitlabId: number, returnIdIfUndefined: boolean = true, include: Prisma.UserInclude | undefined = undefined): Promise<User | number | undefined> { return await db.user.findUnique({ where : { gitlabId: gitlabId }, include: include }) as unknown as User ?? (returnIdIfUndefined ? gitlabId : undefined); } async getFromGitlabUser(gitlabUser: GitlabUser, createIfNotExist: boolean = false, include: Prisma.UserInclude | undefined = undefined): Promise<User | number | undefined> { let user = await this.getByGitlabId(gitlabUser.id, true, include); if ( typeof user === 'number' && createIfNotExist ) { user = (await db.user.create({ data: { firstname: gitlabUser.name, gitlabId: gitlabUser.id } })).id; } return user; } async getFromGitlabUsers(gitlabUsers: Array<GitlabUser>, createIfNotExist: boolean = false, include: Prisma.UserInclude | undefined = undefined): Promise<Array<User | number | undefined>> { return Promise.all(gitlabUsers.map(gitlabUser => this.getFromGitlabUser(gitlabUser, createIfNotExist, include))); } } export default new UserManager();