@blue-impact-engine/blue-impact-engine-client
Version:
Blue Impact Engine API Client
81 lines • 2.75 kB
JavaScript
/**
* 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