Skip to content
Snippets Groups Projects
Select Git revision
  • bcbfda0af01c152e48e7d9f92a79043aa4df4c19
  • main default protected
  • add_export_route
  • add_route_assignments
  • 4.1.0-dev
  • 4.0.0
  • 3.5.3
  • 3.5.3-dev
  • 3.5.2
  • 3.5.2-dev
  • 3.5.1
  • 3.5.1-dev
  • 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
24 results

Session.ts

Blame
  • Forked from Dojo Project (HES-SO) / Projects / Backend / DojoBackendAPI
    Source project has a limited visibility.
    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();