import { Injectable, inject } from "@angular/core"; import { firstValueFrom } from "rxjs"; import type { Suggestion, SuggestionStatus, SuggestionEntity, CreateSuggestionDto, DeclineSuggestionDto, } from "@library/shared-types"; import { ApiService } from "./api.service"; @Injectable({ providedIn: "root", }) export class SuggestionService { private api = inject(ApiService); async getAllSuggestions(filters?: { status?: SuggestionStatus; entityType?: SuggestionEntity; }): Promise { const params = new URLSearchParams(); if (filters?.status) { params.set("status", filters.status); } if (filters?.entityType) { params.set("entityType", filters.entityType); } const queryString = params.toString(); const url = queryString ? `/suggestions?${queryString}` : "/suggestions"; return firstValueFrom(this.api.get(url)); } async getMySuggestions(): Promise { return firstValueFrom(this.api.get("/suggestions/my")); } async getSuggestionById(id: string): Promise { return firstValueFrom(this.api.get(`/suggestions/${id}`)); } async createSuggestion(data: CreateSuggestionDto): Promise { return firstValueFrom(this.api.post("/suggestions", data)); } async acceptSuggestion(id: string): Promise { return firstValueFrom(this.api.put(`/suggestions/${id}/accept`, {})); } async acceptSuggestionWithEdits(id: string, data: any): Promise { return firstValueFrom(this.api.put(`/suggestions/${id}/accept-with-edits`, data)); } async declineSuggestion(id: string, data: DeclineSuggestionDto): Promise { return firstValueFrom(this.api.put(`/suggestions/${id}/decline`, data)); } }