84 lines
2.4 KiB
TypeScript
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,
|
|
);
|
|
}
|
|
}
|