import { HttpClient } from '@angular/common/http'; import { Injectable, inject } from '@angular/core'; import { Observable } from 'rxjs'; import { AddListTemplateItemRequest, CreateListFromTemplateRequest, CreateListTemplateRequest, ListTemplate, ReorderListTemplateItemsRequest, UpdateListTemplateRequest, UserList, } from './templates.models'; @Injectable({ providedIn: 'root' }) export class TemplatesService { private readonly http = inject(HttpClient); private readonly apiUrl = '/api/list-templates'; listTemplates(): Observable { return this.http.get(this.apiUrl); } getTemplate(templateId: string): Observable { return this.http.get(`${this.apiUrl}/${templateId}`); } createTemplate(data: CreateListTemplateRequest): Observable { return this.http.post(this.apiUrl, data); } updateTemplate( templateId: string, data: UpdateListTemplateRequest, ): Observable { return this.http.patch(`${this.apiUrl}/${templateId}`, data); } deleteTemplate(templateId: string): Observable<{ message: string }> { return this.http.delete<{ message: string }>(`${this.apiUrl}/${templateId}`); } shareTemplate(templateId: string, userId: string): Observable { return this.http.post(`${this.apiUrl}/${templateId}/shares`, { userId, }); } removeShare(templateId: string, userId: string): Observable { return this.http.delete( `${this.apiUrl}/${templateId}/shares/${userId}`, ); } createListFromTemplate( templateId: string, data: CreateListFromTemplateRequest = {}, ): Observable { return this.http.post(`${this.apiUrl}/${templateId}/lists`, data); } addItem( templateId: string, data: AddListTemplateItemRequest, ): Observable { return this.http.post(`${this.apiUrl}/${templateId}/items`, data); } deleteItem(templateId: string, itemId: string): Observable { return this.http.delete( `${this.apiUrl}/${templateId}/items/${itemId}`, ); } reorderItems( templateId: string, data: ReorderListTemplateItemsRequest, ): Observable { return this.http.patch( `${this.apiUrl}/${templateId}/items/order`, data, ); } }