UNPKG

alpha-version-dce-check-in-api

Version:

API for taking attendance and checking people in.

230 lines (215 loc) 6.02 kB
import express, { Request } from 'express'; import { Collection } from 'dce-mango'; /** * Type for Canvas API (see `caccl-api` package). * @author Benedikt Arnarsson */ type CanvasAPI = any; /** * Type of a course event * @author Gabe Abrams */ declare enum CourseEventType { Class = "class", Section = "section", Lab = "lab", OfficeHours = "office-hours", Meeting = "meeting", Event = "event", Other = "other" } /** * Enum for the days of the week * @author Gabe Abrams */ declare enum DayOfWeek { Monday = "M", Tuesday = "T", Wednesday = "W", Thursday = "R", Friday = "F", Saturday = "S", Sunday = "U" } /** * A specific time window where a user can get an attendance point * @author Gabe Abrams */ declare enum PointWindow { Day = "Day", Week = "Week", Once = "Once" } /** * Event property for whether to assign groups across occurrences. * @author Benedikt Arnarsson */ declare enum AssignToGroups { Always = "Always", Never = "Never", Ask = "Ask" } /** * A single course event * @author Gabe Abrams */ type CourseEvent = ({ key: string; courseId: number; ihid: string; name: string; type: CourseEventType; lockZoomToggle?: boolean; lockAutoRecordSetting?: boolean; banDCEStudents?: boolean; banFASStudents?: boolean; pinned?: boolean; archived?: boolean; } & ({ currentZoomId: number; pastZoomIds?: number[] | null; currentZoomHost: string; pastZoomHosts?: string[] | null; openZoomLink: string; isWebinar?: boolean; } | { currentZoomId?: null; pastZoomIds?: number[] | null; currentZoomHost?: null; pastZoomHosts?: string[] | null; openZoomLink?: null; isWebinar?: null; }) & ({ isHeldInPerson: true; inPersonConfig: { assignToGroups: AssignToGroups; }; } | { isHeldInPerson?: false; inPersonConfig?: undefined; }) & ({ pointWindow?: PointWindow; daysOfWeek?: DayOfWeek[]; maxPoints?: number | null | undefined; } | { pointWindow?: null; daysOfWeek?: null; maxPoints?: null; })); type GetCourseEvent = (opts: { courseId: number; ihid: string; requireNotArchived: true; }) => Promise<CourseEvent>; /** * Record an action occurrence * @author Gabe Abrams * @author Karen Dolan * @param {string} type - the action type * @param {string} description - the error message * @param {object} req - Express request object * @param {number} [userId=value in session] - the Canvas id of the user who is * attending * @param {string} [userFirstName=value in session] - the first name of the user * @param {string} [userLastName=value in session] - the last name of the user * @param {number} [courseId=value in session] - the Canvas Course Id * @param {object} [metadata={}] - additional metadata object * @param {boolean} [isLearner=value in session] - true if the user is a learner * @param {boolean} [isAdmin=value in session] - true if the user is an admin */ type LogAction = (opts: { type: string; description: string; req: Request; userId?: number; userFirstName?: string; userLastName?: string; courseId?: number; metadata?: { [k: string]: any; }; isLearner?: boolean; isAdmin?: boolean; }) => Promise<void>; /** * Record an error * @author Gabe Abrams * @param {string} message - the error message * @param {string|number} code - the error code * @param {object} req - Express request object * @param {number} [userId=value in session] - the Canvas id of the user who is * attending * @param {string} [userFirstName=value in session] - the first name of the user * @param {string} [userLastName=value in session] - the last name of the user * @param {number} [courseId=value in session] - the Canvas Course Id * @param {object} [metadata={}] - additional metadata object * @param {boolean} [isLearner=value in session] - true if the user is a learner * @param {boolean} [isAdmin=value in session] - true if the user is an admin */ type LogError = (opts: { message: string; code: string | number; req: Request; userId?: number; userFirstName?: string; userLastName?: string; courseId?: number; metadata?: { [key in string]: any; }; isLearner?: boolean; isAdmin?: boolean; }) => Promise<void>; /** * Enum for the attendance method * @author Gabe Abrams */ declare enum AttendanceMethod { InPerson = "in-person", Live = "live", Async = "async", Excused = "excused" } /** * Information needed to log attendance. * @author Benedikt Arnarsson * @author Gabe Abrams */ type AttendanceEntry = { userId: number; userFirstName: string; userLastName: string; courseId: number; ihid: string; method: AttendanceMethod; groupNum?: number; isLearner?: boolean; isAdmin?: boolean; isHost?: boolean; eventTimestamp?: number; }; /** * Type describing a function required for recording student attendance. * @author Benedikt Arnarsson */ type RecordAttendanceFunction = (opts: AttendanceEntry) => Promise<void>; /** * Function to add the dce-check-in-ui backend to your Express app. * @author Benedikt Arnarsson * @param app the Express app that will handle the check-in UI backend calls. * @param opts.getCanvasAPI function for retrieving the Canvas API. * @param opts.CollectionCons constructor for Collection type (dce-mango). * @param opts.recordAttendance function for recording student attendance. * @param opts.logAction function for logging backend actions. * @param opts.logError function for logging backend errors. */ declare const addCheckInRoutes: (opts: { app: express.Application; getCanvasAPI: () => CanvasAPI; CollectionCons: typeof Collection; recordAttendance: RecordAttendanceFunction; getCourseEvent: GetCourseEvent; logAction: LogAction; logError: LogError; }) => void; export { addCheckInRoutes };