Skip to content

Latest commit

 

History

2 Commits

Folders and files

NameName
Last commit message
Last commit date
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

STUDENT APPLY DOCUMENTATION

Project setup

$ npm install

Compile and run the project

# development
$ npm run start

# watch mode
$ npm run start:dev

# production mode
$ npm run start:prod

Run tests

# unit tests
$ npm run test

# e2e tests
$ npm run test:e2e

# test coverage
$ npm run test:cov

AUTHENTICATION AND USER MANAGEMENT

server url : https://student-apply-api-gateway.onrender.com

Register User

Mutation

mutation RegisterUser($data: RegisterUserDto!) {
  registerUser(data: $data) {
    id
    email
    firstName
    lastName
    role
    status
    # createdAt
  }
}

Variables

{
  "data": {
    "email": "user@example.com",
    "code": "123456"
  }
}
Update User Info

Mutation

mutation UpdateUser($data: UpdateUserDto!) {
  update(data: $data) {
    id
    firstName
    lastName
    email
    phone
    status
    role
  }
}

Variables

{
  "data": {
    "id": "userId",
    "firstName": "UpdatedFirstName",
    "lastName": "UpdatedLastName",
    "phone": "+2348012345678"
  }
}
Login User

Mutation

mutation Login($data: LoginUserDto!) {
  login(data: $data) {
    access_token
    user {
      id
      email
      firstName
      lastName
      role
      status
    }
  }
}

Variables

{
  "data": {
    "email": "user@example.com",
    "password": "password123"
  }
}
Request password reset

Mutation

mutation RequestPasswordReset($data: ForgetPasswordDto!) {
  requestReset(data: $data) {
    message
    resetLink
  }
}

Variables

{
  "data": {
    "email": "teammember@example.com"
  }
}
Reset Password

Mutation

mutation ResetUserPassword($data: ResetPasswordDto!) {
  resetPassword(data: $data) {
    message
  }
}

Variables

{
  "data": {
    "token": "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9...................",
    "newPassword": "newPassword"
  }
}
Change Password

Mutation

mutation ChangePassword($input: ChangePasswordInput!) {
  changePassword(input: $input) {
    success
    message
  }
}

Variables

{
  "input": {
    "currentPassword": "currentPassword",
    "newPassword": "NewPassword456",
    "confirmPassword": "NewPassword456"
  }
}
Get One Users

Mutation

query GetUserById($id: String!) {
  user(id: $id) {
    id
    email
    firstName
    lastName
    fullName
    role
    status
    profilePicture
  }
}

Variables

{
  "id": "09163248-2422-4c7d-a9dd-56a0176f9744"
}
Get All Users

Mutation

query GetAllUsers {
  users {
    id
    email
    firstName
    lastName
    role
    status
    createdAt
  }
}

Variables

SCHOOL PORTAL

Register School

Mutation

mutation RegisterSchool($data: RegisterSchoolInput!) {
  registerSchool(data: $data) {
    id
    name
    address
    logo
    about
    schoolPhotos
    coverPhoto
    founded
    institutionType
    website
    registrationCertificateNumber
    createdAt
    updatedAt
    user {
      id
      email
      role
    }
  }
}

Variables

{
  "data": {
    "userId": "15fd8535-f42d-4ed3-ab00-b4e6cd3315c4",
    "name": "Example University",
    "address": "123 University Road",
    "logo": "https://example.com/logo.png",
    "about": "A leading institution focused on excellence."
  }
}
Get One School

Query

query GetSchool($id: String!) {
  getSchool(id: $id) {
    id
    name
    address
    phone
    email
    logo
    about
    schoolPhotos
    coverPhoto
    founded
    institutionType
    website
    registrationCertificateNumber
    createdAt
    updatedAt
    user {
      id
      email
      role
    }
  }
}

Variables

{
  "id": "54867fbe-f389-46a7-a80e-a233b3e32b71"
}
Update School

Mutation

mutation UpdateSchool($id: ID!, $input: UpdateSchoolInfoInput!) {
  modifySchool(id: $id, input: $input) {
    id
    name
    address
    phone
    email
    logo
    about
    schoolPhotos
    coverPhoto
    founded
    institutionType
    website
    registrationCertificateNumber
    updatedAt
    user {
      id
      email
    }
  }
}

Variables

{
  "id": "SCHOOL_UUID_HERE",
  "input": {
    "phone": "+1 234 567 8900",
    "email": "info@exampleuniversity.edu",
    "website": "https://exampleuniversity.edu"
  }
}
update photos
{
  "id": "SCHOOL_UUID_HERE",
  "input": {
    "coverPhoto": "https://example.com/cover.jpg",
    "schoolPhotos": [
      "https://example.com/photo1.jpg",
      "https://example.com/photo2.jpg"
    ]
  }
}
Description + metadata update
{
  "id": "SCHOOL_UUID_HERE",
  "input": {
    "about": "Updated description about the university.",
    "founded": 1998,
    "institutionType": "Private University"
  }
}
Fetch a school and things associated with it

Mutation

query GetSchoolWithDetails($id: String!) {
  getSchoolWithDetails(id: $id) {
    id
    name
    email
    address
    phone
    website
    institutionType
    logo
    coverPhoto
    about
    founded

    # User Info
    user {
      id
      email
      firstName
      lastName
    }

    # Related Data
    programs {
      id
      name
      description
      duration
    }

    fees {
      id
      name
      amount
    }

    admissionRequirements {
      id
      name
      description
      isRequired
    }

    activities {
      id
      name
      description
      picture
    }
  }
}

Variables

{
  "id": "school ID"
}
Delete School

Mutation

mutation DeleteSchool($id: String!) {
  removeSchool(id: $id) {
    success
    message
  }
}

Variables

{
  "id": "school ID"
}
Get Schools Associated with User

Query

query GetUserSchools {
  getUserSchools {
    id
    name
    email
    address
    phone
    website
    logo
    coverPhoto
    about
    founded
    institutionType
    user {
      id
      email
    }
  }
}

Variables

{}

Invite Team Members

invite a team member

Mutation

mutation InviteTeamMember($schoolId: ID!, $input: InviteTeamMemberInput!) {
  inviteTeamMember(schoolId: $schoolId, input: $input) {
    success
    message
    inviteToken
  }
}

Variables

{
  "schoolId": "SCHOOL ID",
  "input": {
    "email": "teammember@example.com",
    "firstName": "Alex",
    "lastName": "Rivera",
    "teamMemberRole": "ADMIN"
  }
}
Complete Team Member Registration

Mutation

mutation CompleteRegistration($input: CompleteTeamMemberRegistrationInput!) {
  completeTeamMemberRegistration(input: $input) {
    user {
      id
      email
      firstName
      lastName
      role
    }
    accessToken
    membership {
      id
      role
      invitedBy
    }
  }
}

Variables

firstname and lastname are nullable, if included in invite, it will not be included in the variables here.
{
  "input": {
    "token": "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9...............",
    "password": "StrongPassword123!",
    "firstName":"first name",
    "lastName":"last name"
  }
}
Get all school team members

Query

query GetTeamMembers($schoolId: ID!, $filter: GetTeamMembersFilter) {
  getSchoolTeamMembers(schoolId: $schoolId, filter: $filter) {
    id
    role
    joinedAt: createdAt
    invitedBy
    user {
      id
      fullName
      email
      status
    }
  }
}

Variables

No filter
{
  "schoolId": "54867fbe-f389-46a7-a80e-a233b3e32b71"
}
With Filters (filters can be applied independently)

{
  "schoolId": "54867fbe-f389-46a7-a80e-a233b3e32b71",
  "filter": {
    "search": "Alex",
    "role": "ADMIN",
    "status": "ACTIVE"
  }
}

Program Endpoints

Add Program

Mutation

mutation CreateProgram($schoolId: ID!, $input: CreateProgramInput!) {
  addProgram(schoolId: $schoolId, input: $input) {
    id
    name
    description
    subjects
    department
    duration
    process
    createdAt
    updatedAt
  }
}

Variables

only name is required
{
    "schoolId": "54867fbe-f389-46a7-a80e-a233b3e32b71",
    "input": {
        "name": "Computer Science",
        "description": "Focuses on computation, algorithms, and software engineering.",
        "subjects": [
            "Algorithms",
            "Data Structures",
            "Databases"
        ]
    }
}
Get one program

Query

query GetProgram($schoolId: ID!, $programId: ID!) {
  getProgram(schoolId: $schoolId, programId: $programId) {
    id
    name
    description
    subjects
    department
    duration
    process
    createdAt
    updatedAt
    school {
      id
      name
    }
  }
}

Variables

{
  "schoolId": "54867fbe-f389-46a7-a80e-a233b3e32b71",
  "programId": "752d1e1e-e5af-4758-9c07-983ed20a867e"
}
Update Program

Mutation

mutation UpdateProgram($programId: ID!, $input: UpdateProgramInput!) {
  modifyProgram(programId: $programId, input: $input) {
    id
    name
    description
    subjects
    department
    duration
    process
    updatedAt
  }
}

Variables

{
  "programId": "752d1e1e-e5af-4758-9c07-983ed20a867e",
  "input": {
    "subjects": ["AI", "Machine Learning", "Cloud Computing", "Data Scraping"]
  }
}
Get a school's programs

Query

query GetProgramsBySchool($schoolId: ID!) {
  getschoolPrograms(schoolId: $schoolId) {
    id
    name
    description
    subjects
    department
    duration
    process
    createdAt
    updatedAt
  }
}

Variables

{
  "schoolId": "SCHOOL_UUID_HERE"
}
Delete Program

Mutation

mutation DeleteProgram($schoolId: ID!, $programId: ID!) {
  removeProgram(schoolId: $schoolId, programId: $programId) {
    success
    message
  }
}

Variables

{
  "schoolId": "SCHOOL_UUID_HERE",
  "programId": "PROGRAM_UUID_HERE"
}

Activities and Facilities

Add Activity or Facility

Mutation

mutation CreateActivity(
  $schoolId: ID!
  $input: CreateActivityAndFacilityInput!
) {
  addActivity(schoolId: $schoolId, input: $input) {
    message
    activity {
      id
      name
      description
      picture
      createdAt
    }
  }
}

Variables

{
  "schoolId": "54867fbe-f389-46a7-a80e-a233b3e32b71",
  "input": {
    "name": "Basketball Court",
    "description": "Outdoor standard-size basketball court",
    "picture": "https://example.com/basketball.jpg"
  }
}
Get One Activity

Mutation

query GetActivity($id: ID!) {
  getActivity(id: $id) {
    id
    name
    description
    picture
    createdAt
  }
}

Variables

{
  "id": "ACTIVITY_UUID"
}
Get Activities by school

Mutation

query GetActivitiesBySchool($schoolId: ID!) {
  activitiesBySchool(schoolId: $schoolId) {
    id
    name
    description
    picture
    createdAt
  }
}

Variables

{
  "schoolId": "SCHOOL_UUID"
}
Update Activity

Mutation

mutation UpdateActivity($id: ID!, $input: UpdateActivityAndFacilityInput!) {
  modifyActivity(id: $id, input: $input) {
    id
    name
    description
    picture
    updatedAt
  }
}

Variables

{
  "id": "ACTIVITY_UUID",
  "input": {
    "name": "Basketball Court",
    "description": "Outdoor standard-size basketball court",
    "picture": "https://example.com/basketball.jpg"
  }
}
Delete Activity

Mutation

mutation DeleteActivity($id: ID!) {
  removeActivity(id: $id) {
    deleted
    message
  }
}

Variables

{
  "id": "ACTIVITY_UUID"
}

Fees

Add fee

Mutation

mutation CreateFee($schoolId: ID!, $input: CreateFeeInput!) {
  addFee(schoolId: $schoolId, input: $input) {
    id
    name
    amount
    cycle
    school {
      id
      name
    }
  }
}

Variables

{
  "schoolId": "School ID",
  "input": {
    "name": "Application Fee",
    "amount": 1500,
    "cycle": "YEARLY"
  }
}
Get fees for a school

Mutation

query FeesBySchool($schoolId: ID!) {
  feesBySchool(schoolId: $schoolId) {
    id
    name
    amount
    cycle
  }
}

Variables

{
  "schoolId": "School ID"
}
Update fee

Mutation

mutation UpdateFee($id: ID!, $input: UpdateFeeInput!) {
  modifyFee(id: $id, input: $input) {
    message
    data {
      id
      name
      amount
      cycle
    }
  }
}

Variables

{
  "id": "59d99e37-ecb2-4a31-90ae-f2e9bb308004",
  "input": {
    "name": "Exam Fee",
    "amount": 2500,
    "cycle": "YEARLY"
  }
}
Delete fee

Mutation

mutation DeleteFee($id: ID!) {
  removeFee(id: $id) {
    success
    message
  }
}

Variables

{
  "id": "fee ID"
}

Admission Requirements

Add admission requirement

Mutation

mutation CreateAdmissionRequirement(
  $schoolId: ID!
  $input: CreateAdmissionRequirementInput!
) {
  addAdmissionRequirement(schoolId: $schoolId, input: $input) {
    id
    name
    description
    isRequired
    condition
    programId
    createdAt
  }
}

Variables

{
  "schoolId": "54867fbe-f389-46a7-a80e-a233b3e32b71",
  "input": {
    "name": "WAEC Certificate",
    "description": "Original WAEC certificate is required",
    "isRequired": true
  }
}
Get admission requirements by school

Mutation

query AdmissionRequirementsBySchool($schoolId: ID!) {
  admissionRequirementsBySchool(schoolId: $schoolId) {
    id
    name
    description
    isRequired
    programId
    condition
    createdAt
  }
}

Variables

{
  "schoolId": "54867fbe-f389-46a7-a80e-a233b3e32b71"
}
Update admission requirement

Mutation

mutation UpdateAdmissionRequirement($input: UpdateAdmissionRequirementInput!) {
  modifyAdmissionRequirement(input: $input) {
    id
    name
    description
    isRequired
    condition
    updatedAt
  }
}

Variables

{
  "input": {
    "id": "REQUIREMENT ID",
    "description": "Original WAEC certificate (no photocopies)",
    "isRequired": false
  }
}
Get admission requirement

Mutation

query AdmissionRequirement($id: ID!) {
  getAdmissionRequirement(id: $id) {
    id
    name
    description
    isRequired
    condition
    programId
    createdAt
    updatedAt
  }
}

Variables

{
  "id": "Requirement ID"
}
Delete admission requirement

Mutation

mutation DeleteAdmissionRequirement($id: ID!) {
  removeAdmissionRequirement(id: $id) {
    success
    message
  }
}

Variables

{
  "id": "Requirement ID"
}

SCHOOL APPLICATION MANAGEMENT

Get School Applications (with filters and pagination)

Query

query GetSchoolApplications(
  $schoolId: ID!
  $filter: GetApplicationsFilterInput
) {
  getSchoolApplications(schoolId: $schoolId, filter: $filter) {
    applications {
      id
      publicId
      courseName
      studentName
      studentEmail
      studentProfilePicture
      status
      stage
      progress
      dateAdded
    }
    total
    page
    limit
    totalPages
  }
}

Variables

Without filters (default pagination):
{
  "schoolId": "SCHOOL_ID_HERE"
}
With all filters:
{
  "schoolId": "SCHOOL_ID_HERE",
  "filter": {
    "programId": "PROGRAM_ID_HERE",
    "status": "UNDER_REVIEW",
    "studentName": "John",
    "dateFrom": "2026-01-01",
    "dateTo": "2026-01-31",
    "page": 1,
    "limit": 20
  }
}
Filter by status only:
{
  "schoolId": "SCHOOL_ID_HERE",
  "filter": {
    "status": "INTERVIEW_STAGE",
    "page": 1,
    "limit": 10
  }
}
Filter by student name:
{
  "schoolId": "SCHOOL_ID_HERE",
  "filter": {
    "studentName": "Smith",
    "page": 1,
    "limit": 15
  }
}
Filter by date range:
{
  "schoolId": "SCHOOL_ID_HERE",
  "filter": {
    "dateFrom": "2026-01-01",
    "dateTo": "2026-01-31"
  }
}
Update Application Status

Mutation

mutation UpdateApplicationStatus($input: UpdateApplicationStatusInput!) {
  updateApplicationStatus(input: $input) {
    success
    message
    status
    stage
  }
}

Variables

Move to Under Review:
{
  "input": {
    "applicationId": "APPLICATION_ID_HERE",
    "status": "UNDER_REVIEW",
    "note": "Application is now under review by the admissions committee."
  }
}
Move to Interview Stage:
{
  "input": {
    "applicationId": "APPLICATION_ID_HERE",
    "status": "INTERVIEW_STAGE",
    "note": "Congratulations! You have been selected for an interview."
  }
}
Approve Application:
{
  "input": {
    "applicationId": "APPLICATION_ID_HERE",
    "status": "APPROVED",
    "note": "Congratulations! Your application has been approved. Welcome to our institution!"
  }
}
Deny Application:
{
  "input": {
    "applicationId": "APPLICATION_ID_HERE",
    "status": "DENY",
    "note": "Thank you for your interest. Unfortunately, we cannot offer you admission at this time."
  }
}
Without note:
{
  "input": {
    "applicationId": "APPLICATION_ID_HERE",
    "status": "UNDER_REVIEW"
  }
}

Status Options:

  • UNDER_REVIEW - Application is being reviewed (Stage: REVIEW)
  • INTERVIEW_STAGE - Applicant invited for interview (Stage: INTERVIEW)
  • APPROVED - Application approved (Stage: DECISION)
  • DENY - Application denied (Stage: DECISION)
Add Note to Application

Mutation

mutation AddApplicationNote(
  $applicationId: ID!
  $input: AddNoteDto!
  $isInternal: Boolean
) {
  addApplicationNote(
    applicationId: $applicationId
    input: $input
    isInternal: $isInternal
  ) {
    id
    publicId
    status
    stage
    progress
    notes {
      id
      content
      isInternal
      createdAt
      author {
        firstName
        lastName
        role
      }
    }
  }
}

Variables

External note (visible to student):
{
  "applicationId": "APPLICATION_ID_HERE",
  "input": {
    "content": "We need your updated transcript."
  },
  "isInternal": false
}
Internal note (only visible to school staff):
{
  "applicationId": "APPLICATION_ID_HERE",
  "input": {
    "content": "Strong candidate, recommend for interview."
  },
  "isInternal": true
}
Update Application Note

Mutation

mutation UpdateApplicationNote($input: UpdateNoteInput!) {
  updateApplicationNote(input: $input) {
    id
    content
    isInternal
    createdAt
    updatedAt
    author {
      firstName
      lastName
      role
    }
  }
}

Variables

Update content only:
{
  "input": {
    "noteId": "NOTE_ID_HERE",
    "content": "Updated note content here."
  }
}
Update content and visibility:
{
  "input": {
    "noteId": "NOTE_ID_HERE",
    "content": "This note is now internal.",
    "isInternal": true
  }
}
Delete Application Note

Mutation

mutation DeleteApplicationNote($noteId: ID!) {
  deleteApplicationNote(noteId: $noteId) {
    success
    message
  }
}

Variables

{
  "noteId": "NOTE_ID_HERE"
}
Get Application Details

Query

query GetApplication($id: String!) {
  application(id: $id) {
    id
    publicId
    status
    stage
    progress
    applicationFeeAmount
    depositAmount
    boardingFeeAmount
    currencyCode
    requiresAccommodation
    accommodationType
    school {
      id
      name
      address
      logo
      institutionType
    }
    program {
      id
      name
      description
      duration
    }
    student {
      id
      firstName
      lastName
      fullName
      email
    }
    requirements {
      reqId
      status
      uploadedFile
      submittedAt
      requirement {
        id
        name
        description
      }
    }
    notes {
      id
      content
      isInternal
      createdAt
      author {
        firstName
        lastName
        role
      }
    }
  }
}

Variables

{
  "id": "APPLICATION_ID"
}

ADMIN PORTAL

Students section

Get All Students

Query

query GetAllStudents($filter: StudentsFilterInput) {
  getAllStudents(filter: $filter) {
    id
    name
    email
    profilePicture
    nationality
    dateAdded
    applicationsSummary {
      visible {
        id
        status
        progress
      }
      extraCount
    }
  }
}

Variables

{
  "filter": {
    "name": "John",
    "applicationStatus": "UNDER_REVIEW",
    "dateFrom": "2024-01-01T00:00:00Z"
  }
}
Get One Student Detail

Query

query GetOneStudentDetail($id: ID!) {
  getOneStudentDetail(id: $id) {
    id
    firstName
    middleName
    lastName
    gender
    dateOfBirth
    email
    phone
    country
    zipCode
    educationHistory {
      schoolName
      degree
    }
    workExperience {
      companyName
      position
    }
    testScores {
      testName
      score
    }
    documents {
      id
      name
      url
      status
    }
    totalActiveApplications
  }
}

Variables

{
  "id": "STUDENT_USER_ID"
}
Get Student Applications

Query

query GetStudentApplications(
  $studentId: ID!
  $filter: StudentApplicationsFilterInput
) {
  getStudentApplications(studentId: $studentId, filter: $filter) {
    id
    course
    schoolName
    schoolLogo
    status
    dateAdded
  }
}

Variables

{
  "studentId": "STUDENT_USER_ID",
  "filter": {
    "status": "APPROVED"
  }
}

Application Section

Get All Applications (Admin) - front page

Query

query AdminGetAllApplications($filter: AdminGetApplicationsFilterInput) {
  adminGetAllApplications(filter: $filter) {
    applications {
      id
      publicId
      courseName
      schoolName
      schoolLogo
      studentName
      studentEmail
      studentProfilePicture
      status
      stage
      createdAt
      updatedAt
    }
    total
    page
    limit
    totalPages
  }
}

Variables

{
  "filter": {
    "studentName": "John",
    "status": "UNDER_REVIEW",
    "page": 1,
    "limit": 10
  }
}
Get Application Details

Query

query GetApplication($id: String!) {
  application(id: $id) {
    id
    publicId
    status
    stage
    progress
    applicationFeeAmount
    depositAmount
    boardingFeeAmount
    currencyCode
    requiresAccommodation
    accommodationType
    school {
      id
      name
      address
      logo
      institutionType
    }
    program {
      id
      name
      description
      duration
    }
    student {
      id
      firstName
      lastName
      fullName
      email
    }
    requirements {
      reqId
      status
      uploadedFile
      submittedAt
      requirement {
        id
        name
        description
      }
    }
    notes {
      id
      content
      isInternal
      createdAt
      author {
        firstName
        lastName
        role
      }
    }
  }
}

Variables

{
  "id": "APPLICATION_ID"
}
Add Note to Application

Mutation

mutation AddApplicationNote(
  $applicationId: ID!
  $input: AddNoteDto!
  $isInternal: Boolean
) {
  addApplicationNote(
    applicationId: $applicationId
    input: $input
    isInternal: $isInternal
  ) {
    id
    publicId
    status
    stage
    progress
    notes {
      id
      content
      isInternal
      createdAt
      author {
        firstName
        lastName
        role
      }
    }
  }
}

Variables

External note (visible to student):
{
  "applicationId": "APPLICATION_ID_HERE",
  "input": {
    "content": "We need your updated transcript."
  },
  "isInternal": false
}
Internal note (only visible to school staff):
{
  "applicationId": "APPLICATION_ID_HERE",
  "input": {
    "content": "Strong candidate, recommend for interview."
  },
  "isInternal": true
}
Update Application Note

Mutation

mutation UpdateApplicationNote($input: UpdateNoteInput!) {
  updateApplicationNote(input: $input) {
    id
    content
    isInternal
    createdAt
    updatedAt
    author {
      firstName
      lastName
      role
    }
  }
}

Variables

Update content only:
{
  "input": {
    "noteId": "NOTE_ID_HERE",
    "content": "Updated note content here."
  }
}
Update content and visibility:
{
  "input": {
    "noteId": "NOTE_ID_HERE",
    "content": "This note is now internal.",
    "isInternal": true
  }
}
Delete Application Note

Mutation

mutation DeleteApplicationNote($noteId: ID!) {
  deleteApplicationNote(noteId: $noteId) {
    success
    message
  }
}

Variables

{
  "noteId": "NOTE_ID_HERE"
}
Create Application (Admin)

Mutation

mutation AdminCreateApplication($input: AdminCreateApplicationInput!) {
  adminCreateApplication(input: $input) {
    success
    message
    application {
      id
      publicId
      courseName
      schoolName
      schoolLogo
      studentName
      studentEmail
      status
      stage
      createdAt
    }
  }
}

Variables

{
  "input": {
    "studentId": "STUDENT_UUID_HERE",
    "programId": "PROGRAM_UUID_HERE",
    "academicIntake": "Fall 2025",
    "passportCopyUrl": "https://example.com/passport.jpg",
    "emergencyContact": {
      "name": "Jane Doe",
      "email": "jane@example.com",
      "phone": "+123456789",
      "relationship": "Mother",
      "address": "123 Main St"
    }
  }
}

Team Management Section

Get All App Admins

Query

query AdminGetAllAppAdmins($filter: AppAdminFilterInput) {
  adminGetAllAppAdmins(filter: $filter) {
    id
    name
    email
    profilePicture
    role
    status
    createdAt
  }
}

Variables

{
  "filter": {
    "name": "Admin",
    "status": "ACTIVE",
    "role": "ADMIN"
  }
}
Toggle User Status (Activate/Deactivate)

Mutation

mutation AdminToggleUserStatus($input: ToggleUserStatusInput!) {
  adminToggleUserStatus(input: $input) {
    success
    message
  }
}

Variables

{
  "input": {
    "userId": "USER_ID_HERE",
    "active": false
  }
}
Revoke Invitation

Mutation

mutation AdminRevokeInvite($inviteId: ID!) {
  adminRevokeInvite(inviteId: $inviteId)
}

Variables

{
  "inviteId": "INVITE_ID_HERE"
}

Role Management

Get All Roles

Query

query GetAllRoles {
  roles {
    id
    name
    description
    permissions {
      id
      model {
        name
      }
      action {
        name
      }
    }
    totalUsers
    totalPermissions
  }
}
Get Role By ID

Query

query GetRoleById($id: ID!) {
  getRoleById(id: $id) {
    id
    name
    description
    permissions {
      model {
        name
      }
      action {
        name
      }
    }
  }
}

Variables

{
  "id": "ROLE_ID_HERE"
}
Create New Role

Mutation

mutation CreateRole($data: CreateRoleDto!) {
  createRole(data: $data) {
    id
    name
    description
    permissions {
      model {
        name
      }
      action {
        name
      }
    }
  }
}

Variables

{
  "data": {
    "name": "School Editor",
    "description": "Can only view schools and update programs",
    "userType": "SCHOOL",
    "permissions": [
      {
        "domain": "School",
        "actions": ["READ"]
      },
      {
        "domain": "Program",
        "actions": ["UPDATE"]
      }
    ]
  }
}
  CREATE
  READ
  UPDATE
  DELETE
Home
  Invoice
  User
  Program
  Audit
  Invite
  InviteUser
  InviteSchool
  Application
  Requirement
  Transaction
  Subscription
  School
  Faq
  AdmissionRequirement
  Payment
  Fee
  RoleEntity
  Account
  ApplicationStatus
  ApplicationNote
Update Role

Mutation

mutation UpdateRole($data: UpdateRoleDto!) {
  updateRole(data: $data) {
    id
    name
    description
  }
}

Variables

{
  "data": {
    "id": "ROLE_ID_HERE",
    "name": "Updated Role Name",
    "permissions": [
      {
        "domain": "Application",
        "actions": ["READ", "UPDATE"]
      }
    ]
  }
}
Delete Role

Mutation

mutation DeleteRole($id: ID!) {
  deleteRole(id: $id)
}

Variables

{
  "id": "ROLE_ID_HERE"
}
Assign Role To User

Mutation

mutation AssignRoleToUser($data: AssignRoleInput!) {
  assignRoleToUser(data: $data)
}

Variables

{
  "data": {
    "userId": "USER_ID_HERE",
    "roleId": "ROLE_ID_HERE"
  }
}

Audit Logs

Get Admin Audit Logs

Query

query GetAdminAuditLogs($filter: AuditFilterInput) {
  getAdminAuditLogs(filter: $filter) {
    data {
      id
      category
      action
      description
      metadata
      ipAddress
      sessionId
      userId
      createdAt
      user {
        id
        fullName
        email
        role
      }
    }
    total
    page
    pageSize
  }
}

Variables

{
  "filter": {
    "category": "TEAM_MANAGEMENT",
    "search": "School Vice Principal",
    "startDate": "2024-01-01T00:00:00Z",
    "endDate": "2024-12-31T23:59:59Z",
    "page": 1,
    "pageSize": 10
  }
}

Available Categories (AuditCategory)

  • LOGIN
  • SCHOOL
  • AGENTS
  • STUDENTS
  • APPLICATIONS
  • SUBSCRIPTION
  • TEAM_MANAGEMENT
  • INVOICES
  • ACCOUNT

ADMIN DASHBOARD ANALYTICS

Summary Metrics

Get Dashboard Summary Stats

Query

query GetDashboardSummaryStats($days: Int) {
  getDashboardSummaryStats(days: $days) {
    totalActiveUsers {
      value
      percentageChange
    }
    totalNewUsers {
      value
      percentageChange
    }
  }
}

Variables

{
  "days": 30
}
Get Dashboard Trend Data

Query

query GetDashboardTrendData($days: Int) {
  getDashboardTrendData(days: $days) {
    date
    activeUsers
    newUsers
  }
}

Variables

{
  "days": 30
}

User & Application Analytics

Get Top Users By Application

Query

query GetTopUsersByApplication {
  getTopUsersByApplication {
    userName
    applicationCount
    trendPercentage
    profilePic
  }
}
Get Application Status Distribution

Query

query GetApplicationStatusDistribution {
  getApplicationStatusDistribution {
    successful
    pending
    denied
    successfulTrend
    pendingTrend
    deniedTrend
  }
}

Country & Visa Analytics

Get Visa Success Analytics

Query

query GetVisaSuccessAnalytics {
  getVisaSuccessAnalytics {
    country
    total
    approved
    denied
    score
  }
}
Get Applicants By Country Stats

Query

query GetApplicantsByCountryStats {
  getApplicantsByCountryStats {
    country
    count
    successRate
    flagUrl
  }
}
Get Top Destinations

Query

query GetTopDestinations {
  getTopDestinations {
    country
    count
    trendPercentage
    flagUrl
  }
}

Hide school

Toggle School Visibility

Mutation

mutation ToggleSchoolVisibility($id: ID!, $isHidden: Boolean!) {
  toggleSchoolVisibility(id: $id, isHidden: $isHidden) {
    id
    name
    isHidden
  }
}

Variables

{
  "id": "SCHOOL_ID",
  "isHidden": true
}

FAQ Endpoints

Create FAQ

Mutation

mutation CreateFaq($schoolId: ID!, $input: CreateFaqInput!) {
  createFaq(schoolId: $schoolId, input: $input) {
    id
    question
    answer
  }
}

Variables

{
  "schoolId": "school ID",
  "input": {
    "question": "What is the application deadline?",
    "answer": "The deadline is August 31st."
  }
}
Get FAQs by School

Query

query GetFaqsBySchool($schoolId: ID!) {
  getFaqsBySchool(schoolId: $schoolId) {
    id
    question
    answer
  }
}

Variables

{
  "schoolId": "school ID"
}
Update FAQ

Mutation

mutation UpdateFaq($input: UpdateFaqInput!) {
  updateFaq(input: $input) {
    id
    question
    answer
  }
}

Variables

{
  "input": {
    "id": "faq ID",
    "question": "Updated question?",
    "answer": "Updated answer."
  }
}
Delete FAQ

Mutation

mutation DeleteFaq($id: ID!) {
  deleteFaq(id: $id) {
    success
    message
  }
}

Variables

{
  "id": "faq ID"
}

STUDENT PORTAL NOTIFICATIONS

Get Student Notifications

Query

query GetStudentNotification($isRead: Boolean, $page: Int, $limit: Int) {
  getStudentNotification(isRead: $isRead, page: $page, limit: $limit) {
    notifications {
      id
      type
      title
      message
      context
      referenceId
      isRead
      createdAt
      readAt
    }
    total
    unreadCount
    page
    limit
    totalPages
  }
}

Variables

{
  "isRead": false,
  "page": 1,
  "limit": 10
}
Mark Notification as Read

Mutation

mutation MarkNotificationAsRead($notificationId: ID!) {
  markNotificationAsRead(notificationId: $notificationId) {
    id
    isRead
    readAt
  }
}

Variables

{
  "notificationId": "NOTIFICATION_ID_HERE"
}
Mark All Notifications as Read

Mutation

mutation MarkAllNotificationsAsRead {
  markAllNotificationsAsRead
}

SCHOOL PORTAL NOTIFICATIONS

Get School Notifications

Query

query GetSchoolNotification(
  $schoolId: ID!
  $isRead: Boolean
  $page: Int
  $limit: Int
) {
  getSchoolNotification(
    schoolId: $schoolId
    isRead: $isRead
    page: $page
    limit: $limit
  ) {
    notifications {
      id
      type
      title
      message
      context
      referenceId
      isRead
      createdAt
      readAt
    }
    total
    unreadCount
    page
    limit
    totalPages
  }
}

Variables

{
  "schoolId": "SCHOOL_ID_HERE",
  "isRead": false,
  "page": 1,
  "limit": 10
}
Mark School Notification as Read

Mutation

mutation MarkNotificationAsRead($notificationId: ID!, $schoolId: ID) {
  markNotificationAsRead(notificationId: $notificationId, schoolId: $schoolId) {
    id
    isRead
    readAt
  }
}

Variables

{
  "notificationId": "NOTIFICATION_ID_HERE",
  "schoolId": "SCHOOL_ID_HERE"
}
Mark All School Notifications as Read

Mutation

mutation MarkAllNotificationsAsRead($schoolId: ID) {
  markAllNotificationsAsRead(schoolId: $schoolId)
}

Variables

{
  "schoolId": "SCHOOL_ID_HERE"
}

admin invite

Invite User

Mutation

mutation AdminInviteUser($input: InviteUserInput!) {
  adminInviteUser(input: $input) {
    id
    token
    role
    expiresAt
  }
}

Variables

{
  "input": {
    "email": "testuser@example.com",
    "firstName": "John",
    "lastName": "Doe",
    "role": "STUDENT" 
  }
}

Complete invited User profile

Invite User

Mutation

mutation CompleteUserRegistration($input: CompleteUserRegistrationInput!) {
  completeUserRegistration(input: $input) {
    message
    token
    user {
      id
      email
      firstName
      lastName
      fullName
      role
      status
    }
  }
}

Variables

{
  "input": {
    "token": "<PLACE_THE_TOKEN_RECEIVED_FROM_THE_EMAIL_HERE>",
    "password": "SecurePassword123!"
  }
}

About

study portal system

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages