Files
listify/listify-client/src/app/templates/templates.service.ts
Bastian Wagner 85a43d1b08 template sharing
2026-06-18 11:18:10 +02:00

84 lines
2.4 KiB
TypeScript

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<ListTemplate[]> {
return this.http.get<ListTemplate[]>(this.apiUrl);
}
getTemplate(templateId: string): Observable<ListTemplate> {
return this.http.get<ListTemplate>(`${this.apiUrl}/${templateId}`);
}
createTemplate(data: CreateListTemplateRequest): Observable<ListTemplate> {
return this.http.post<ListTemplate>(this.apiUrl, data);
}
updateTemplate(
templateId: string,
data: UpdateListTemplateRequest,
): Observable<ListTemplate> {
return this.http.patch<ListTemplate>(`${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<ListTemplate> {
return this.http.post<ListTemplate>(`${this.apiUrl}/${templateId}/shares`, {
userId,
});
}
removeShare(templateId: string, userId: string): Observable<ListTemplate> {
return this.http.delete<ListTemplate>(
`${this.apiUrl}/${templateId}/shares/${userId}`,
);
}
createListFromTemplate(
templateId: string,
data: CreateListFromTemplateRequest = {},
): Observable<UserList> {
return this.http.post<UserList>(`${this.apiUrl}/${templateId}/lists`, data);
}
addItem(
templateId: string,
data: AddListTemplateItemRequest,
): Observable<ListTemplate> {
return this.http.post<ListTemplate>(`${this.apiUrl}/${templateId}/items`, data);
}
deleteItem(templateId: string, itemId: string): Observable<ListTemplate> {
return this.http.delete<ListTemplate>(
`${this.apiUrl}/${templateId}/items/${itemId}`,
);
}
reorderItems(
templateId: string,
data: ReorderListTemplateItemsRequest,
): Observable<ListTemplate> {
return this.http.patch<ListTemplate>(
`${this.apiUrl}/${templateId}/items/order`,
data,
);
}
}