Skip to content

Dashboard Endpoints

Carlin Tan edited this page May 1, 2025 · 19 revisions

Student Dashboard

Get deadlines via a student ID

GET: /api/dashboard/student/:studentId/deadlines

  • Authorization Required: authorizeSignedIn

Response Body:

{
    deadlines: [
        {
            deadline: {
                name: string;
                id: number;
                type: DEADLINE_TYPES;
                dueBy: string; // ISO 8601
                ...
            },
            toProject?: { // Only applicable for type 'Evaluation' and 'Feedback'
                id: number;
                name: string;
                ...
            },
            toProjectSubmission?: Submission, // Exists when project has made a submission for the specified deadline
            toUser?: {// Only applicable for type 'Feedback'
                id: number;
                name: string;
                ...
            },
            submission?: { // Only exists if a draft OR a submission has been created
                id: number;
                updatedAt: string; // ISO 8601
                isDraft: boolean;
                ...
            }       
        }
    ]
}

Get peer evaluations/feedback submissions via a student ID

GET: /api/dashboard/student/:studentId/evaluations-feedbacks

  • Authorization Required: authorizeSignedIn

Response Body:

{
    deadlines: [
        {
            deadline: {
                id: number;
                name: string;
                type: 'Evaluation' | 'Feedback';
                dueBy: string; // ISO 8601;
                evaluatingMilestoneId?: number;
                ...
            },
            submissions: [
                {
                    id?: number,
                    fromProject?: { // Only applicable when deadline.type === 'Evaluation'
                        id: number;
                        name: string;
                        ...
                    },
                    fromUser?: { // Only applicable when deadline.type === 'Evaluation' OR 'Feedback'
                        id: number;
                        name: string;
                        ...
                    },
                    updatedAt: string; // ISO 8601
                }    
            ]
        }
    ]
}

Adviser Dashboard

Get deadlines via an adviser ID

GET: /api/dashboard/adviser/:adviserId/deadlines

  • Authorization Required: authorizeSignedIn

Response Body:

{
    deadlines: [
        {
            deadline: {
                name: string;
                id: number;
                type: 'Evaluation' | 'Feedback';
                dueBy: string; // ISO 8601
                ...
            },
            toProject: {
                id: number;
                name: string;
                submissionId?: number; // Exists when project has made a submission for the specified deadline
                ...
            },
            submission?: { // Only exists if a draft OR a submission has been created
                id: number;
                updatedAt: string; // ISO 8601
                ...
            }
        }
    ]
}

Get advisee submissions via an adviser ID

GET: /api/dashboard/adviser/:adviserId/submissions

  • Authorization Required: authorizeSignedIn

Response Body:

{
    deadlines: [
        {
            deadline: {
                id: number;
                name: string;
                type: DEADLINE_TYPE,
                dueBy: string; // ISO 8601
                ...
            },
            submissions: [
                {
                    id?: number, // id exists if submission exists
                    fromProject: {
                        id: number;
                        name: string;
                        ...
                    },
                    toProject?: {  // Only applicable when deadline.type === 'Evaluation' OR 'Feedback'
                        id: number;
                        name: string;
                        ...
                    },
                    toUser?: { // Only applicable when deadline.type === 'Feedback'
                        id: number;
                        name: string;
                        ...
                    },
                    updatedAt: string; // ISO 8601
                }    
            ]
        }
    ]
}

Mentor Dashboard

Get mentee milestone submissions via an mentor ID

GET: /api/dashboard/mentor/:mentorId/submissions

  • Authorization Required: authorizeSignedIn

Response Body:

{
    deadlines: [
        {
            deadline: {
                id: number;
                name: string;
                type: "Milestone",
                dueBy: string; // ISO 8601
                ...
            },
            submissions: [
                {
                    id?: number, // id exists if submission exists
                    fromProject: {
                        id: number;
                        name: string;
                        ...
                    },
                    updatedAt: string; // ISO 8601
                }    
            ]
        }
    ]
}

Administrator Dashboard Endpoints

Fetch all team submissions based on deadline

GET: /api/dashboard/administrator/team-submissions

  • Authorization Required: authorizeAdmin

Query Params:

  • cohortYear: number;
  • deadlineId: number;
  • search?: string;
  • submissionStatus?: SUBMISSION_STATUS; => If not provided, return regardless of status
  • page?: number; => If both page and limit not provided, return all
  • limit?: number;
enum SUBMISSION_STATUS {
    UNSUBMITTED = "Unsubmitted" (submission does not exist || isDraft === true)
    SUBMITTED = "Submitted"
    SUBMITTED_LATE = "Submitted_Late"
}

Response Data:

The response body varies depending on the presence of deadlineId:

If deadlineId is provided:

{
    submissions: [
        {
            id?: number, // id exists if submission exists
            updatedAt?: Date // exists if submission exists
            fromProject: {
                id: number,
                name: string,
                achievement: string,
                students: Student[],
                adviser: {
                    id: number,
                    userId: number,
                    name: string,
                    email: string,
                    nusnetId: string,
                    matricNo: string,
                    profilePicUrl?: string,
                    githubUrl?: string,
                    linkedinUrl?: string,
                    personalSiteUrl?: string,
                    selfIntro?: string,
                }, 
                mentor: {
                    id: number,
                    userId: number,
                    name: string,
                    email: string,
                    profilePicUrl?: string,
                    githubUrl?: string,
                    linkedinUrl?: string,
                    personalSiteUrl?: string,
                    selfIntro?: string,
                },
            },
            updatedAt: string; // ISO 8601
        }    
    ],
    unsubmitted: number,
    submittedOnTime: number,
    submittedLate: number
}

If deadlineId is not provided:

{
  submissions: [
    {
      deadlineId: number;
      deadlineTitle: string;
      deadlineDueAt: string; // ISO 8601
      submissionStatus: SUBMISSION_STATUS;
      id?: number;
      updatedAt?: string; // ISO 8601
      fromProject: { ... } // same as above
    }
  ]
}

Send Submission Reminders

POST: /api/dashboard/administrator/team-submissions/send-reminders

  • Authorization Required: authorizeAdmin

Query Params:

  • emails: string[];
  • ccs: string[];
  • subject: string;
  • message: string;

Response Data:

{
  message: string; // e.g. "Reminders sent to 12 teams."
}

NUS Skylab v2 - Backend

Introduction

Project Organization

Project Requirements

Endpoints

Clone this wiki locally