export type ID = number; export interface Node { id: ID; } export enum UserRole { STUDENT = "Student", TEACHER = "Teacher", } export interface User extends Node { firstName: string; lastName: string; name: string; username: string; email: string; role: UserRole; admin: boolean; externalId: ID; student?: Student; teacher?: Teacher; } export interface UserExternal { user: User; } export interface Student extends Node, UserExternal { vote?: Vote; } export interface Teacher extends Node, UserExternal { maxStudents: number; } export interface Vote extends Node { student: Student; } export interface TeacherVote extends Node { teacher: Teacher; priority: number; } export interface LoginPayload { user: User; token: string; bearer: string; }