Skip to main content
Glama
projects.service.ts3.02 kB
import { Injectable } from '@nestjs/common'; import { AuthService } from '@/auth/auth.service'; import { ApiClientService } from '@/shared/http/api-client.service'; interface Project { id: number; name: string; project_id?: number; project_name?: string; } interface Module { id?: number; module_id?: number; name?: string; module_name?: string; project_id: number; } interface ProjectWithModules { projects: Project[]; modules: Module[]; } /** * Service for managing projects and modules * Handles fetching and organizing project/module data */ @Injectable() export class ProjectsService { constructor( private readonly authService: AuthService, private readonly apiClient: ApiClientService, ) {} /** * Get current user's projects and their modules * @returns Projects and modules for authenticated user */ async getUserProjectsAndModules(): Promise<ProjectWithModules> { const user = this.authService.getCurrentUser(); const token = this.authService.getToken(); if (!user || !token) { throw new Error('User not authenticated'); } let projectsResponse = null; let modulesResponse = null; try { projectsResponse = await this.apiClient.getUserProjects(user.id, token); // If user has projects, fetch modules for the first project if (projectsResponse?.data && projectsResponse.data.length > 0) { const firstProject = projectsResponse.data[0]; const projectId = firstProject.id || firstProject.project_id; if (projectId) { modulesResponse = await this.apiClient.getModules(projectId, token); } } } catch (error) { console.warn('Failed to fetch projects/modules:', error.message); } return { projects: projectsResponse?.data || [], modules: modulesResponse?.data ? modulesResponse.data.map((module: any) => ({ id: module.module_id, name: module.module_name, project_id: module.project_id, })) : [], }; } /** * Get all projects for current user */ async getAllUserProjects() { const user = this.authService.getCurrentUser(); const token = this.authService.getToken(); if (!user || !token) { throw new Error('User not authenticated'); } try { const response = await this.apiClient.getUserProjects(user.id, token); return response?.data || []; } catch (error) { throw new Error(`Failed to fetch projects: ${error.message}`); } } /** * Get modules for a specific project */ async getModulesForProject(projectId: number) { const token = this.authService.getToken(); if (!token) { throw new Error('User not authenticated'); } try { const response = await this.apiClient.getModules(projectId, token); return response?.data || []; } catch (error) { throw new Error(`Failed to fetch modules for project ${projectId}: ${error.message}`); } } }

Latest Blog Posts

MCP directory API

We provide all the information about MCP servers via our MCP API.

curl -X GET 'https://glama.ai/api/mcp/v1/servers/arshad-khan1/Timesheet-mcp'

If you have feedback or need assistance with the MCP directory API, please join our Discord server