Skip to content
Snippets Groups Projects
Select Git revision
  • 93ab05359458be8888ed8ba552198812795c96b0
  • main default protected
2 results

main.py

Blame
  • ExerciseManager.ts 2.45 KiB
    import { Prisma }         from '@prisma/client';
    import { Exercise, User } from '../types/DatabaseTypes.js';
    import db                 from '../helpers/DatabaseHelper.js';
    
    
    class ExerciseManager {
        async get(idOrUrl: string, include: Prisma.ExerciseInclude | undefined = undefined): Promise<Exercise | undefined> {
            const id = idOrUrl.replace('.git', '').split('_').pop()!;
    
            return await db.exercise.findUnique({
                                                    where  : {
                                                        id: id
                                                    },
                                                    include: include
                                                }) as unknown as Exercise ?? undefined;
        }
    
        // deleteFilter is a boolean that is true to get only deleted exercises, false to get only non-deleted exercises, and undefined to get all exercises
        getFromAssignment(assignmentName: string, deleteFilter: boolean | undefined = undefined, include: Prisma.ExerciseInclude | undefined = undefined): Promise<Array<Exercise>> {
            return db.exercise.findMany({
                                            where  : { assignmentName: assignmentName, ...(deleteFilter !== undefined ? { deleted: deleteFilter } : {}) },
                                            include: include
                                        }) as Promise<Array<Exercise>>;
        }
    
        async isUserAllowedToAccessExercise(exercise: Exercise, user: User): Promise<boolean> {
            if ( !exercise.members ) {
                exercise.members = await db.exercise.findUnique({
                                                                    where: {
                                                                        id: exercise.id
                                                                    }
                                                                }).members() ?? [];
            }
    
            const assignmentStaff = (await db.assignment.findUnique({
                                                                        where: {
                                                                            name: exercise.assignmentName
                                                                        }
                                                                    }).staff()) ?? [];
    
            return exercise.members.findIndex(member => member.id === user.id) !== -1 || assignmentStaff.findIndex(staff => staff.id === user.id) !== -1;
        }
    }
    
    
    export default new ExerciseManager();