import { AxiosProgressEvent } from 'axios'; import { BaseService, BaseServiceOptions } from '../api'; import { PagedRequest, PagedResponse } from '../common/interfaces/pagination'; import { AddIngredientsRequest, Allergen, AllergenDietaryRequest, DeleteIngredientsRequest, Dietary, GetIngredientsRequest, GetMenuItemMapRequest, GetMenuItemRequest, GetMenuRequest, Ingredient, Menu, MenuExportRequest, MenuItem, MenuItemAllergen, MenuItemDietary, MenuItemMap, MenuItemMapRequest, MenuItemRequest, MenuRequest, MenuUpdateRequest, UpdateIngredientsRequest, UpdateMenuItemRequest, } from './menu.service.interfaces'; export class MenuService extends BaseService { protected menuApiUrl: string; protected menuItemApiUrl: string; constructor(opts: BaseServiceOptions) { super(opts); this.menuApiUrl = `${this.apiUrl}/assets/v1/menus`; this.menuItemApiUrl = `${this.apiUrl}/assets/v1/menu-items`; } getMenu(req: PagedRequest) { return this.get>(this.menuApiUrl, req); } addMenu(req: MenuRequest) { return this.post(this.menuApiUrl, req); } getMenuById(id: string) { return this.get(`${this.menuApiUrl}/${id}`); } updateMenu(req: MenuUpdateRequest) { return this.put(`${this.menuApiUrl}/${req.id}`, req); } deleteMenu(id: string) { return this.patch(`${this.menuApiUrl}/${id}/archive`, {}); } getMenuItems(req: PagedRequest) { return this.get>(this.menuItemApiUrl, req); } addMenuItems(req: MenuItemRequest) { return this.post(this.menuItemApiUrl, req); } getAllergen(req: PagedRequest) { return this.get>(`${this.menuItemApiUrl}/allergens`, req); } getDietary(req: PagedRequest) { return this.get>(`${this.menuItemApiUrl}/dietaries`, req); } getMenuItemsById(req: { id: string }) { return this.get(`${this.menuItemApiUrl}/${req.id}`); } updateMenuItem(req: UpdateMenuItemRequest) { return this.put(`${this.menuItemApiUrl}/${req.id}`, req); } deleteMenuItem(req: { id: string }) { return this.patch(`${this.menuItemApiUrl}/${req.id}/archive`, {}); } getMenuItemMap(req: PagedRequest) { return this.get>(`${this.menuItemApiUrl}/menu-item-map`, req); } addMenuItemMap(req: MenuItemMapRequest) { return this.post(`${this.menuItemApiUrl}/menu-item-map`, req); } updateMenuItemMap(req: MenuItemMapRequest) { return this.put(`${this.menuItemApiUrl}/menu-item-map`, req); } deleteMenuItemMap(req: { menuId: string; menuItemId: string }) { return this.delete(`${this.menuItemApiUrl}/${req.menuId}/menu-item-map/${req.menuItemId}`); } getMenuItemAllergen(req: PagedRequest<{ menuItemId: string }>) { return this.get>(`${this.menuItemApiUrl}/menu-item-allergens`, req); } addMenuItemAllergen(req: AllergenDietaryRequest) { return this.post(`${this.menuItemApiUrl}/menu-item-allergens`, req); } updateMenuItemAllergen(req: AllergenDietaryRequest) { return this.put(`${this.menuItemApiUrl}/menu-item-allergens`, req); } getMenuItemDietary(req: PagedRequest<{ menuItemId: string }>) { return this.get>(`${this.menuItemApiUrl}/menu-item-dietaries`, req); } addMenuItemDietary(req: AllergenDietaryRequest) { return this.post(`${this.menuItemApiUrl}/menu-item-dietaries`, req); } updateMenuItemDietary(req: AllergenDietaryRequest) { return this.put(`${this.menuItemApiUrl}/menu-item-dietaries`, req); } getMenuItemIngredients(req: GetIngredientsRequest) { return this.get>(`${this.menuItemApiUrl}/menu-item-ingredients`, req); } addMenuItemIngredients(req: AddIngredientsRequest) { return this.post(`${this.menuItemApiUrl}/menu-item-ingredients`, req); } updateMenuItemIngredients(req: UpdateIngredientsRequest) { return this.put(`${this.menuItemApiUrl}/menu-item-ingredients`, req); } deleteMenuItemIngredients(req: DeleteIngredientsRequest) { return this.delete(`${this.menuItemApiUrl}/${req.typeId}/menu-item-ingredients/${req.menuItemId}`); } menuExportById(req: MenuExportRequest, onProgress: (progressEvent: AxiosProgressEvent) => void) { return this.get(`${this.menuApiUrl}/export-menu`, req, { onDownloadProgress: onProgress }); } }