Public Access
mirror of
https://github.com/xlorepdarkhelm/numinar-coding-project.git
synced 2026-09-10 18:22:42 -04:00
@@ -1,5 +1,6 @@
|
||||
"""Dependency definitions for FastAPI routes."""
|
||||
|
||||
from collections.abc import AsyncGenerator
|
||||
from typing import Annotated
|
||||
|
||||
from fastapi import Depends
|
||||
@@ -13,7 +14,7 @@ from backend import db
|
||||
async_maker = async_sessionmaker(db.engine)
|
||||
|
||||
|
||||
async def get_session():
|
||||
async def get_session() -> AsyncGenerator[AsyncSession, None]:
|
||||
"""Inject a new database session.
|
||||
|
||||
Yields:
|
||||
|
||||
@@ -130,3 +130,9 @@ async def create_db_and_tables() -> None: # pragma: no cover
|
||||
"""
|
||||
async with engine.begin() as conn:
|
||||
await conn.run_sync(Base.metadata.create_all)
|
||||
|
||||
|
||||
type UserList = list[User]
|
||||
type RoomList = list[Room]
|
||||
type BookingList = list[Booking]
|
||||
type InviteeList = list[Invitee]
|
||||
|
||||
@@ -11,6 +11,7 @@ from sqlalchemy.exc import SQLAlchemyError
|
||||
|
||||
from backend.dependencies.db import DBSession
|
||||
from backend.models import Booking
|
||||
from backend.models import BookingList
|
||||
from backend.schemas.bookings import BookingCreate
|
||||
from backend.schemas.bookings import BookingResponse
|
||||
from backend.schemas.bookings import BookingUpdate
|
||||
@@ -27,7 +28,7 @@ router = APIRouter(prefix="/bookings", tags=["bookings"])
|
||||
|
||||
|
||||
@router.get("/room/{room_id}", response_model=List[BookingResponse])
|
||||
async def read_bookings_for_room(room_id: int, session: DBSession):
|
||||
async def read_bookings_for_room(room_id: int, session: DBSession) -> BookingList:
|
||||
"""Retrieve all bookings for a specific room.
|
||||
|
||||
Args:
|
||||
@@ -66,7 +67,7 @@ async def read_bookings_for_room(room_id: int, session: DBSession):
|
||||
|
||||
|
||||
@router.get("/{booking_id}", response_model=BookingResponse)
|
||||
async def read_booking(booking_id: int, session: DBSession):
|
||||
async def read_booking(booking_id: int, session: DBSession) -> Booking:
|
||||
"""Retrieve a booking by ID.
|
||||
|
||||
Args:
|
||||
@@ -110,7 +111,7 @@ async def read_booking(booking_id: int, session: DBSession):
|
||||
|
||||
|
||||
@router.post("/", response_model=BookingResponse, status_code=status.HTTP_201_CREATED)
|
||||
async def create_booking(booking: BookingCreate, session: DBSession):
|
||||
async def create_booking(booking: BookingCreate, session: DBSession) -> Booking:
|
||||
"""Create a new booking.
|
||||
|
||||
Args:
|
||||
@@ -146,7 +147,7 @@ async def create_booking(booking: BookingCreate, session: DBSession):
|
||||
@router.put("/{booking_id}", response_model=BookingResponse)
|
||||
async def update_existing_booking(
|
||||
booking_id: int, booking_update: BookingUpdate, session: DBSession
|
||||
):
|
||||
) -> Booking:
|
||||
"""Update an existing booking.
|
||||
|
||||
Args:
|
||||
@@ -192,7 +193,7 @@ async def update_existing_booking(
|
||||
|
||||
|
||||
@router.delete("/{booking_id}", status_code=status.HTTP_204_NO_CONTENT)
|
||||
async def delete_existing_booking(booking_id: int, session: DBSession):
|
||||
async def delete_existing_booking(booking_id: int, session: DBSession) -> None:
|
||||
"""Delete a booking.
|
||||
|
||||
Args:
|
||||
|
||||
@@ -10,6 +10,8 @@ from pydantic import EmailStr
|
||||
from sqlalchemy.exc import SQLAlchemyError
|
||||
|
||||
from backend.dependencies.db import DBSession
|
||||
from backend.models import User
|
||||
from backend.models import UserList
|
||||
from backend.schemas.invitees import InviteeCreate
|
||||
from backend.schemas.invitees import InviteeResponse
|
||||
from backend.schemas.users import UserResponse
|
||||
@@ -24,7 +26,7 @@ router = APIRouter(prefix="/invitees", tags=["invitees"])
|
||||
|
||||
|
||||
@router.get("/booking/{booking_id}", response_model=List[UserResponse])
|
||||
async def read_invitees_for_booking(booking_id: int, session: DBSession):
|
||||
async def read_invitees_for_booking(booking_id: int, session: DBSession) -> UserList:
|
||||
"""Retrieve all invitees for a specific booking.
|
||||
|
||||
Args:
|
||||
@@ -67,7 +69,9 @@ async def read_invitees_for_booking(booking_id: int, session: DBSession):
|
||||
response_model=InviteeResponse,
|
||||
status_code=status.HTTP_201_CREATED,
|
||||
)
|
||||
async def add_invitee(booking_id: int, invitee: InviteeCreate, session: DBSession):
|
||||
async def add_invitee(
|
||||
booking_id: int, invitee: InviteeCreate, session: DBSession
|
||||
) -> User:
|
||||
"""Add an invitee to a booking.
|
||||
|
||||
Args:
|
||||
@@ -112,7 +116,9 @@ async def add_invitee(booking_id: int, invitee: InviteeCreate, session: DBSessio
|
||||
@router.delete(
|
||||
"/booking/{booking_id}/user/{user_email}", status_code=status.HTTP_204_NO_CONTENT
|
||||
)
|
||||
async def remove_invitee(booking_id: int, user_email: EmailStr, session: DBSession):
|
||||
async def remove_invitee(
|
||||
booking_id: int, user_email: EmailStr, session: DBSession
|
||||
) -> None:
|
||||
"""Remove an invitee from a booking.
|
||||
|
||||
Args:
|
||||
|
||||
@@ -11,6 +11,7 @@ from sqlalchemy.exc import SQLAlchemyError
|
||||
|
||||
from backend.dependencies.db import DBSession
|
||||
from backend.models import Room
|
||||
from backend.models import RoomList
|
||||
from backend.schemas.rooms import RoomCreate
|
||||
from backend.schemas.rooms import RoomResponse
|
||||
from backend.schemas.rooms import RoomUpdate
|
||||
@@ -27,7 +28,7 @@ router = APIRouter(prefix="/rooms", tags=["rooms"])
|
||||
|
||||
|
||||
@router.get("/", response_model=List[RoomResponse])
|
||||
async def read_rooms(session: DBSession):
|
||||
async def read_rooms(session: DBSession) -> RoomList:
|
||||
"""Retrieve all rooms.
|
||||
|
||||
Args:
|
||||
@@ -59,7 +60,7 @@ async def read_rooms(session: DBSession):
|
||||
|
||||
|
||||
@router.get("/{room_id}", response_model=RoomResponse)
|
||||
async def read_room(room_id: int, session: DBSession):
|
||||
async def read_room(room_id: int, session: DBSession) -> Room:
|
||||
"""Retrieve a room by ID.
|
||||
|
||||
Args:
|
||||
@@ -101,7 +102,7 @@ async def read_room(room_id: int, session: DBSession):
|
||||
|
||||
|
||||
@router.post("/", response_model=RoomResponse, status_code=status.HTTP_201_CREATED)
|
||||
async def create_room(room: RoomCreate, session: DBSession):
|
||||
async def create_room(room: RoomCreate, session: DBSession) -> Room:
|
||||
"""Create a new room.
|
||||
|
||||
Args:
|
||||
@@ -136,7 +137,7 @@ async def create_room(room: RoomCreate, session: DBSession):
|
||||
@router.put("/{room_id}", response_model=RoomResponse)
|
||||
async def update_existing_room(
|
||||
room_id: int, room_update: RoomUpdate, session: DBSession
|
||||
):
|
||||
) -> Room:
|
||||
"""Update an existing room.
|
||||
|
||||
Args:
|
||||
@@ -179,7 +180,7 @@ async def update_existing_room(
|
||||
|
||||
|
||||
@router.delete("/{room_id}", status_code=status.HTTP_204_NO_CONTENT)
|
||||
async def delete_existing_room(room_id: int, session: DBSession):
|
||||
async def delete_existing_room(room_id: int, session: DBSession) -> None:
|
||||
"""Delete a room.
|
||||
|
||||
Args:
|
||||
|
||||
@@ -9,6 +9,8 @@ from sqlalchemy.exc import NoResultFound
|
||||
from sqlalchemy.exc import SQLAlchemyError
|
||||
|
||||
from backend.dependencies.db import DBSession
|
||||
from backend.models import User
|
||||
from backend.models import UserList
|
||||
from backend.schemas.users import UserResponse
|
||||
from backend.services.users import get_user
|
||||
from backend.services.users import get_users
|
||||
@@ -20,7 +22,7 @@ router = APIRouter(prefix="/users", tags=["users"])
|
||||
|
||||
|
||||
@router.get("/", response_model=list[UserResponse])
|
||||
async def read_users(session: DBSession):
|
||||
async def read_users(session: DBSession) -> UserList:
|
||||
"""Retrieve all users.
|
||||
|
||||
Args:
|
||||
@@ -48,7 +50,7 @@ async def read_users(session: DBSession):
|
||||
|
||||
|
||||
@router.get("/{email}", response_model=UserResponse)
|
||||
async def read_user(email: EmailStr, session: DBSession):
|
||||
async def read_user(email: EmailStr, session: DBSession) -> User:
|
||||
"""Retrieve a user by email.
|
||||
|
||||
Args:
|
||||
|
||||
@@ -16,16 +16,11 @@ from sqlalchemy.exc import NoResultFound
|
||||
from sqlalchemy.ext.asyncio import AsyncSession
|
||||
|
||||
from backend.models import Booking
|
||||
from backend.models import Room
|
||||
from backend.models import User
|
||||
from backend.models import BookingList
|
||||
|
||||
|
||||
logger = logging.getLogger(__name__)
|
||||
|
||||
type UserList = list[User]
|
||||
type RoomList = list[Room]
|
||||
type BookingList = list[Booking]
|
||||
|
||||
|
||||
class BookingParams(TypedDict):
|
||||
"""Parameters for updating a booking.
|
||||
@@ -35,7 +30,7 @@ class BookingParams(TypedDict):
|
||||
"""
|
||||
|
||||
|
||||
async def get_bookings_for_room(session: AsyncSession, room_id: int):
|
||||
async def get_bookings_for_room(session: AsyncSession, room_id: int) -> BookingList:
|
||||
"""Retrieve all bookings for a specific room.
|
||||
|
||||
Args:
|
||||
@@ -64,7 +59,7 @@ async def get_bookings_for_room(session: AsyncSession, room_id: int):
|
||||
logger.debug("Exiting get_bookings_for_room")
|
||||
|
||||
|
||||
async def get_booking(session: AsyncSession, booking_id: int):
|
||||
async def get_booking(session: AsyncSession, booking_id: int) -> Booking:
|
||||
"""Retrieve a booking by its ID.
|
||||
|
||||
Args:
|
||||
@@ -92,7 +87,7 @@ async def get_booking(session: AsyncSession, booking_id: int):
|
||||
logger.debug("Exiting get_booking")
|
||||
|
||||
|
||||
async def new_booking(session: AsyncSession, booking: Booking):
|
||||
async def new_booking(session: AsyncSession, booking: Booking) -> Booking:
|
||||
"""Create a new booking in the database.
|
||||
|
||||
Args:
|
||||
@@ -123,7 +118,7 @@ async def update_booking(
|
||||
session: AsyncSession,
|
||||
booking_id: int,
|
||||
**kwargs: Unpack[BookingParams],
|
||||
):
|
||||
) -> Booking:
|
||||
"""Update an existing booking.
|
||||
|
||||
Args:
|
||||
@@ -158,7 +153,7 @@ async def update_booking(
|
||||
logger.debug("Exiting update_booking")
|
||||
|
||||
|
||||
async def delete_booking(session: AsyncSession, booking_id: int):
|
||||
async def delete_booking(session: AsyncSession, booking_id: int) -> None:
|
||||
"""Delete a booking from the database.
|
||||
|
||||
Args:
|
||||
|
||||
@@ -11,18 +11,13 @@ from sqlalchemy import delete
|
||||
from sqlalchemy import select
|
||||
from sqlalchemy.ext.asyncio import AsyncSession
|
||||
|
||||
from backend.models import Booking
|
||||
from backend.models import Invitee
|
||||
from backend.models import Room
|
||||
from backend.models import User
|
||||
from backend.models import UserList
|
||||
|
||||
|
||||
logger = logging.getLogger(__name__)
|
||||
|
||||
type UserList = list[User]
|
||||
type RoomList = list[Room]
|
||||
type BookingList = list[Booking]
|
||||
|
||||
|
||||
async def get_invitees_for_booking(session: AsyncSession, booking_id: int) -> UserList:
|
||||
"""Retrieve all invitees for a specific booking.
|
||||
@@ -57,7 +52,7 @@ async def get_invitees_for_booking(session: AsyncSession, booking_id: int) -> Us
|
||||
|
||||
async def add_invitee_to_booking(
|
||||
session: AsyncSession, booking_id: int, user_email: str
|
||||
) -> Invitee:
|
||||
) -> User:
|
||||
"""Add an invitee to a booking.
|
||||
|
||||
Args:
|
||||
@@ -81,7 +76,7 @@ async def add_invitee_to_booking(
|
||||
logger.info(
|
||||
f"Successfully added invitee with email {user_email} to booking_id: {booking_id}"
|
||||
)
|
||||
return invitee
|
||||
return invitee.user
|
||||
except Exception as e:
|
||||
logger.error(
|
||||
f"Failed to add invitee with email {user_email} to"
|
||||
|
||||
@@ -15,17 +15,12 @@ from sqlalchemy import update
|
||||
from sqlalchemy.exc import NoResultFound
|
||||
from sqlalchemy.ext.asyncio import AsyncSession
|
||||
|
||||
from backend.models import Booking
|
||||
from backend.models import Room
|
||||
from backend.models import User
|
||||
from backend.models import RoomList
|
||||
|
||||
|
||||
logger = logging.getLogger(__name__)
|
||||
|
||||
type UserList = list[User]
|
||||
type RoomList = list[Room]
|
||||
type BookingList = list[Booking]
|
||||
|
||||
|
||||
class RoomParams(TypedDict):
|
||||
"""Parameters for updating a room.
|
||||
@@ -35,7 +30,7 @@ class RoomParams(TypedDict):
|
||||
"""
|
||||
|
||||
|
||||
async def get_rooms(session: AsyncSession):
|
||||
async def get_rooms(session: AsyncSession) -> RoomList:
|
||||
"""Retrieve all rooms from the database.
|
||||
|
||||
Args:
|
||||
@@ -61,7 +56,7 @@ async def get_rooms(session: AsyncSession):
|
||||
logger.debug("Exiting get_rooms")
|
||||
|
||||
|
||||
async def get_room(session: AsyncSession, room_id: int):
|
||||
async def get_room(session: AsyncSession, room_id: int) -> Room:
|
||||
"""Retrieve a room by its ID.
|
||||
|
||||
Args:
|
||||
@@ -89,7 +84,7 @@ async def get_room(session: AsyncSession, room_id: int):
|
||||
logger.debug("Exiting get_room")
|
||||
|
||||
|
||||
async def new_room(session: AsyncSession, room: Room):
|
||||
async def new_room(session: AsyncSession, room: Room) -> Room:
|
||||
"""Create a new room in the database.
|
||||
|
||||
Args:
|
||||
@@ -118,7 +113,7 @@ async def new_room(session: AsyncSession, room: Room):
|
||||
|
||||
async def update_room(
|
||||
session: AsyncSession, room_id: int, **kwargs: Unpack[RoomParams]
|
||||
):
|
||||
) -> Room:
|
||||
"""Update an existing room.
|
||||
|
||||
Args:
|
||||
@@ -151,7 +146,7 @@ async def update_room(
|
||||
logger.debug("Exiting update_room")
|
||||
|
||||
|
||||
async def delete_room(session: AsyncSession, room_id: int):
|
||||
async def delete_room(session: AsyncSession, room_id: int) -> None:
|
||||
"""Delete a room from the database.
|
||||
|
||||
Args:
|
||||
|
||||
@@ -11,17 +11,12 @@ from sqlalchemy import select
|
||||
from sqlalchemy.exc import NoResultFound
|
||||
from sqlalchemy.ext.asyncio import AsyncSession
|
||||
|
||||
from backend.models import Booking
|
||||
from backend.models import Room
|
||||
from backend.models import User
|
||||
from backend.models import UserList
|
||||
|
||||
|
||||
logger = logging.getLogger(__name__)
|
||||
|
||||
type UserList = list[User]
|
||||
type RoomList = list[Room]
|
||||
type BookingList = list[Booking]
|
||||
|
||||
|
||||
async def get_users(session: AsyncSession) -> UserList:
|
||||
"""Retrieve all users from the database.
|
||||
|
||||
Reference in New Issue
Block a user