Skip to content
Snippets Groups Projects
Select Git revision
  • 566c734ac5fec7e80a96c5fe532b090c43670235
  • main default protected
  • jw_sonar
  • v6.0.0 protected
  • interactive-mode-preference
  • bedran_exercise-list
  • add_route_user
  • Jw_sonar_backup
  • exercise_list_filter
  • assignment_filter
  • add_route_assignments
  • move-to-esm-only
  • 6.0.0-dev
  • Pre-alpha
  • 5.0.0
  • Latest
  • 4.2.0
  • 4.1.1
  • 4.1.0
  • 4.0.1
  • 4.0.0
  • 3.5.0
  • 3.4.2
  • 3.4.1
  • 3.3.0
  • 3.2.3
  • 3.2.2
  • 3.2.0
  • 3.1.2
  • 3.1.1
  • 3.1.0
  • 3.0.1
32 results

AssignmentCommand.ts

Blame
  • AssignmentManager.ts 2.47 KiB
    import { Prisma }           from '@prisma/client';
    import { Assignment, User } from '../types/DatabaseTypes.js';
    import db                   from '../helpers/DatabaseHelper.js';
    
    
    class AssignmentManager {
        async isUserAllowedToAccessAssignment(assignment: Assignment, user: User): Promise<boolean> {
            if ( !assignment.staff ) {
                assignment.staff = await db.assignment.findUnique({
                                                                      where: {
                                                                          name: assignment.name
                                                                      }
                                                                  }).staff() ?? [];
            }
            return assignment.staff.findIndex(staff => staff.id === user.id) !== -1;
        }
    
        async getByName(name: string, include: Prisma.AssignmentInclude | undefined = undefined): Promise<Assignment | undefined> {
            return await db.assignment.findUnique({
                                                      where  : {
                                                          name: name
                                                      },
                                                      include: include
                                                  }) as unknown as Assignment ?? undefined;
        }
    
        async getByGitlabLink(gitlabLink: string, include: Prisma.AssignmentInclude | undefined = undefined): Promise<Assignment | undefined> {
            const nameInUrl = gitlabLink.replace('.git', '').split('/').pop()!;
    
            const result = await db.assignment.findMany({
                                                            where  : {
                                                                gitlabLink: {
                                                                    endsWith: `/${ nameInUrl }`
                                                                }
                                                            },
                                                            include: include
                                                        }) as Array<Assignment>;
    
            return result.length > 0 ? result[0] : undefined;
        }
    
        get(nameOrUrl: string, include: Prisma.AssignmentInclude | undefined = undefined): Promise<Assignment | undefined> {
            if ( nameOrUrl.includes('://') ) {
                return this.getByGitlabLink(nameOrUrl, include);
            } else {
                return this.getByName(nameOrUrl, include);
            }
        }
    }
    
    
    export default new AssignmentManager();