diff --git a/backend/db/crud.py b/backend/db/crud.py index 6315054655b56f50af8d58009d7c874dd7f8a7d3..5bff687aae324160f3fccbc1f52abc0de6eed804 100644 --- a/backend/db/crud.py +++ b/backend/db/crud.py @@ -125,3 +125,44 @@ def delete_news(id: int, db: Session): else: db.query(models.News).filter(models.News.id == id).delete() db.commit() + + +# Define CRUD operation for the opening hours + +def get_opening_hours(place: str, db: Session): + """ Get the opening hours for the given place """ + opening_hours = db.query( + models.OpeningHours + ).filter( + models.OpeningHours.place == place + ).order_by( + models.OpeningHours.day, models.OpeningHours.timeslot.desc() + ).all() + return opening_hours + + +def get_timeslot(place: str, day: int, timeslot: bool, db: Session): + """ Get the opening hours for the given place and timeslot""" + opening_hours = db.query(models.OpeningHours).filter( + models.OpeningHours.place == place, + models.OpeningHours.day == day, + models.OpeningHours.timeslot == timeslot).first() + return opening_hours + + +def create_opening_hours(new_opening_hours: schemas.OpeningHoursBase, db: Session): + """ Add opening hours to the database """ + db_opening_hours = models.News(**new_opening_hours.dict()) + db.add(db_opening_hours) + db.commit() + db.refresh(db_opening_hours) + return db_opening_hours + + +def delete_opening_hours(id: int, db: Session): + """ Delete the opening hours with the matching id """ + if id == 0: + db.query(models.OpeningHours).delete() + else: + db.query(models.OpeningHours).filter(models.OpeningHours.id == id).delete() + db.commit() diff --git a/backend/db/models.py b/backend/db/models.py index 898bf95484427efadafd09f73b590769fb229cea..58c3afa8be59b81ba9007d8365c350accd08d761 100644 --- a/backend/db/models.py +++ b/backend/db/models.py @@ -1,7 +1,7 @@ """ Models of the database for magasin app """ -from sqlalchemy import Column, Integer, DateTime, Float, Interval, String, Text +from sqlalchemy import Column, Integer, DateTime, Float, Interval, String, Text, Boolean from db.database import Base @@ -28,8 +28,8 @@ class Comments(Base): class News(Base): - """Records sql table model""" - __tablename__ = "News sql table model" + """News sql table model""" + __tablename__ = "news" id = Column(Integer, primary_key=True, index=True) title = Column(String(50)) @@ -37,3 +37,17 @@ class News(Base): published_at = Column(DateTime) end_date = Column(DateTime) place = Column(String(10)) + + +class OpeningHours(Base): + """OpeningHours sql table model""" + __tablename__ = "opening_hours" + + id = Column(Integer, primary_key=True, index=True) + place = Column(String(10)) + day= Column(Integer) + timeslot = Column(Boolean) + open_hour = Column(Integer) + open_minute = Column(Integer) + close_hour = Column(Integer) + close_minute = Column(Integer) diff --git a/backend/db/schemas.py b/backend/db/schemas.py index 71fe821a3c09d88cbdee83cfc214945fcc3518fd..474dd946002ebc435bb8269c1b37816198948068 100644 --- a/backend/db/schemas.py +++ b/backend/db/schemas.py @@ -52,3 +52,22 @@ class News(NewsBase): class Config: orm_mode = True + + +class OpeningHoursBase(BaseModel): + """Database opening_hours base schema""" + place: str = Field(..., title="Name of the RU corresponding the given record") + day: int = Field(..., title="Day of the week") + timeslot: bool = Field(..., title="Service slot (True for midday, False for evening)") + open_hour: int = Field(..., title="Hour of the opening time") + open_minute: int = Field(..., title="Minute of the opening time") + close_hour: int = Field(..., title="Hour of the closing time") + close_minute: int = Field(..., title="Minute of the closing time") + + +class OpeningHours(OpeningHoursBase): + """Database opening_hours base schema""" + id: int + + class Config: + orm_mode = True diff --git a/backend/main.py b/backend/main.py index d4d2ed49d8b5d2e69c4a45a7bcc8b1006f389a8b..705da50639356f7b9c1ef11196c6590c926158db 100644 --- a/backend/main.py +++ b/backend/main.py @@ -4,7 +4,7 @@ from dotenv import load_dotenv import os from db import database, models -from routers import stats, comments, news +from routers import stats, comments, news, opening_hours app = FastAPI(docs_url="/api/docs", openapi_url="/api/openapi.json") @@ -34,6 +34,7 @@ def on_startup(): app.include_router(stats.router) app.include_router(comments.router) app.include_router(news.router) +app.include_router(opening_hours.router) """ diff --git a/backend/routers/opening_hours.py b/backend/routers/opening_hours.py new file mode 100644 index 0000000000000000000000000000000000000000..5f2725e27dc411a1cf2ca7b7afc1950941537303 --- /dev/null +++ b/backend/routers/opening_hours.py @@ -0,0 +1,29 @@ +from fastapi import APIRouter, Depends +from sqlalchemy.orm import Session +from typing import List + +from db import schemas, crud +from db.database import get_db + + +router = APIRouter(prefix="/api/opening_hours", tags=["opening_hours"]) + + +@router.get('/{place}', response_model=List[schemas.OpeningHours]) +async def get_opening_hours(place: str, page: int = 1, db: Session = Depends(get_db)): + return crud.get_opening_hours(place, page, db) + + +@router.get('/{place}/{day}/{timeslot}', response_model=List[schemas.OpeningHours]) +async def get_timeslot(place: str, day: int, timeslot: bool, db: Session = Depends(get_db)): + return crud.get_timeslot(place, day, timeslot, db) + + +@router.post('/{place}', response_model=schemas.OpeningHours) +async def create_opening_hours(place: str, opening_hours: schemas.OpeningHoursBase, db: Session = Depends(get_db)): + return crud.create_opening_hours(place, opening_hours, db) + + +@router.delete('/{id}', response_model=None) +async def delete_opening_hours(id: int, db: Session = Depends(get_db)): + return crud.delete_opening_hours(id, db)