feat: Initialize FastAPI application with Azure authentication and transaction management
- Added .env.example for environment variable configuration. - Created app initialization files and core settings management. - Implemented API routers for reporting and transaction endpoints. - Developed transaction management service with CRUD operations. - Integrated Azure OAuth for user authentication. - Designed dashboard view with transaction filtering and display. - Added Swagger UI documentation with custom dark theme. - Created static and template files for frontend styling and layout.
This commit is contained in:
@@ -0,0 +1,4 @@
|
||||
from app.api.reporting import router as reporting_router
|
||||
from app.api.transactions import router as transactions_router
|
||||
|
||||
__all__ = ["reporting_router", "transactions_router"]
|
||||
@@ -0,0 +1,11 @@
|
||||
from fastapi import APIRouter
|
||||
|
||||
from app.service.models import ReconSummary
|
||||
from app.service.recon_service import get_summary
|
||||
|
||||
router = APIRouter(prefix="/api", tags=["Reporting"])
|
||||
|
||||
|
||||
@router.get("/summary", response_model=ReconSummary, summary="Reconciliation summary")
|
||||
async def get_summary_endpoint() -> ReconSummary:
|
||||
return get_summary()
|
||||
@@ -0,0 +1,44 @@
|
||||
from fastapi import APIRouter, HTTPException, Query
|
||||
|
||||
from app.service.models import Transaction
|
||||
from app.service.recon_service import (
|
||||
FlagType,
|
||||
StatusType,
|
||||
add_transaction,
|
||||
delete_transaction_by_id,
|
||||
get_transaction_by_id,
|
||||
list_transactions,
|
||||
)
|
||||
|
||||
router = APIRouter(prefix="/api", tags=["Transactions"])
|
||||
|
||||
|
||||
@router.get("/transactions", response_model=list[Transaction], summary="List transactions")
|
||||
async def list_transactions_endpoint(
|
||||
status: StatusType | None = Query(None, description="Filter by status"),
|
||||
flag: FlagType | None = Query(None, description="Filter by flag"),
|
||||
) -> list[Transaction]:
|
||||
return list_transactions(status=status, flag=flag)
|
||||
|
||||
|
||||
@router.get("/transactions/{transaction_id}", response_model=Transaction, summary="Get a transaction")
|
||||
async def get_transaction_endpoint(transaction_id: str) -> Transaction:
|
||||
transaction = get_transaction_by_id(transaction_id)
|
||||
if transaction is None:
|
||||
raise HTTPException(status_code=404, detail=f"{transaction_id} not found")
|
||||
return transaction
|
||||
|
||||
|
||||
@router.post("/transactions", response_model=Transaction, status_code=201, summary="Submit a transaction")
|
||||
async def create_transaction_endpoint(transaction: Transaction) -> Transaction:
|
||||
created = add_transaction(transaction)
|
||||
if not created:
|
||||
raise HTTPException(status_code=409, detail=f"{transaction.transaction_id} already exists")
|
||||
return transaction
|
||||
|
||||
|
||||
@router.delete("/transactions/{transaction_id}", status_code=204, summary="Delete a transaction")
|
||||
async def delete_transaction_endpoint(transaction_id: str) -> None:
|
||||
removed = delete_transaction_by_id(transaction_id)
|
||||
if not removed:
|
||||
raise HTTPException(status_code=404, detail=f"{transaction_id} not found")
|
||||
Reference in New Issue
Block a user