2022-10-22 11:51:07 -08:00
|
|
|
import { BaseCRUDAPI } from "../base/base-clients";
|
|
|
|
import { ApiRequestInstance } from "~/lib/api/types/non-generated";
|
2022-01-16 15:24:24 -09:00
|
|
|
import {
|
2025-02-27 07:58:40 -06:00
|
|
|
ShoppingListAddRecipeParamsBulk,
|
2022-01-16 15:24:24 -09:00
|
|
|
ShoppingListCreate,
|
|
|
|
ShoppingListItemCreate,
|
|
|
|
ShoppingListItemOut,
|
2023-01-28 18:45:02 -06:00
|
|
|
ShoppingListItemUpdateBulk,
|
2023-02-21 21:58:41 -06:00
|
|
|
ShoppingListMultiPurposeLabelUpdate,
|
2022-01-16 15:24:24 -09:00
|
|
|
ShoppingListOut,
|
2022-05-21 21:22:02 +02:00
|
|
|
ShoppingListUpdate,
|
2024-08-22 10:14:32 -05:00
|
|
|
} from "~/lib/api/types/household";
|
2022-01-08 22:24:34 -09:00
|
|
|
|
|
|
|
const prefix = "/api";
|
|
|
|
|
|
|
|
const routes = {
|
2024-08-22 10:14:32 -05:00
|
|
|
shoppingLists: `${prefix}/households/shopping/lists`,
|
|
|
|
shoppingListsId: (id: string) => `${prefix}/households/shopping/lists/${id}`,
|
2025-02-27 07:58:40 -06:00
|
|
|
shoppingListIdAddRecipe: (id: string) => `${prefix}/households/shopping/lists/${id}/recipe`,
|
2024-08-22 10:14:32 -05:00
|
|
|
shoppingListIdRemoveRecipe: (id: string, recipeId: string) => `${prefix}/households/shopping/lists/${id}/recipe/${recipeId}/delete`,
|
|
|
|
shoppingListIdUpdateLabelSettings: (id: string) => `${prefix}/households/shopping/lists/${id}/label-settings`,
|
2022-01-16 15:24:24 -09:00
|
|
|
|
2024-08-22 10:14:32 -05:00
|
|
|
shoppingListItems: `${prefix}/households/shopping/items`,
|
|
|
|
shoppingListItemsCreateBulk: `${prefix}/households/shopping/items/create-bulk`,
|
|
|
|
shoppingListItemsId: (id: string) => `${prefix}/households/shopping/items/${id}`,
|
2022-01-08 22:24:34 -09:00
|
|
|
};
|
|
|
|
|
2022-05-21 21:22:02 +02:00
|
|
|
export class ShoppingListsApi extends BaseCRUDAPI<ShoppingListCreate, ShoppingListOut, ShoppingListUpdate> {
|
2022-01-16 15:24:24 -09:00
|
|
|
baseRoute = routes.shoppingLists;
|
|
|
|
itemRoute = routes.shoppingListsId;
|
2022-01-08 22:24:34 -09:00
|
|
|
|
2025-02-27 07:58:40 -06:00
|
|
|
async addRecipes(itemId: string, data: ShoppingListAddRecipeParamsBulk[]) {
|
|
|
|
return await this.requests.post(routes.shoppingListIdAddRecipe(itemId), data);
|
2022-01-16 15:24:24 -09:00
|
|
|
}
|
2022-01-08 22:24:34 -09:00
|
|
|
|
2022-12-31 01:09:22 -06:00
|
|
|
async removeRecipe(itemId: string, recipeId: string, recipeDecrementQuantity = 1) {
|
2023-02-19 19:20:32 -06:00
|
|
|
return await this.requests.post(routes.shoppingListIdRemoveRecipe(itemId, recipeId), { recipeDecrementQuantity });
|
2022-01-16 15:24:24 -09:00
|
|
|
}
|
2023-02-21 21:58:41 -06:00
|
|
|
|
|
|
|
async updateLabelSettings(itemId: string, listSettings: ShoppingListMultiPurposeLabelUpdate[]) {
|
|
|
|
return await this.requests.put(routes.shoppingListIdUpdateLabelSettings(itemId), listSettings);
|
|
|
|
}
|
2022-01-08 22:24:34 -09:00
|
|
|
}
|
|
|
|
|
2022-10-22 11:51:07 -08:00
|
|
|
export class ShoppingListItemsApi extends BaseCRUDAPI<
|
|
|
|
ShoppingListItemCreate,
|
|
|
|
ShoppingListItemOut,
|
2023-01-28 18:45:02 -06:00
|
|
|
ShoppingListItemUpdateBulk
|
2022-10-22 11:51:07 -08:00
|
|
|
> {
|
2022-01-16 15:24:24 -09:00
|
|
|
baseRoute = routes.shoppingListItems;
|
|
|
|
itemRoute = routes.shoppingListItemsId;
|
2022-01-08 22:24:34 -09:00
|
|
|
|
2024-06-29 04:58:58 -05:00
|
|
|
async createMany(items: ShoppingListItemCreate[]) {
|
|
|
|
return await this.requests.post(routes.shoppingListItemsCreateBulk, items);
|
|
|
|
}
|
|
|
|
|
2022-01-16 15:24:24 -09:00
|
|
|
async updateMany(items: ShoppingListItemOut[]) {
|
|
|
|
return await this.requests.put(routes.shoppingListItems, items);
|
|
|
|
}
|
2022-01-08 22:24:34 -09:00
|
|
|
|
2022-01-16 15:24:24 -09:00
|
|
|
async deleteMany(items: ShoppingListItemOut[]) {
|
|
|
|
let query = "?";
|
|
|
|
|
|
|
|
items.forEach((item) => {
|
|
|
|
query += `ids=${item.id}&`;
|
|
|
|
});
|
|
|
|
|
|
|
|
return await this.requests.delete(routes.shoppingListItems + query);
|
2022-01-08 22:24:34 -09:00
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
export class ShoppingApi {
|
|
|
|
public lists: ShoppingListsApi;
|
2022-01-16 15:24:24 -09:00
|
|
|
public items: ShoppingListItemsApi;
|
2022-01-08 22:24:34 -09:00
|
|
|
|
|
|
|
constructor(requests: ApiRequestInstance) {
|
|
|
|
this.lists = new ShoppingListsApi(requests);
|
2022-01-16 15:24:24 -09:00
|
|
|
this.items = new ShoppingListItemsApi(requests);
|
2022-01-08 22:24:34 -09:00
|
|
|
}
|
|
|
|
}
|