meals-made-easy-app/src/app/shared/services/EndpointService.ts
2026-01-11 13:35:38 -06:00

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}`;
}
}