-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathmain.py
More file actions
93 lines (70 loc) · 2.55 KB
/
Copy pathmain.py
File metadata and controls
93 lines (70 loc) · 2.55 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
from fastapi import FastAPI
from database import engine, Base
import models
from fastapi import Depends
from sqlalchemy.orm import Session
from database import SessionLocal
import crud, schemas
from fastapi import HTTPException
app = FastAPI()
Base.metadata.create_all(bind=engine)
@app.get("/")
def read_root():
return {"message": "Finance Tracker API is running"}
def get_db():
db = SessionLocal()
try:
yield db
finally:
db.close()
@app.post("/users/", response_model=schemas.UserResponse)
def create_user(user: schemas.UserCreate, db: Session = Depends(get_db)):
return crud.create_user(db, user)
@app.get("/users/", response_model=list[schemas.UserResponse])
def get_users(db: Session = Depends(get_db)):
return crud.get_users(db)
@app.post("/transactions/", response_model=schemas.TransactionResponse)
def create_transaction(transaction: schemas.TransactionCreate, db: Session = Depends(get_db)):
return crud.create_transaction(db, transaction)
@app.get("/transactions/", response_model=list[schemas.TransactionResponse])
def get_transactions(db: Session = Depends(get_db)):
return crud.get_transactions(db)
@app.get("/summary/")
def get_summary(db: Session = Depends(get_db)):
return crud.get_summary(db)
@app.get("/transactions/filter/")
def filter_transactions(
category: str = None,
transaction_type: str = None,
start_date: str = None,
end_date: str = None,
db: Session = Depends(get_db)
):
return crud.filter_transactions(db, category, transaction_type, start_date, end_date)
def get_role(role: str):
return role
@app.delete("/transactions/{transaction_id}")
def delete_transaction(
transaction_id: int,
role: str,
db: Session = Depends(get_db)
):
if role != "admin":
raise HTTPException(status_code=403, detail="Only admin can delete transactions")
transaction = crud.delete_transaction(db, transaction_id)
if not transaction:
raise HTTPException(status_code=404, detail="Transaction not found")
return {"message": "Transaction deleted successfully"}
@app.put("/transactions/{transaction_id}")
def update_transaction(
transaction_id: int,
updated_data: schemas.TransactionCreate,
role: str,
db: Session = Depends(get_db)
):
if role not in ["admin", "analyst"]:
raise HTTPException(status_code=403, detail="Not authorized")
transaction = crud.update_transaction(db, transaction_id, updated_data)
if not transaction:
raise HTTPException(status_code=404, detail="Transaction not found")
return transaction