File

apps/recallassess/recallassess-api/src/api/client/common/navigation.controller.ts

Prefix

api/client/common/navigation

Description

Navigation Controller for RecallAssess Client Portal PWA Path: /api/client/common/navigation

Returns role-based navigation menu items for the client portal Implements dynamic navigation filtering based on authenticated user's role

Index

Methods

Methods

getNavigation
getNavigation(auth: CLAuthData)
Decorators :
@Get()

Get navigation configuration (Role-based) GET /api/client/common/navigation

Returns navigation items filtered by user role:

  • PARTICIPANT: Dashboard, My Courses
  • PARTICIPANT_ADMIN: All navigation items including Settings
Parameters :
Name Type Optional Description
auth CLAuthData No
  • Authenticated user data (injected by

Navigation configuration for client portal

Private toClientNavigationDtos
toClientNavigationDtos(items: RoleBasedNavigationItem[])
Parameters :
Name Type Optional
items RoleBasedNavigationItem[] No
import { CLAuthData, ClientAuth } from "@api/shared/decorators/client-auth.decorator";
import { bnestPlainToDto } from "@bish-nest/core";
import { Controller, Get } from "@nestjs/common";
import { clientNavigationConfig } from "../../../config/navigation/client-navigation.config";
import { NavigationFilterService } from "../../../config/navigation/services";
import { ParticipantRole, RoleBasedNavigationItem } from "../../../config/navigation/types";
import { ClientNavigationItemDto } from "./dto";

/**
 * Navigation Controller for RecallAssess Client Portal PWA
 * Path: /api/client/common/navigation
 *
 * Returns role-based navigation menu items for the client portal
 * Implements dynamic navigation filtering based on authenticated user's role
 */
@Controller("api/client/common/navigation")
export class CLNavigationController {
  constructor(private readonly navigationFilterService: NavigationFilterService) {}

  /**
   * Get navigation configuration (Role-based)
   * GET /api/client/common/navigation
   *
   * Returns navigation items filtered by user role:
   * - PARTICIPANT: Dashboard, My Courses
   * - PARTICIPANT_ADMIN: All navigation items including Settings
   *
   * @param auth - Authenticated user data (injected by @ClientAuth decorator)
   * @returns Navigation configuration for client portal
   */
  @Get()
  getNavigation(@ClientAuth() auth: CLAuthData): Record<string, ClientNavigationItemDto[]> {
    // Get user's role from auth context
    const userRole = auth.role as ParticipantRole;

    // Filter navigation items based on role
    const filteredItems = this.navigationFilterService.getItemsForRole(clientNavigationConfig.items, userRole);

    const publicItems = this.toClientNavigationDtos(filteredItems);

    // The frontend expects an object with the config name as key
    return {
      [clientNavigationConfig.name]: publicItems,
    };
  }

  private toClientNavigationDtos(items: RoleBasedNavigationItem[]): ClientNavigationItemDto[] {
    return items.map((item) => bnestPlainToDto(item, ClientNavigationItemDto));
  }
}

results matching ""

    No results matching ""