join/src/app/services/api.service.ts

64 lines
1.8 KiB
TypeScript

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<T, B = unknown>(
method: string,
endpoint: string,
body?: B | null,
params?: Record<string, string | number>
): Observable<T> {
return this.http.request<T>(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<Task> {
return this.request<Task>('GET', `/api/tasks/${taskId}/`);
}
getTasksByStatus(status: string): Observable<Task[]> {
return this.request<Task[]>('GET', '/api/tasks/', undefined, { status });
}
updateTaskStatus(taskId: string, status: string): Observable<Task> {
return this.request<Task>('PUT', `/api/tasks/${taskId}/update_status/`, {
status,
});
}
// ------------- USERS ------------- //
getUserById(userId: string): Observable<User> {
return this.request<User>('GET', `/api/users/${userId}/`);
}
getUsersByIds(userIds: string[]): Observable<User[]> {
return this.request<User[]>('GET', '/api/users/', undefined, {
ids: userIds.join(','),
});
}
}