init feature

This commit is contained in:
arrelin
2025-12-24 15:38:36 +03:00
parent 0fdc20e750
commit fcd4199cbd
15 changed files with 994 additions and 2 deletions

View File

@@ -45,12 +45,21 @@ pub use middleware::{require_admin, require_family_access};
routes::expense::update_expense,
routes::expense::delete_expense,
routes::expense::get_remaining_limit,
routes::shopping_item::create_shopping_item,
routes::shopping_item::get_shopping_items_by_family,
routes::shopping_item::get_shopping_item,
routes::shopping_item::update_shopping_item,
routes::shopping_item::delete_shopping_item,
routes::shopping_item::mark_as_purchased,
routes::shopping_item::mark_all_as_purchased,
routes::shopping_item::clear_all,
),
components(
schemas(
models::family::Model,
models::category::Model,
models::expense::Model,
models::shopping_item::Model,
routes::auth::LoginRequest,
routes::auth::LoginResponse,
routes::family::CreateFamilyRequest,
@@ -60,13 +69,18 @@ pub use middleware::{require_admin, require_family_access};
routes::expense::CreateExpenseRequest,
routes::expense::UpdateExpenseRequest,
routes::expense::RemainingLimitResponse,
routes::shopping_item::CreateShoppingItemRequest,
routes::shopping_item::UpdateShoppingItemRequest,
routes::shopping_item::MarkAsPurchasedRequest,
routes::shopping_item::BulkOperationResponse,
)
),
tags(
(name = "auth", description = "Authentication endpoints"),
(name = "families", description = "Family management endpoints"),
(name = "categories", description = "Category management endpoints"),
(name = "expenses", description = "Expense management endpoints")
(name = "expenses", description = "Expense management endpoints"),
(name = "shopping-items", description = "Shopping list management endpoints")
),
info(
title = "Family Budget API",
@@ -131,6 +145,14 @@ pub async fn create_app(db: DatabaseConnection) -> Result<Router, DbErr> {
.route("/families/:family_id/categories/:category_id/expenses/:expense_id", put(routes::expense::update_expense))
.route("/families/:family_id/categories/:category_id/expenses/:expense_id", delete(routes::expense::delete_expense))
.route("/families/:family_id/categories/:category_id/remaining", get(routes::expense::get_remaining_limit))
.route("/families/:family_id/shopping-items", post(routes::shopping_item::create_shopping_item))
.route("/families/:family_id/shopping-items", get(routes::shopping_item::get_shopping_items_by_family))
.route("/families/:family_id/shopping-items/:id", get(routes::shopping_item::get_shopping_item))
.route("/families/:family_id/shopping-items/:id", put(routes::shopping_item::update_shopping_item))
.route("/families/:family_id/shopping-items/:id", delete(routes::shopping_item::delete_shopping_item))
.route("/families/:family_id/shopping-items/:id/purchased", axum::routing::patch(routes::shopping_item::mark_as_purchased))
.route("/families/:family_id/shopping-items/mark-all-purchased", post(routes::shopping_item::mark_all_as_purchased))
.route("/families/:family_id/shopping-items/clear-all", delete(routes::shopping_item::clear_all))
.route_layer(axum_middleware::from_fn(middleware::require_family_access))
.layer(session_layer.clone())
.with_state(db.clone());