Shri Jayaram commited on
Commit
f48bf02
·
unverified ·
2 Parent(s): 7e50352 8074bec

Merge pull request #34 from yuvabe-ai-labs/feat/notify

Browse files
src/main.py CHANGED
@@ -1,3 +1,4 @@
 
1
  from fastapi import FastAPI
2
 
3
  import os
@@ -12,10 +13,12 @@ from fastapi.staticfiles import StaticFiles
12
 
13
  app = FastAPI(title="Yuvabe App API")
14
 
 
15
  @app.on_event("startup")
16
  async def on_startup():
17
  await init_db()
18
-
 
19
  app.include_router(home_router, prefix="/home", tags=["Home"])
20
 
21
  # init_db()
@@ -26,6 +29,8 @@ app.include_router(auth_router)
26
 
27
  app.include_router(chatbot_router)
28
 
 
 
29
  app.include_router(notifications_router)
30
 
31
 
 
1
+ from src.wellbeing.router import router as wellbeing
2
  from fastapi import FastAPI
3
 
4
  import os
 
13
 
14
  app = FastAPI(title="Yuvabe App API")
15
 
16
+
17
  @app.on_event("startup")
18
  async def on_startup():
19
  await init_db()
20
+
21
+
22
  app.include_router(home_router, prefix="/home", tags=["Home"])
23
 
24
  # init_db()
 
29
 
30
  app.include_router(chatbot_router)
31
 
32
+ app.include_router(wellbeing)
33
+
34
  app.include_router(notifications_router)
35
 
36
 
src/wellbeing/router.py CHANGED
@@ -0,0 +1,58 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ from src.core.database import get_async_session
2
+ from src.auth.utils import get_current_user
3
+ from fastapi import APIRouter, Depends, HTTPException
4
+ from uuid import UUID
5
+ from typing import List
6
+ from src.wellbeing.schemas import WaterLogCreate, WaterLogUpdate, WaterLog
7
+ from . import service
8
+ from sqlalchemy.ext.asyncio.session import AsyncSession
9
+
10
+ router = APIRouter(prefix="/wellbeing", tags=["Wellbeing"])
11
+
12
+
13
+ # Create a new water log
14
+ @router.post("/water_logs/", response_model=WaterLog)
15
+ async def create_water_log(
16
+ water_log: WaterLogCreate,
17
+ session: AsyncSession = Depends(get_async_session),
18
+ user_id: UUID = Depends(get_current_user),
19
+ ):
20
+ return await service.create_water_log(session, water_log, user_id)
21
+
22
+
23
+ # Get all water logs for a user
24
+ @router.get("/water_logs/", response_model=List[WaterLog])
25
+ async def get_water_logs(
26
+ skip: int = 0,
27
+ limit: int = 100,
28
+ session: AsyncSession = Depends(get_async_session),
29
+ user_id: UUID = Depends(get_current_user),
30
+ ):
31
+ return await service.get_water_logs(session, user_id, skip=skip, limit=limit)
32
+
33
+
34
+ # Update a water log
35
+ @router.put("/water_logs/{water_log_id}", response_model=WaterLog)
36
+ async def update_water_log(
37
+ water_log_id: UUID,
38
+ water_log: WaterLogUpdate,
39
+ session: AsyncSession = Depends(get_async_session),
40
+ user_id: UUID = Depends(get_current_user),
41
+ ):
42
+ updated_log = service.update_water_log(session, water_log_id, water_log)
43
+ if not updated_log:
44
+ raise HTTPException(status_code=404, detail="Water log not found")
45
+ return await updated_log
46
+
47
+
48
+ # Delete a water log
49
+ @router.delete("/water_logs/{water_log_id}")
50
+ async def delete_water_log(
51
+ water_log_id: UUID,
52
+ session: AsyncSession = Depends(get_async_session),
53
+ user_id: UUID = Depends(get_current_user),
54
+ ):
55
+ success = service.delete_water_log(session, water_log_id)
56
+ if not success:
57
+ raise HTTPException(status_code=404, detail="Water log not found")
58
+ return {"message": "Water log deleted successfully"}
src/wellbeing/schemas.py CHANGED
@@ -0,0 +1,23 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ from pydantic import BaseModel
2
+ from typing import Optional
3
+ import uuid
4
+ from datetime import datetime
5
+
6
+ class WaterLogBase(BaseModel):
7
+ amount_ml: int
8
+ goal_ml: Optional[int] = None
9
+ recommended_ml: Optional[int] = None
10
+
11
+ class WaterLogCreate(WaterLogBase):
12
+ pass
13
+
14
+ class WaterLogUpdate(WaterLogBase):
15
+ pass
16
+
17
+ class WaterLog(WaterLogBase):
18
+ id: uuid.UUID
19
+ user_id: uuid.UUID
20
+ logged_at: datetime
21
+
22
+ model_config = {"from_attributes": True}
23
+
src/wellbeing/service.py CHANGED
@@ -0,0 +1,66 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ from sqlalchemy.ext.asyncio import AsyncSession
2
+ from sqlalchemy.future import select
3
+ from datetime import datetime
4
+ from typing import List
5
+ from .models import WaterLogs
6
+ import uuid
7
+ from .schemas import WaterLogCreate, WaterLogUpdate
8
+
9
+
10
+ # Create a new water log
11
+ async def create_water_log(
12
+ session: AsyncSession, water_log: WaterLogCreate, user_id: uuid.UUID
13
+ ) -> WaterLogs:
14
+ db_water_log = WaterLogs(
15
+ user_id=user_id,
16
+ amount_ml=water_log.amount_ml,
17
+ logged_at=datetime.now(),
18
+ goal_ml=water_log.goal_ml,
19
+ recommended_ml=water_log.recommended_ml,
20
+ )
21
+ session.add(db_water_log)
22
+ await session.commit() # Commit asynchronously
23
+ await session.refresh(db_water_log) # Refresh asynchronously
24
+ return db_water_log
25
+
26
+
27
+ # Get all water logs for a user
28
+ async def get_water_logs(
29
+ session: AsyncSession, user_id: uuid.UUID, skip: int = 0, limit: int = 100
30
+ ) -> List[WaterLogs]:
31
+ stmt = (
32
+ select(WaterLogs).filter(WaterLogs.user_id == user_id).offset(skip).limit(limit)
33
+ )
34
+ result = await session.execute(stmt) # Execute asynchronously
35
+ return result.scalars().all() # Fetch results asynchronously
36
+
37
+
38
+ # Update a water log
39
+ async def update_water_log(
40
+ session: AsyncSession, water_log_id: uuid.UUID, water_log: WaterLogUpdate
41
+ ) -> WaterLogs:
42
+ stmt = select(WaterLogs).filter(WaterLogs.id == water_log_id)
43
+ result = await session.execute(stmt) # Execute asynchronously
44
+ db_water_log = result.scalar_one_or_none()
45
+
46
+ if db_water_log:
47
+ db_water_log.amount_ml = water_log.amount_ml
48
+ db_water_log.goal_ml = water_log.goal_ml
49
+ db_water_log.recommended_ml = water_log.recommended_ml
50
+ await session.commit() # Commit asynchronously
51
+ await session.refresh(db_water_log) # Refresh asynchronously
52
+ return db_water_log
53
+ return None
54
+
55
+
56
+ # Delete a water log
57
+ async def delete_water_log(session: AsyncSession, water_log_id: uuid.UUID) -> bool:
58
+ stmt = select(WaterLogs).filter(WaterLogs.id == water_log_id)
59
+ result = await session.execute(stmt) # Execute asynchronously
60
+ db_water_log = result.scalar_one_or_none()
61
+
62
+ if db_water_log:
63
+ await session.delete(db_water_log) # Delete asynchronously
64
+ await session.commit() # Commit asynchronously
65
+ return True
66
+ return False