import { HttpClient, HttpParams } from '@angular/common/http'; import { Injectable, inject } from '@angular/core'; import { Observable } from 'rxjs'; import { CITY_ENDPOINTS } from './city.endpoints'; import { CityDto, CreateCityRequest, UpdateCityRequest, UpdateCityStatusRequest } from '../models/city.model'; import { DataTableQuery, DataTableResult } from '../../../../shared/components/data-table/data-table.types'; @Injectable({ providedIn: 'root' }) export class CityService { private readonly http = inject(HttpClient); getCityDataTable( query: DataTableQuery, countryId: string | null = null, stateId: string | null = null ): Observable> { let params = new HttpParams(); if (countryId) params = params.set('countryId', countryId); if (stateId) params = params.set('stateId', stateId); return this.http.post>( CITY_ENDPOINTS.dataTable, query, { params } ); } createCity(request: CreateCityRequest): Observable { return this.http.post(CITY_ENDPOINTS.create, request); } updateCity(id: string, request: UpdateCityRequest): Observable { return this.http.put(CITY_ENDPOINTS.update(id), request); } updateStatus(id: string, request: UpdateCityStatusRequest): Observable { return this.http.patch(CITY_ENDPOINTS.changeStatus(id), request); } delete(id: string): Observable { return this.http.delete(CITY_ENDPOINTS.delete(id)); } getCityById(id: string): Observable { return this.http.get(CITY_ENDPOINTS.getById(id)); } }