49 lines
1.5 KiB
TypeScript
49 lines
1.5 KiB
TypeScript
import { Injectable } from '@angular/core';
|
|
import { Endpoints } from '../../endpoints';
|
|
import { QueryParams } from '../models/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}`;
|
|
}
|
|
}
|