Skip to content
Snippets Groups Projects
Select Git revision
  • fd49131b748706b9aa2328ceb05a33310f1be60b
  • main default protected
  • jw_sonar
  • v6.0.0 protected
  • bedran_exercise-list
  • ask-user-to-delete-exercises-on-duplicates
  • update-dependencies
  • jw_sonar_backup
  • add_route_assignments
  • 6.0.0-dev
  • 5.0.1
  • 5.0.0
  • 4.1.0
  • 4.0.0
  • 3.5.3
  • 3.5.2
  • 3.5.1
  • 3.5.0
  • 3.4.2
  • 3.4.1
  • 3.4.0
  • 3.3.0
  • 3.2.0
  • 3.1.3
  • 3.1.2
  • 3.1.1
  • 3.1.0
  • 3.0.1
  • 3.0.0
29 results

UserManager.ts

Blame
  • UserManager.ts 3.28 KiB
    import GitlabUser    from '../shared/types/Gitlab/GitlabUser';
    import { Prisma }    from '@prisma/client';
    import db            from '../helpers/DatabaseHelper';
    import GitlabProfile from '../shared/types/Gitlab/GitlabProfile';
    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 getUpdateFromGitlabProfile(gitlabProfile: GitlabProfile): Promise<User> {
            await db.user.upsert({
                                     where : {
                                         id: gitlabProfile.id
                                     },
                                     update: {
                                         mail          : gitlabProfile.email,
                                         gitlabLastInfo: gitlabProfile
                                     },
                                     create: {
                                         id            : gitlabProfile.id,
                                         name          : gitlabProfile.name,
                                         mail          : gitlabProfile.email,
                                         gitlabUsername: gitlabProfile.username,
                                         gitlabLastInfo: gitlabProfile,
                                         deleted       : false
                                     }
                                 });
    
            return (await this.getById(gitlabProfile.id))!;
        }
    
        async getFromGitlabUser(gitlabUser: GitlabUser, createIfNotExist: boolean = false, include: Prisma.UserInclude | undefined = undefined): Promise<User | number | undefined> {
            let user = await this.getById(gitlabUser.id, include) ?? gitlabUser.id;
    
            if ( typeof user === 'number' && createIfNotExist ) {
                user = (await db.user.create({
                                                 data: {
                                                     id            : gitlabUser.id,
                                                     gitlabUsername: gitlabUser.name
                                                 }
                                             })).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();