import { Injectable } from '@angular/core'; import { Endpoints } from '../../endpoints'; import { QueryParams } from '../models/Query.model'; import { environment } from '../../../environments/environment'; @Injectable({ providedIn: 'root', }) export class EndpointService { public getUrl(endpoint: keyof typeof Endpoints, pathParts?: string[], queryParams?: QueryParams): string { const urlSearchParams = new URLSearchParams(); if (queryParams?.page !== undefined) { urlSearchParams.set('page', queryParams.page.toString()); } if (queryParams?.size !== undefined) { urlSearchParams.set('size', queryParams.size.toString()); } queryParams?.sort?.forEach((sort) => { if (typeof sort === 'string') { urlSearchParams.append('sort', sort); } else { let sortString = sort.property; if (sort.order) { sortString += ',' + sort.order; } if (sort.ignoreCase) { sortString += ',IgnoreCase'; } urlSearchParams.append('sort', sortString); } }); let pathString = pathParts?.join('/') || ''; if (pathString?.length) { pathString = '/' + pathString; } let queryString = urlSearchParams.toString(); if (queryString.length) { queryString = '?' + queryString; } return environment.apiBaseUrl + '/' + Endpoints[endpoint] + pathString + queryString; } }