AhmadYarAI commited on
Commit
fc5d619
·
1 Parent(s): 138730f

Add starting balance field in schema

Browse files
app/db/models_family.py CHANGED
@@ -13,8 +13,7 @@ class Family(Base):
13
  id = Column(Integer, primary_key=True, index=True)
14
  family_code = Column(String(10), unique=True, index=True, nullable=False)
15
  head_id = Column(Integer, ForeignKey("user_accounts.id"), nullable=False)
16
-
17
- total_balance = Column(Float, default=0.0)
18
  monthly_budget = Column(Float, default=0.0)
19
  expected_members = Column(String, nullable=True)
20
  created_at = Column(DateTime(timezone=True), server_default=func.now())
 
13
  id = Column(Integer, primary_key=True, index=True)
14
  family_code = Column(String(10), unique=True, index=True, nullable=False)
15
  head_id = Column(Integer, ForeignKey("user_accounts.id"), nullable=False)
16
+ starting_balance = Column(Float, nullable=False)
 
17
  monthly_budget = Column(Float, default=0.0)
18
  expected_members = Column(String, nullable=True)
19
  created_at = Column(DateTime(timezone=True), server_default=func.now())
app/routers/family.py CHANGED
@@ -26,41 +26,50 @@ def family_setup(
26
  if current_user.role != "head":
27
  raise HTTPException(403, "Only family head can create family")
28
 
29
- # Prevent duplicate setup
30
- existing = db.query(Family).filter(Family.head_id == current_user.id).first()
 
 
 
31
  if existing:
32
  raise HTTPException(400, "Family already created")
33
 
34
- # 1️⃣ Create Family
35
- fam = Family(
36
  family_code=current_user.family_code,
37
  head_id=current_user.id,
38
- total_balance=payload.total_balance,
39
  expected_members=",".join(payload.members)
40
  )
41
 
42
- db.add(fam)
43
  db.commit()
44
- db.refresh(fam)
45
 
46
- # 2️⃣ Insert Family Members
47
  for name in payload.members:
48
- db.add(FamilyMember(
49
- family_code=fam.family_code,
50
- name=name,
51
- role="member",
52
- allocated_budget=0,
53
- spent_amount=0
54
- ))
 
 
55
  db.commit()
56
 
57
- # 3️⃣ Create Monthly Budget & Income Record
 
 
58
  monthly = FamilyMonthly(
59
- family_id=fam.id,
60
  year=payload.year,
61
  month=payload.month,
 
62
  monthly_income=payload.monthly_income,
63
- monthly_budget=payload.monthly_budget
 
64
  )
65
 
66
  db.add(monthly)
@@ -68,17 +77,22 @@ def family_setup(
68
 
69
  return {
70
  "status": True,
71
- "message": "Family + Monthly Budget setup completed",
72
  "family": {
73
- "family_code": fam.family_code,
74
- "members": payload.members,
75
- "monthly_budget": payload.monthly_budget,
76
- "monthly_income": payload.monthly_income,
77
  "year": payload.year,
78
- "month": payload.month
 
 
 
 
79
  }
80
  }
81
 
 
82
  @router.post("/monthly-setup")
83
  def monthly_setup(
84
  payload: MonthlySetupRequest,
 
26
  if current_user.role != "head":
27
  raise HTTPException(403, "Only family head can create family")
28
 
29
+ # Prevent duplicate family creation
30
+ existing = db.query(Family).filter(
31
+ Family.head_id == current_user.id
32
+ ).first()
33
+
34
  if existing:
35
  raise HTTPException(400, "Family already created")
36
 
37
+ # ---------------- 1️⃣ CREATE FAMILY (ONE TIME) ----------------
38
+ family = Family(
39
  family_code=current_user.family_code,
40
  head_id=current_user.id,
41
+ total_balance=payload.starting_balance,
42
  expected_members=",".join(payload.members)
43
  )
44
 
45
+ db.add(family)
46
  db.commit()
47
+ db.refresh(family)
48
 
49
+ # ---------------- 2️⃣ CREATE FAMILY MEMBERS ----------------
50
  for name in payload.members:
51
+ db.add(
52
+ FamilyMember(
53
+ family_code=family.family_code,
54
+ name=name.strip(),
55
+ role="member",
56
+ allocated_budget=0,
57
+ spent_amount=0
58
+ )
59
+ )
60
  db.commit()
61
 
62
+ # ---------------- 3️⃣ CREATE FIRST MONTHLY RECORD ----------------
63
+ closing_balance = payload.starting_balance + payload.monthly_income
64
+
65
  monthly = FamilyMonthly(
66
+ family_id=family.id,
67
  year=payload.year,
68
  month=payload.month,
69
+ starting_balance=payload.starting_balance,
70
  monthly_income=payload.monthly_income,
71
+ monthly_budget=payload.monthly_budget,
72
+ closing_balance=closing_balance
73
  )
74
 
75
  db.add(monthly)
 
77
 
78
  return {
79
  "status": True,
80
+ "message": "Family setup completed successfully",
81
  "family": {
82
+ "family_code": family.family_code,
83
+ "members": payload.members
84
+ },
85
+ "monthly": {
86
  "year": payload.year,
87
+ "month": payload.month,
88
+ "starting_balance": payload.starting_balance,
89
+ "monthly_income": payload.monthly_income,
90
+ "monthly_budget": payload.monthly_budget,
91
+ "closing_balance": closing_balance
92
  }
93
  }
94
 
95
+
96
  @router.post("/monthly-setup")
97
  def monthly_setup(
98
  payload: MonthlySetupRequest,
app/schemas/schemas.py CHANGED
@@ -58,13 +58,11 @@ class FamilySummary(BaseModel):
58
  needs_monthly_setup: bool
59
 
60
  class FamilySetupRequest(BaseModel):
61
- total_balance: float
62
- total_income: float
63
- monthly_income: float # ⬅ NEW
64
- monthly_budget: float # ⬅ NEW
65
- year: int # ⬅ NEW
66
- month: int # ⬅ NEW (1–12)
67
-
68
  members: List[str]
69
 
70
  class UpdateFamilyMemberRequest(BaseModel):
 
58
  needs_monthly_setup: bool
59
 
60
  class FamilySetupRequest(BaseModel):
61
+ starting_balance: float # 🔑 renamed from opening_balance
62
+ monthly_income: float
63
+ monthly_budget: float
64
+ year: int
65
+ month: int # 1–12
 
 
66
  members: List[str]
67
 
68
  class UpdateFamilyMemberRequest(BaseModel):