diff --git a/src/api/types.ts b/src/api/types.ts index 35463fc..e407863 100644 --- a/src/api/types.ts +++ b/src/api/types.ts @@ -4,7 +4,7 @@ */ export interface paths { - "/api/v1/products": { + "/api/v1/auth/register": { parameters: { query?: never; header?: never; @@ -13,269 +13,8 @@ export interface paths { }; get?: never; put?: never; - /** Create or fetch a product from a URL */ - post: operations["createProduct"]; - delete?: never; - options?: never; - head?: never; - patch?: never; - trace?: never; - }; - "/api/v1/recipes/parse": { - parameters: { - query?: never; - header?: never; - path?: never; - cookie?: never; - }; - /** Parse a recipe from a URL */ - get: operations["parseRecipe"]; - put?: never; - post?: never; - delete?: never; - options?: never; - head?: never; - patch?: never; - trace?: never; - }; - "/api/v1/recipes/ingredients/parse": { - parameters: { - query?: never; - header?: never; - path?: never; - cookie?: never; - }; - /** Parse raw ingredient lines */ - get: operations["parseIngredients"]; - put?: never; - post?: never; - delete?: never; - options?: never; - head?: never; - patch?: never; - trace?: never; - }; - "/api/v1/recipes": { - parameters: { - query?: never; - header?: never; - path?: never; - cookie?: never; - }; - /** List recipes (paginated) */ - get: operations["listRecipes"]; - put?: never; - /** Create a new recipe (versioning semantics applied) */ - post: operations["createRecipe"]; - delete?: never; - options?: never; - head?: never; - patch?: never; - trace?: never; - }; - "/api/v1/recipes/{recipe_id}": { - parameters: { - query?: never; - header?: never; - path?: never; - cookie?: never; - }; - /** Get a single recipe */ - get: operations["getRecipe"]; - put?: never; - post?: never; - /** Soft-delete (hide) a recipe */ - delete: operations["deleteRecipe"]; - options?: never; - head?: never; - patch?: never; - trace?: never; - }; - "/api/v1/meals/upcoming": { - parameters: { - query?: never; - header?: never; - path?: never; - cookie?: never; - }; - /** List upcoming meals in a date range */ - get: operations["getUpcomingMeals"]; - put?: never; - post?: never; - delete?: never; - options?: never; - head?: never; - patch?: never; - trace?: never; - }; - "/api/v1/meals/{meal_id}": { - parameters: { - query?: never; - header?: never; - path?: never; - cookie?: never; - }; - /** Get a meal by id */ - get: operations["getMeal"]; - /** Update an existing meal */ - put: operations["updateMeal"]; - post?: never; - /** Delete a meal */ - delete: operations["deleteMeal"]; - options?: never; - head?: never; - patch?: never; - trace?: never; - }; - "/api/v1/meals": { - parameters: { - query?: never; - header?: never; - path?: never; - cookie?: never; - }; - get?: never; - put?: never; - /** Create a new meal */ - post: operations["createMeal"]; - delete?: never; - options?: never; - head?: never; - patch?: never; - trace?: never; - }; - "/api/v1/meals/{meal_id}/consumed": { - parameters: { - query?: never; - header?: never; - path?: never; - cookie?: never; - }; - get?: never; - put?: never; - /** Mark a meal as consumed */ - post: operations["markMealConsumed"]; - delete?: never; - options?: never; - head?: never; - patch?: never; - trace?: never; - }; - "/api/v1/shopping/current": { - parameters: { - query?: never; - header?: never; - path?: never; - cookie?: never; - }; - /** Get the current aggregated shopping list */ - get: operations["getCurrentShoppingList"]; - put?: never; - post?: never; - delete?: never; - options?: never; - head?: never; - patch?: never; - trace?: never; - }; - "/api/v1/shopping/{list_id}": { - parameters: { - query?: never; - header?: never; - path?: never; - cookie?: never; - }; - /** Get a purchased shopping list by id */ - get: operations["getShoppingList"]; - put?: never; - post?: never; - delete?: never; - options?: never; - head?: never; - patch?: never; - trace?: never; - }; - "/api/v1/shopping": { - parameters: { - query?: never; - header?: never; - path?: never; - cookie?: never; - }; - get?: never; - put?: never; - /** Purchase ingredients for a shopping list */ - post: operations["purchaseIngredients"]; - delete?: never; - options?: never; - head?: never; - patch?: never; - trace?: never; - }; - "/api/v1/shopping/current/me/ingredients": { - parameters: { - query?: never; - header?: never; - path?: never; - cookie?: never; - }; - /** Get my outstanding ingredient requests */ - get: operations["getMyShoppingList"]; - put?: never; - /** Sync my outstanding ingredient requests */ - post: operations["syncMyShoppingList"]; - delete?: never; - options?: never; - head?: never; - patch?: never; - trace?: never; - }; - "/api/v1/shopping/current/meals/me": { - parameters: { - query?: never; - header?: never; - path?: never; - cookie?: never; - }; - get?: never; - put?: never; - /** Request a meal for shopping */ - post: operations["requestMeal"]; - delete?: never; - options?: never; - head?: never; - patch?: never; - trace?: never; - }; - "/api/v1/shopping/current/meals/{meal_id}": { - parameters: { - query?: never; - header?: never; - path?: never; - cookie?: never; - }; - get?: never; - put?: never; - post?: never; - /** Remove a meal request */ - delete: operations["unrequestMeal"]; - options?: never; - head?: never; - patch?: never; - trace?: never; - }; - "/api/v1/persons": { - parameters: { - query?: never; - header?: never; - path?: never; - cookie?: never; - }; - /** List persons (paginated) */ - get: operations["listPersons"]; - put?: never; - /** Create a person */ - post: operations["createPerson"]; + /** Register */ + post: operations["register"]; delete?: never; options?: never; head?: never; @@ -308,15 +47,15 @@ export interface paths { }; get?: never; put?: never; - /** Refresh current user from cookie */ - post: operations["refresh"]; + /** Refresh */ + post: operations["refreshV2"]; delete?: never; options?: never; head?: never; patch?: never; trace?: never; }; - "/api/v1/auth/register": { + "/api/v1/auth/logout": { parameters: { query?: never; header?: never; @@ -325,8 +64,8 @@ export interface paths { }; get?: never; put?: never; - /** Register */ - post: operations["register"]; + /** Logout */ + post: operations["logoutV2"]; delete?: never; options?: never; head?: never; @@ -367,6 +106,248 @@ export interface paths { patch?: never; trace?: never; }; + "/api/v1/invitations/accept": { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + get?: never; + put?: never; + /** Accept Invitation */ + post: operations["accept_invitation_api_v1_invitations_accept_post"]; + delete?: never; + options?: never; + head?: never; + patch?: never; + trace?: never; + }; + "/api/v1/households/{householdSlug}/whoami": { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + /** Whoami */ + get: operations["whoami_api_v1_households__householdSlug__whoami_get"]; + put?: never; + post?: never; + delete?: never; + options?: never; + head?: never; + patch?: never; + trace?: never; + }; + "/api/v1/households/{householdSlug}/invitations": { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + get?: never; + put?: never; + /** Create Invitation */ + post: operations["create_invitation_api_v1_households__householdSlug__invitations_post"]; + delete?: never; + options?: never; + head?: never; + patch?: never; + trace?: never; + }; + "/api/v1/households/{householdSlug}/recipes": { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + /** List Recipes */ + get: operations["list_recipes_api_v1_households__householdSlug__recipes_get"]; + put?: never; + /** Create Recipe */ + post: operations["create_recipe_api_v1_households__householdSlug__recipes_post"]; + delete?: never; + options?: never; + head?: never; + patch?: never; + trace?: never; + }; + "/api/v1/households/{householdSlug}/recipes/{recipe_id}": { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + /** Get Recipe */ + get: operations["get_recipe_api_v1_households__householdSlug__recipes__recipe_id__get"]; + put?: never; + post?: never; + /** Delete Recipe */ + delete: operations["delete_recipe_api_v1_households__householdSlug__recipes__recipe_id__delete"]; + options?: never; + head?: never; + patch?: never; + trace?: never; + }; + "/api/v1/households/{householdSlug}/meals/upcoming": { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + /** List upcoming meals in a date range (scoped) */ + get: operations["getUpcomingMealsV2"]; + put?: never; + post?: never; + delete?: never; + options?: never; + head?: never; + patch?: never; + trace?: never; + }; + "/api/v1/households/{householdSlug}/meals/{meal_id}": { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + /** Get a meal by id (scoped) */ + get: operations["getMealV2"]; + /** Update an existing meal (scoped) */ + put: operations["updateMealV2"]; + post?: never; + /** Delete a meal (scoped) */ + delete: operations["deleteMealV2"]; + options?: never; + head?: never; + patch?: never; + trace?: never; + }; + "/api/v1/households/{householdSlug}/meals/{meal_id}/consumed": { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + get?: never; + put?: never; + /** Mark a meal as consumed (scoped) */ + post: operations["markMealConsumedV2"]; + delete?: never; + options?: never; + head?: never; + patch?: never; + trace?: never; + }; + "/api/v1/households/{householdSlug}/meals": { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + get?: never; + put?: never; + /** Create a new meal (scoped) */ + post: operations["createMealV2"]; + delete?: never; + options?: never; + head?: never; + patch?: never; + trace?: never; + }; + "/api/v1/households/{householdSlug}/shopping/current": { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + /** Get the current aggregated shopping list (scoped) */ + get: operations["getCurrentShoppingListV2"]; + put?: never; + post?: never; + delete?: never; + options?: never; + head?: never; + patch?: never; + trace?: never; + }; + "/api/v1/households/{householdSlug}/shopping/{list_id}": { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + /** Get a purchased shopping list by id (scoped) */ + get: operations["getShoppingListV2"]; + put?: never; + post?: never; + delete?: never; + options?: never; + head?: never; + patch?: never; + trace?: never; + }; + "/api/v1/households/{householdSlug}/shopping": { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + get?: never; + put?: never; + /** Purchase ingredients for a shopping list (scoped) */ + post: operations["purchaseIngredientsV2"]; + delete?: never; + options?: never; + head?: never; + patch?: never; + trace?: never; + }; + "/api/v1/households/{householdSlug}/shopping/current/meals/me": { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + get?: never; + put?: never; + /** Request a meal for shopping (scoped) */ + post: operations["requestMealV2"]; + delete?: never; + options?: never; + head?: never; + patch?: never; + trace?: never; + }; + "/api/v1/households/{householdSlug}/shopping/current/meals/{meal_id}": { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + get?: never; + put?: never; + post?: never; + /** Remove a meal request (scoped) */ + delete: operations["unrequestMealV2"]; + options?: never; + head?: never; + patch?: never; + trace?: never; + }; "/healthz": { parameters: { query?: never; @@ -393,6 +374,11 @@ export interface components { /** Name */ name: string; }; + /** CreateInvitationBody */ + CreateInvitationBody: { + /** Email */ + email: string; + }; /** CurrentShoppingList */ CurrentShoppingList: { /** Outstandingitems */ @@ -482,6 +468,16 @@ export interface components { /** Recipeid */ recipeId?: number | null; }; + /** InvitationResponse */ + InvitationResponse: { + /** Token */ + token: string; + /** + * Status + * @default pending + */ + status: string; + }; /** ListIngredientItem */ ListIngredientItem: { /** @@ -512,6 +508,18 @@ export interface components { /** Recipeid */ recipeId?: number | null; }; + /** LoginBody */ + LoginBody: { + /** Email */ + email: string; + /** Password */ + password: string; + }; + /** MarkConsumedBody */ + MarkConsumedBody: { + /** Consumeddate */ + consumedDate?: string | null; + }; /** Meal */ "Meal-Input": { /** @@ -571,33 +579,6 @@ export interface components { /** Mealid */ mealId: number; }; - /** MealOut */ - MealOut: { - /** - * Id - * @default -1 - */ - id: number; - /** - * Suggesteddate - * Format: date-time - */ - suggestedDate: string; - /** Consumeddate */ - consumedDate?: string | null; - /** Chefs */ - chefs: components["schemas"]["Person"][]; - /** Cleanup */ - cleanup: components["schemas"]["Person"][]; - /** Consumers */ - consumers: components["schemas"]["Person"][]; - /** Recipes */ - recipes: components["schemas"]["MealRecipe-Output"][]; - /** Extraingredients */ - extraIngredients: components["schemas"]["Ingredient"][]; - /** Purchasedate */ - purchaseDate?: string | null; - }; /** MealRecipe */ "MealRecipe-Input": { /** Mealid */ @@ -626,21 +607,6 @@ export interface components { */ ok: boolean; }; - /** Page[Person] */ - Page_Person_: { - /** Items */ - items: components["schemas"]["Person"][]; - /** Nextcursor */ - nextCursor?: string | null; - /** Prevcursor */ - prevCursor?: string | null; - /** - * Total - * @description Total count - * @default 0 - */ - total: number; - }; /** Page[RecipeOut] */ Page_RecipeOut_: { /** Items */ @@ -708,13 +674,6 @@ export interface components { /** Imglarge */ imgLarge: string; }; - /** ProductUrl */ - ProductUrl: { - /** Url */ - url: string; - /** Tags */ - tags?: string[]; - }; /** PurchaseListIn */ PurchaseListIn: { storeName: components["schemas"]["StoreNameOut"]; @@ -803,6 +762,19 @@ export interface components { hiddenById?: number | null; hiddenBy?: components["schemas"]["Person"] | null; }; + /** RecipeCreate */ + RecipeCreate: { + /** Name */ + name: string; + /** Link */ + link: string; + /** Serves */ + serves: number; + /** Imageurls */ + imageUrls: string[]; + /** Ingredients */ + ingredients: components["schemas"]["Ingredient"][]; + }; /** RecipeOut */ RecipeOut: { /** @@ -820,21 +792,16 @@ export interface components { imageUrls: string[]; /** Ingredients */ ingredients: components["schemas"]["Ingredient"][]; - /** Basedonrecipe */ - basedOnRecipe?: number | null; + }; + /** RefreshResponse */ + RefreshResponse: { + /** Accesstoken */ + accessToken: string; /** - * Datecreated - * Format: date-time + * Tokentype + * @default bearer */ - dateCreated: string; - /** Createdbyid */ - createdById: number; - createdBy?: components["schemas"]["Person"] | null; - /** Datehidden */ - dateHidden?: string | null; - /** Hiddenbyid */ - hiddenById?: number | null; - hiddenBy?: components["schemas"]["Person"] | null; + tokenType: string; }; /** RegisterBody */ RegisterBody: { @@ -928,17 +895,12 @@ export interface components { /** Error Type */ type: string; }; - /** LoginBody */ - api__auth__LoginBody: { - /** Username */ - username: string; - }; - /** LoginBody */ - api__auth_v2__LoginBody: { - /** Email */ - email: string; - /** Password */ - password: string; + /** WhoAmI */ + WhoAmI: { + /** Householdid */ + householdId: number; + /** Householdslug */ + householdSlug: string; }; /** * StoreNameOut @@ -977,6 +939,16 @@ export interface components { "application/json": components["schemas"]["ProblemDetails"]; }; }; + /** @description Forbidden */ + Problem403: { + headers: { + [name: string]: unknown; + }; + content: { + "application/problem+json": unknown; + "application/json": components["schemas"]["ProblemDetails"]; + }; + }; }; parameters: never; requestBodies: never; @@ -985,846 +957,6 @@ export interface components { } export type $defs = Record; export interface operations { - createProduct: { - parameters: { - query?: never; - header?: never; - path?: never; - cookie?: never; - }; - requestBody: { - content: { - "application/json": components["schemas"]["ProductUrl"]; - }; - }; - responses: { - /** @description Successful Response */ - 200: { - headers: { - [name: string]: unknown; - }; - content: { - "application/json": components["schemas"]["Product"]; - }; - }; - /** @description Validation Error */ - 422: { - headers: { - [name: string]: unknown; - }; - content: { - "application/json": components["schemas"]["HTTPValidationError"]; - }; - }; - }; - }; - parseRecipe: { - parameters: { - query: { - url: string; - }; - header?: never; - path?: never; - cookie: { - user_id: number; - }; - }; - requestBody?: never; - responses: { - /** @description Successful Response */ - 200: { - headers: { - [name: string]: unknown; - }; - content: { - "application/json": components["schemas"]["RecipeOut"]; - }; - }; - 400: components["responses"]["Problem400"]; - /** @description Validation Error */ - 422: { - headers: { - [name: string]: unknown; - }; - content: { - "application/json": components["schemas"]["HTTPValidationError"]; - }; - }; - }; - }; - parseIngredients: { - parameters: { - query: { - ingredients: string[]; - }; - header?: never; - path?: never; - cookie?: never; - }; - requestBody?: never; - responses: { - /** @description Successful Response */ - 200: { - headers: { - [name: string]: unknown; - }; - content: { - "application/json": components["schemas"]["Ingredient"][]; - }; - }; - /** @description Validation Error */ - 422: { - headers: { - [name: string]: unknown; - }; - content: { - "application/json": components["schemas"]["HTTPValidationError"]; - }; - }; - }; - }; - listRecipes: { - parameters: { - query?: { - /** @description Optional case-insensitive name filter (matches recipe name with SQL LIKE). */ - q?: string | null; - /** @description Opaque cursor for pagination. Pass the value returned in nextCursor to fetch the next page. */ - cursor?: string | null; - /** @description Maximum number of items to return (1-200). */ - limit?: number; - }; - header?: never; - path?: never; - cookie?: never; - }; - requestBody?: never; - responses: { - /** @description A page of recipes */ - 200: { - headers: { - [name: string]: unknown; - }; - content: { - /** - * @example { - * "items": [ - * { - * "id": 1, - * "name": "Example Recipe", - * "link": "https://example.com/recipes/1", - * "serves": 4, - * "imageUrls": [], - * "ingredients": [] - * } - * ], - * "nextCursor": "2", - * "prevCursor": "0", - * "total": 1 - * } - */ - "application/json": components["schemas"]["Page_RecipeOut_"]; - }; - }; - /** @description Validation Error */ - 422: { - headers: { - [name: string]: unknown; - }; - content: { - "application/json": components["schemas"]["HTTPValidationError"]; - }; - }; - }; - }; - createRecipe: { - parameters: { - query?: never; - header?: never; - path?: never; - cookie: { - user_id: number; - }; - }; - requestBody: { - content: { - "application/json": components["schemas"]["Recipe-Input"]; - }; - }; - responses: { - /** @description Successful Response */ - 200: { - headers: { - [name: string]: unknown; - }; - content: { - "application/json": components["schemas"]["RecipeOut"]; - }; - }; - 400: components["responses"]["Problem400"]; - /** @description Validation Error */ - 422: { - headers: { - [name: string]: unknown; - }; - content: { - "application/json": components["schemas"]["HTTPValidationError"]; - }; - }; - }; - }; - getRecipe: { - parameters: { - query?: never; - header?: never; - path: { - recipe_id: number; - }; - cookie?: never; - }; - requestBody?: never; - responses: { - /** @description Successful Response */ - 200: { - headers: { - [name: string]: unknown; - }; - content: { - "application/json": components["schemas"]["RecipeOut"]; - }; - }; - 404: components["responses"]["Problem404"]; - /** @description Validation Error */ - 422: { - headers: { - [name: string]: unknown; - }; - content: { - "application/json": components["schemas"]["HTTPValidationError"]; - }; - }; - }; - }; - deleteRecipe: { - parameters: { - query?: never; - header?: never; - path: { - recipe_id: number; - }; - cookie: { - user_id: number; - }; - }; - requestBody?: never; - responses: { - /** @description Successful Response */ - 200: { - headers: { - [name: string]: unknown; - }; - content: { - "application/json": components["schemas"]["Recipe-Output"]; - }; - }; - 404: components["responses"]["Problem404"]; - /** @description Validation Error */ - 422: { - headers: { - [name: string]: unknown; - }; - content: { - "application/json": components["schemas"]["HTTPValidationError"]; - }; - }; - }; - }; - getUpcomingMeals: { - parameters: { - query: { - from: string; - to: string; - }; - header?: never; - path?: never; - cookie?: never; - }; - requestBody?: never; - responses: { - /** @description Successful Response */ - 200: { - headers: { - [name: string]: unknown; - }; - content: { - "application/json": components["schemas"]["Meal-Output"][]; - }; - }; - /** @description Validation Error */ - 422: { - headers: { - [name: string]: unknown; - }; - content: { - "application/json": components["schemas"]["HTTPValidationError"]; - }; - }; - }; - }; - getMeal: { - parameters: { - query?: never; - header?: never; - path: { - meal_id: number; - }; - cookie?: never; - }; - requestBody?: never; - responses: { - /** @description Successful Response */ - 200: { - headers: { - [name: string]: unknown; - }; - content: { - "application/json": components["schemas"]["MealOut"]; - }; - }; - 404: components["responses"]["Problem404"]; - /** @description Validation Error */ - 422: { - headers: { - [name: string]: unknown; - }; - content: { - "application/json": components["schemas"]["HTTPValidationError"]; - }; - }; - }; - }; - updateMeal: { - parameters: { - query?: never; - header?: never; - path: { - meal_id: number; - }; - cookie?: never; - }; - requestBody: { - content: { - "application/json": components["schemas"]["Meal-Input"]; - }; - }; - responses: { - /** @description Successful Response */ - 200: { - headers: { - [name: string]: unknown; - }; - content: { - "application/json": components["schemas"]["MealOut"]; - }; - }; - 400: components["responses"]["Problem400"]; - 404: components["responses"]["Problem404"]; - /** @description Validation Error */ - 422: { - headers: { - [name: string]: unknown; - }; - content: { - "application/json": components["schemas"]["HTTPValidationError"]; - }; - }; - }; - }; - deleteMeal: { - parameters: { - query?: never; - header?: never; - path: { - meal_id: number; - }; - cookie: { - user_id: number; - }; - }; - requestBody?: never; - responses: { - /** @description Successful Response */ - 200: { - headers: { - [name: string]: unknown; - }; - content: { - "application/json": components["schemas"]["MealOut"]; - }; - }; - 404: components["responses"]["Problem404"]; - /** @description Validation Error */ - 422: { - headers: { - [name: string]: unknown; - }; - content: { - "application/json": components["schemas"]["HTTPValidationError"]; - }; - }; - }; - }; - createMeal: { - parameters: { - query?: never; - header?: never; - path?: never; - cookie?: never; - }; - requestBody: { - content: { - "application/json": components["schemas"]["Meal-Input"]; - }; - }; - responses: { - /** @description Successful Response */ - 200: { - headers: { - [name: string]: unknown; - }; - content: { - "application/json": components["schemas"]["MealOut"]; - }; - }; - 400: components["responses"]["Problem400"]; - /** @description Validation Error */ - 422: { - headers: { - [name: string]: unknown; - }; - content: { - "application/json": components["schemas"]["HTTPValidationError"]; - }; - }; - }; - }; - markMealConsumed: { - parameters: { - query?: { - consumed_date?: string | null; - }; - header?: never; - path: { - meal_id: number; - }; - cookie: { - user_id: number; - }; - }; - requestBody?: never; - responses: { - /** @description Successful Response */ - 200: { - headers: { - [name: string]: unknown; - }; - content: { - "application/json": components["schemas"]["MealOut"]; - }; - }; - 400: components["responses"]["Problem400"]; - 404: components["responses"]["Problem404"]; - /** @description Validation Error */ - 422: { - headers: { - [name: string]: unknown; - }; - content: { - "application/json": components["schemas"]["HTTPValidationError"]; - }; - }; - }; - }; - getCurrentShoppingList: { - parameters: { - query?: never; - header?: never; - path?: never; - cookie?: never; - }; - requestBody?: never; - responses: { - /** @description Successful Response */ - 200: { - headers: { - [name: string]: unknown; - }; - content: { - "application/json": components["schemas"]["CurrentShoppingList"]; - }; - }; - 422: components["responses"]["Problem422"]; - }; - }; - getShoppingList: { - parameters: { - query?: never; - header?: never; - path: { - list_id: number; - }; - cookie?: never; - }; - requestBody?: never; - responses: { - /** @description Successful Response */ - 200: { - headers: { - [name: string]: unknown; - }; - content: { - "application/json": components["schemas"]["PurchasedShoppingList"]; - }; - }; - 404: components["responses"]["Problem404"]; - /** @description Validation Error */ - 422: { - headers: { - [name: string]: unknown; - }; - content: { - "application/json": components["schemas"]["HTTPValidationError"]; - }; - }; - }; - }; - purchaseIngredients: { - parameters: { - query?: never; - header?: never; - path?: never; - cookie: { - user_id: number; - }; - }; - requestBody: { - content: { - "application/json": components["schemas"]["PurchaseListIn"]; - }; - }; - responses: { - /** @description Successful Response */ - 200: { - headers: { - [name: string]: unknown; - }; - content: { - "application/json": components["schemas"]["PurchasedShoppingList"]; - }; - }; - 400: components["responses"]["Problem400"]; - /** @description Unauthorized (invalid or unknown user) */ - 401: { - headers: { - [name: string]: unknown; - }; - content: { - "application/problem+json": unknown; - "application/json": components["schemas"]["ProblemDetails"]; - }; - }; - /** @description Validation Error */ - 422: { - headers: { - [name: string]: unknown; - }; - content: { - "application/json": components["schemas"]["HTTPValidationError"]; - }; - }; - }; - }; - getMyShoppingList: { - parameters: { - query?: never; - header?: never; - path?: never; - cookie: { - user_id: number; - }; - }; - requestBody?: never; - responses: { - /** @description Successful Response */ - 200: { - headers: { - [name: string]: unknown; - }; - content: { - "application/json": components["schemas"]["Ingredient"][]; - }; - }; - /** @description Validation Error */ - 422: { - headers: { - [name: string]: unknown; - }; - content: { - "application/json": components["schemas"]["HTTPValidationError"]; - }; - }; - }; - }; - syncMyShoppingList: { - parameters: { - query?: never; - header?: never; - path?: never; - cookie: { - user_id: number; - }; - }; - requestBody: { - content: { - "application/json": components["schemas"]["Ingredient"][]; - }; - }; - responses: { - /** @description Successful Response */ - 200: { - headers: { - [name: string]: unknown; - }; - content: { - "application/json": components["schemas"]["Ingredient"][]; - }; - }; - /** @description Validation Error */ - 422: { - headers: { - [name: string]: unknown; - }; - content: { - "application/json": components["schemas"]["HTTPValidationError"]; - }; - }; - }; - }; - requestMeal: { - parameters: { - query?: never; - header?: never; - path?: never; - cookie: { - user_id: number; - }; - }; - requestBody: { - content: { - "application/json": components["schemas"]["MealIdWrapper"]; - }; - }; - responses: { - /** @description Successful Response */ - 200: { - headers: { - [name: string]: unknown; - }; - content: { - "application/json": components["schemas"]["RequestedMealItem"]; - }; - }; - 404: components["responses"]["Problem404"]; - /** @description Validation Error */ - 422: { - headers: { - [name: string]: unknown; - }; - content: { - "application/json": components["schemas"]["HTTPValidationError"]; - }; - }; - }; - }; - unrequestMeal: { - parameters: { - query?: never; - header?: never; - path: { - meal_id: number; - }; - cookie: { - user_id: number; - }; - }; - requestBody?: never; - responses: { - /** @description Successful Response */ - 200: { - headers: { - [name: string]: unknown; - }; - content: { - "application/json": components["schemas"]["Ok"]; - }; - }; - 404: components["responses"]["Problem404"]; - /** @description Validation Error */ - 422: { - headers: { - [name: string]: unknown; - }; - content: { - "application/json": components["schemas"]["HTTPValidationError"]; - }; - }; - }; - }; - listPersons: { - parameters: { - query?: { - /** @description Optional case-insensitive name filter (applied after page read; may be pushed to SQL in the future). */ - q?: string | null; - /** @description Opaque cursor for pagination. Pass the value returned in nextCursor to fetch the next page. */ - cursor?: string | null; - /** @description Maximum number of items to return (1-200). */ - limit?: number; - }; - header?: never; - path?: never; - cookie?: never; - }; - requestBody?: never; - responses: { - /** @description A page of persons */ - 200: { - headers: { - [name: string]: unknown; - }; - content: { - /** - * @example { - * "items": [ - * { - * "id": 1, - * "name": "Ada Lovelace" - * } - * ], - * "nextCursor": "2", - * "prevCursor": "0", - * "total": 1 - * } - */ - "application/json": components["schemas"]["Page_Person_"]; - }; - }; - /** @description Validation Error */ - 422: { - headers: { - [name: string]: unknown; - }; - content: { - "application/json": components["schemas"]["HTTPValidationError"]; - }; - }; - }; - }; - createPerson: { - parameters: { - query?: never; - header?: never; - path?: never; - cookie?: never; - }; - requestBody: { - content: { - "application/json": components["schemas"]["Person"]; - }; - }; - responses: { - /** @description Successful Response */ - 200: { - headers: { - [name: string]: unknown; - }; - content: { - "application/json": components["schemas"]["Person"]; - }; - }; - /** @description Validation Error */ - 422: { - headers: { - [name: string]: unknown; - }; - content: { - "application/json": components["schemas"]["HTTPValidationError"]; - }; - }; - }; - }; - loginV2: { - parameters: { - query?: never; - header?: never; - path?: never; - cookie?: never; - }; - requestBody: { - content: { - "application/json": components["schemas"]["api__auth_v2__LoginBody"]; - }; - }; - responses: { - /** @description Successful Response */ - 200: { - headers: { - [name: string]: unknown; - }; - content: { - "application/json": components["schemas"]["TokenResponse"]; - }; - }; - /** @description Validation Error */ - 422: { - headers: { - [name: string]: unknown; - }; - content: { - "application/json": components["schemas"]["HTTPValidationError"]; - }; - }; - }; - }; - refresh: { - parameters: { - query?: never; - header?: never; - path?: never; - cookie: { - user_id: number; - }; - }; - requestBody?: never; - responses: { - /** @description Successful Response */ - 200: { - headers: { - [name: string]: unknown; - }; - content: { - "application/json": components["schemas"]["Person"]; - }; - }; - /** @description Validation Error */ - 422: { - headers: { - [name: string]: unknown; - }; - content: { - "application/json": components["schemas"]["HTTPValidationError"]; - }; - }; - }; - }; register: { parameters: { query?: never; @@ -1858,6 +990,81 @@ export interface operations { }; }; }; + loginV2: { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + requestBody: { + content: { + "application/json": components["schemas"]["LoginBody"]; + }; + }; + responses: { + /** @description Successful Response */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["TokenResponse"]; + }; + }; + /** @description Validation Error */ + 422: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["HTTPValidationError"]; + }; + }; + }; + }; + refreshV2: { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + requestBody?: never; + responses: { + /** @description Successful Response */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["RefreshResponse"]; + }; + }; + 422: components["responses"]["Problem422"]; + }; + }; + logoutV2: { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + requestBody?: never; + responses: { + /** @description Successful Response */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": unknown; + }; + }; + 422: components["responses"]["Problem422"]; + }; + }; list_my_households_api_v1_users_me_households_get: { parameters: { query?: never; @@ -1876,6 +1083,7 @@ export interface operations { "application/json": components["schemas"]["HouseholdResponse"][]; }; }; + 403: components["responses"]["Problem403"]; 422: components["responses"]["Problem422"]; }; }; @@ -1912,6 +1120,636 @@ export interface operations { }; }; }; + accept_invitation_api_v1_invitations_accept_post: { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + requestBody: { + content: { + "application/json": Record; + }; + }; + responses: { + /** @description Successful Response */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": unknown; + }; + }; + /** @description Validation Error */ + 422: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["HTTPValidationError"]; + }; + }; + }; + }; + whoami_api_v1_households__householdSlug__whoami_get: { + parameters: { + query?: never; + header?: never; + path: { + householdSlug: string; + }; + cookie?: never; + }; + requestBody?: never; + responses: { + /** @description Successful Response */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["WhoAmI"]; + }; + }; + 403: components["responses"]["Problem403"]; + /** @description Validation Error */ + 422: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["HTTPValidationError"]; + }; + }; + }; + }; + create_invitation_api_v1_households__householdSlug__invitations_post: { + parameters: { + query?: never; + header?: never; + path: { + householdSlug: string; + }; + cookie?: never; + }; + requestBody: { + content: { + "application/json": components["schemas"]["CreateInvitationBody"]; + }; + }; + responses: { + /** @description Successful Response */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["InvitationResponse"]; + }; + }; + 403: components["responses"]["Problem403"]; + /** @description Validation Error */ + 422: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["HTTPValidationError"]; + }; + }; + }; + }; + list_recipes_api_v1_households__householdSlug__recipes_get: { + parameters: { + query?: { + q?: string | null; + cursor?: string | null; + limit?: number; + }; + header?: never; + path: { + householdSlug: string; + }; + cookie?: never; + }; + requestBody?: never; + responses: { + /** @description Successful Response */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["Page_RecipeOut_"]; + }; + }; + 403: components["responses"]["Problem403"]; + /** @description Validation Error */ + 422: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["HTTPValidationError"]; + }; + }; + }; + }; + create_recipe_api_v1_households__householdSlug__recipes_post: { + parameters: { + query?: never; + header?: never; + path: { + householdSlug: string; + }; + cookie?: never; + }; + requestBody: { + content: { + "application/json": components["schemas"]["RecipeCreate"]; + }; + }; + responses: { + /** @description Successful Response */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["RecipeOut"]; + }; + }; + 400: components["responses"]["Problem400"]; + 403: components["responses"]["Problem403"]; + /** @description Validation Error */ + 422: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["HTTPValidationError"]; + }; + }; + }; + }; + get_recipe_api_v1_households__householdSlug__recipes__recipe_id__get: { + parameters: { + query?: never; + header?: never; + path: { + recipe_id: number; + householdSlug: string; + }; + cookie?: never; + }; + requestBody?: never; + responses: { + /** @description Successful Response */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["RecipeOut"]; + }; + }; + 403: components["responses"]["Problem403"]; + 404: components["responses"]["Problem404"]; + /** @description Validation Error */ + 422: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["HTTPValidationError"]; + }; + }; + }; + }; + delete_recipe_api_v1_households__householdSlug__recipes__recipe_id__delete: { + parameters: { + query?: never; + header?: never; + path: { + recipe_id: number; + householdSlug: string; + }; + cookie?: never; + }; + requestBody?: never; + responses: { + /** @description Successful Response */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["RecipeOut"]; + }; + }; + 403: components["responses"]["Problem403"]; + 404: components["responses"]["Problem404"]; + /** @description Validation Error */ + 422: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["HTTPValidationError"]; + }; + }; + }; + }; + getUpcomingMealsV2: { + parameters: { + query: { + from: string; + to: string; + }; + header?: never; + path: { + householdSlug: string; + }; + cookie?: never; + }; + requestBody?: never; + responses: { + /** @description Successful Response */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["Meal-Output"][]; + }; + }; + 403: components["responses"]["Problem403"]; + /** @description Validation Error */ + 422: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["HTTPValidationError"]; + }; + }; + }; + }; + getMealV2: { + parameters: { + query?: never; + header?: never; + path: { + meal_id: number; + householdSlug: string; + }; + cookie?: never; + }; + requestBody?: never; + responses: { + /** @description Successful Response */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["Meal-Output"]; + }; + }; + 403: components["responses"]["Problem403"]; + 404: components["responses"]["Problem404"]; + /** @description Validation Error */ + 422: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["HTTPValidationError"]; + }; + }; + }; + }; + updateMealV2: { + parameters: { + query?: never; + header?: never; + path: { + meal_id: number; + householdSlug: string; + }; + cookie?: never; + }; + requestBody: { + content: { + "application/json": components["schemas"]["Meal-Input"]; + }; + }; + responses: { + /** @description Successful Response */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["Meal-Output"]; + }; + }; + 400: components["responses"]["Problem400"]; + 403: components["responses"]["Problem403"]; + 404: components["responses"]["Problem404"]; + /** @description Validation Error */ + 422: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["HTTPValidationError"]; + }; + }; + }; + }; + deleteMealV2: { + parameters: { + query?: never; + header?: never; + path: { + meal_id: number; + householdSlug: string; + }; + cookie?: never; + }; + requestBody?: never; + responses: { + /** @description Successful Response */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["Meal-Output"]; + }; + }; + 403: components["responses"]["Problem403"]; + 404: components["responses"]["Problem404"]; + /** @description Validation Error */ + 422: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["HTTPValidationError"]; + }; + }; + }; + }; + markMealConsumedV2: { + parameters: { + query?: never; + header?: never; + path: { + meal_id: number; + householdSlug: string; + }; + cookie?: never; + }; + requestBody?: { + content: { + "application/json": components["schemas"]["MarkConsumedBody"] | null; + }; + }; + responses: { + /** @description Successful Response */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["Meal-Output"]; + }; + }; + 400: components["responses"]["Problem400"]; + 403: components["responses"]["Problem403"]; + 404: components["responses"]["Problem404"]; + /** @description Validation Error */ + 422: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["HTTPValidationError"]; + }; + }; + }; + }; + createMealV2: { + parameters: { + query?: never; + header?: never; + path: { + householdSlug: string; + }; + cookie?: never; + }; + requestBody: { + content: { + "application/json": components["schemas"]["Meal-Input"]; + }; + }; + responses: { + /** @description Successful Response */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["Meal-Output"]; + }; + }; + 400: components["responses"]["Problem400"]; + 403: components["responses"]["Problem403"]; + /** @description Validation Error */ + 422: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["HTTPValidationError"]; + }; + }; + }; + }; + getCurrentShoppingListV2: { + parameters: { + query?: never; + header?: never; + path: { + householdSlug: string; + }; + cookie?: never; + }; + requestBody?: never; + responses: { + /** @description Successful Response */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["CurrentShoppingList"]; + }; + }; + 403: components["responses"]["Problem403"]; + /** @description Validation Error */ + 422: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["HTTPValidationError"]; + }; + }; + }; + }; + getShoppingListV2: { + parameters: { + query?: never; + header?: never; + path: { + list_id: number; + householdSlug: string; + }; + cookie?: never; + }; + requestBody?: never; + responses: { + /** @description Successful Response */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["PurchasedShoppingList"]; + }; + }; + 403: components["responses"]["Problem403"]; + /** @description Validation Error */ + 422: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["HTTPValidationError"]; + }; + }; + }; + }; + purchaseIngredientsV2: { + parameters: { + query?: never; + header?: never; + path: { + householdSlug: string; + }; + cookie?: never; + }; + requestBody: { + content: { + "application/json": components["schemas"]["PurchaseListIn"]; + }; + }; + responses: { + /** @description Successful Response */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["PurchasedShoppingList"]; + }; + }; + 403: components["responses"]["Problem403"]; + /** @description Validation Error */ + 422: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["HTTPValidationError"]; + }; + }; + }; + }; + requestMealV2: { + parameters: { + query?: never; + header?: never; + path: { + householdSlug: string; + }; + cookie?: never; + }; + requestBody: { + content: { + "application/json": components["schemas"]["MealIdWrapper"]; + }; + }; + responses: { + /** @description Successful Response */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["RequestedMealItem"]; + }; + }; + 403: components["responses"]["Problem403"]; + /** @description Validation Error */ + 422: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["HTTPValidationError"]; + }; + }; + }; + }; + unrequestMealV2: { + parameters: { + query?: never; + header?: never; + path: { + meal_id: number; + householdSlug: string; + }; + cookie?: never; + }; + requestBody?: never; + responses: { + /** @description Successful Response */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["Ok"]; + }; + }; + 403: components["responses"]["Problem403"]; + /** @description Validation Error */ + 422: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["HTTPValidationError"]; + }; + }; + }; + }; healthz_healthz_get: { parameters: { query?: never;