import { Injectable } from '@angular/core'; import { Endpoints } from '../endpoints'; import { QueryParams } from '../model/Query.model'; @Injectable({ providedIn: 'root', }) export class EndpointService { public getUrl( endpoint: keyof typeof Endpoints, pathParams?: 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 = pathParams?.join('/') || ''; if (pathString?.length) { pathString = '/' + pathString; } let queryString = urlSearchParams.toString(); if (queryString.length) { queryString = '?' + queryString; } return `http://localhost:8080/${Endpoints[endpoint]}${pathString}${queryString}`; } }