apps/recallassess/recallassess-api/src/api/client/common/navigation.controller.ts
api/client/common/navigation
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
Methods |
|
| getNavigation | ||||||||
getNavigation(auth: CLAuthData)
|
||||||||
Decorators :
@Get()
|
||||||||
|
Get navigation configuration (Role-based) GET /api/client/common/navigation Returns navigation items filtered by user role:
Parameters :
Navigation configuration for client portal |
| Private toClientNavigationDtos | ||||||
toClientNavigationDtos(items: RoleBasedNavigationItem[])
|
||||||
|
Parameters :
Returns :
ClientNavigationItemDto[]
|
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));
}
}