UNPKG

@blue-impact-engine/blue-impact-engine-client

Version:
81 lines 2.75 kB
/** * Project service for handling project-related operations * @packageDocumentation */ import { QueryParamOperator } from '../../core/types'; /** * Project Service * Handles all project-related API operations and business logic */ export class ProjectService { constructor(httpClient) { this.httpClient = httpClient; const config = this.httpClient.getConfig?.(); const routes = config?.routes; this.baseEndpoint = routes?.projectsBase || "/api/projects"; } /** * Get all projects with optional filtering and pagination * @param params - Query parameters for filtering, sorting, and pagination * @param options - Request options * @returns Promise<PaginatedResponse<Project>> */ async getAll(params, options) { if (params?.status) { return this.getByStatus(params.status, params, options); } const response = await this.httpClient.get(this.baseEndpoint, params, options); // Normalize when the remote returns a raw array if (Array.isArray(response)) { return { success: true, data: response, }; } // Normalize possible raw array responses wrapped in ApiResponse if (response?.data && Array.isArray(response.data)) { return { success: true, data: response.data, }; } // Some endpoints might wrap the array in an object if (response && response.projects && Array.isArray(response.projects)) { return { success: true, data: response.projects, }; } return response; } /** * Get a project by ID * @param id - Project ID * @param options - Request options * @returns Promise<ApiResponse<Project>> */ async getById(id, options) { const response = await this.httpClient.get(`${this.baseEndpoint}/${id}`, undefined, options); return response; } /** * Get projects by status * @param status - Project status * @param params - Query parameters * @param options - Request options * @returns Promise<PaginatedResponse<Project>> */ async getByStatus(status, params, options) { const statusFilter = { field: "status", operation: QueryParamOperator.EQUALS, value: status, }; params ? (params.where = statusFilter) : (params = { where: statusFilter }); const response = await this.httpClient.get(`${this.baseEndpoint}`, params, options); return response; } } //# sourceMappingURL=project.service.js.map