import { Injectable, signal } from '@angular/core'; import { HttpClient, HttpHeaders } from '@angular/common/http'; import { Observable } from 'rxjs'; import { apiConfig } from '../environments/config'; import { Task } from '../interfaces/task.interface'; import { User } from '../interfaces/user.interface'; import { TokenService } from './token.service'; @Injectable({ providedIn: 'root', }) export class ApiService { private readonly apiUrl = apiConfig.apiUrl; constructor(private http: HttpClient, private tokenService: TokenService) {} request( method: string, endpoint: string, body?: B | null, params?: Record ): Observable { return this.http.request(method, `${this.apiUrl}${endpoint}`, { body, params, headers: this.getHeaders(), }); } private getHeaders(): HttpHeaders { const token = this.tokenService.getAuthToken(); return token ? new HttpHeaders().set('Authorization', `Token ${token}`) : new HttpHeaders(); } // ------------- TASKS ------------- // getTaskById(taskId: string): Observable { return this.request('GET', `/api/tasks/${taskId}/`); } getTasksByStatus(status: string): Observable { return this.request('GET', '/api/tasks/', undefined, { status }); } updateTaskStatus(taskId: string, status: string): Observable { return this.request('PUT', `/api/tasks/${taskId}/update_status/`, { status, }); } // ------------- USERS ------------- // getUserById(userId: string): Observable { return this.request('GET', `/api/users/${userId}/`); } getUsersByIds(userIds: string[]): Observable { return this.request('GET', '/api/users/', undefined, { ids: userIds.join(','), }); } }