meals-made-easy-app/src/app/shared/services/EndpointService.ts

46 lines
1.6 KiB
TypeScript

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