Skip to content

Commit 8d09496

Browse files
committed
Added API Endpoints for Meetings
1 parent 8d19f37 commit 8d09496

File tree

3 files changed

+139
-2
lines changed

3 files changed

+139
-2
lines changed

backend/app/api/main.py

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,13 +1,14 @@
11
from fastapi import APIRouter
22

3-
from app.api.routes import items, login, private, users, utils
3+
from app.api.routes import items, login, meetings, private, users, utils
44
from app.core.config import settings
55

66
api_router = APIRouter()
77
api_router.include_router(login.router)
88
api_router.include_router(users.router)
99
api_router.include_router(utils.router)
1010
api_router.include_router(items.router)
11+
api_router.include_router(meetings.router)
1112

1213

1314
if settings.ENVIRONMENT == "local":

backend/app/api/routes/meetings.py

Lines changed: 95 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,95 @@
1+
from typing import Any
2+
from uuid import UUID
3+
4+
from fastapi import APIRouter, Depends, HTTPException
5+
from sqlmodel import Session
6+
7+
from app import crud
8+
from app.api import deps
9+
from app.models import (
10+
Meeting,
11+
MeetingCreate,
12+
MeetingUpdate,
13+
MeetingPublic,
14+
MeetingsPublic,
15+
)
16+
17+
router = APIRouter(prefix="/meetings", tags=["meetings"])
18+
19+
20+
@router.get("", response_model=MeetingsPublic)
21+
def read_meetings(
22+
*,
23+
session: Session = Depends(deps.get_session),
24+
skip: int = 0,
25+
limit: int = 100,
26+
) -> Any:
27+
"""
28+
Retrieve meetings.
29+
"""
30+
meetings, total = crud.meeting.get_meetings(
31+
session=session, skip=skip, limit=limit
32+
)
33+
return MeetingsPublic(data=meetings, count=total)
34+
35+
36+
@router.post("", response_model=MeetingPublic)
37+
def create_meeting(
38+
*,
39+
session: Session = Depends(deps.get_session),
40+
meeting_in: MeetingCreate,
41+
) -> Any:
42+
"""
43+
Create new meeting.
44+
"""
45+
meeting = crud.meeting.create_meeting(session=session, meeting_in=meeting_in)
46+
return meeting
47+
48+
49+
@router.get("/{meeting_id}", response_model=MeetingPublic)
50+
def read_meeting(
51+
*,
52+
session: Session = Depends(deps.get_session),
53+
meeting_id: UUID,
54+
) -> Any:
55+
"""
56+
Get meeting by ID.
57+
"""
58+
meeting = crud.meeting.get_meeting(session=session, meeting_id=meeting_id)
59+
if not meeting:
60+
raise HTTPException(status_code=404, detail="Meeting not found")
61+
return meeting
62+
63+
64+
@router.put("/{meeting_id}", response_model=MeetingPublic)
65+
def update_meeting(
66+
*,
67+
session: Session = Depends(deps.get_session),
68+
meeting_id: UUID,
69+
meeting_in: MeetingUpdate,
70+
) -> Any:
71+
"""
72+
Update a meeting.
73+
"""
74+
meeting = crud.meeting.get_meeting(session=session, meeting_id=meeting_id)
75+
if not meeting:
76+
raise HTTPException(status_code=404, detail="Meeting not found")
77+
meeting = crud.meeting.update_meeting(
78+
session=session, db_obj=meeting, obj_in=meeting_in
79+
)
80+
return meeting
81+
82+
83+
@router.delete("/{meeting_id}", response_model=MeetingPublic)
84+
def delete_meeting(
85+
*,
86+
session: Session = Depends(deps.get_session),
87+
meeting_id: UUID,
88+
) -> Any:
89+
"""
90+
Delete a meeting.
91+
"""
92+
meeting = crud.meeting.delete_meeting(session=session, meeting_id=meeting_id)
93+
if not meeting:
94+
raise HTTPException(status_code=404, detail="Meeting not found")
95+
return meeting

backend/app/crud.py

Lines changed: 42 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,11 @@
11
import uuid
22
from typing import Any
3+
from uuid import UUID
34

45
from sqlmodel import Session, select
56

67
from app.core.security import get_password_hash, verify_password
7-
from app.models import Item, ItemCreate, User, UserCreate, UserUpdate
8+
from app.models import Item, ItemCreate, User, UserCreate, UserUpdate, Meeting, MeetingCreate, MeetingUpdate
89

910

1011
def create_user(*, session: Session, user_create: UserCreate) -> User:
@@ -52,3 +53,43 @@ def create_item(*, session: Session, item_in: ItemCreate, owner_id: uuid.UUID) -
5253
session.commit()
5354
session.refresh(db_item)
5455
return db_item
56+
57+
58+
def create_meeting(*, session: Session, meeting_in: MeetingCreate) -> Meeting:
59+
db_obj = Meeting.model_validate(meeting_in)
60+
session.add(db_obj)
61+
session.commit()
62+
session.refresh(db_obj)
63+
return db_obj
64+
65+
66+
def get_meeting(*, session: Session, meeting_id: UUID) -> Meeting | None:
67+
return session.get(Meeting, meeting_id)
68+
69+
70+
def get_meetings(
71+
*, session: Session, skip: int = 0, limit: int = 100
72+
) -> tuple[list[Meeting], int]:
73+
statement = select(Meeting).offset(skip).limit(limit)
74+
meetings = session.exec(statement).all()
75+
total = session.query(Meeting).count()
76+
return meetings, total
77+
78+
79+
def update_meeting(
80+
*, session: Session, db_obj: Meeting, obj_in: MeetingUpdate
81+
) -> Meeting:
82+
update_data = obj_in.model_dump(exclude_unset=True)
83+
db_obj.sqlmodel_update(update_data)
84+
session.add(db_obj)
85+
session.commit()
86+
session.refresh(db_obj)
87+
return db_obj
88+
89+
90+
def delete_meeting(*, session: Session, meeting_id: UUID) -> Meeting | None:
91+
meeting = session.get(Meeting, meeting_id)
92+
if meeting:
93+
session.delete(meeting)
94+
session.commit()
95+
return meeting

0 commit comments

Comments
 (0)