diff --git a/format.sh b/format.sh new file mode 100644 index 0000000..3c6cc0e --- /dev/null +++ b/format.sh @@ -0,0 +1,3 @@ +flake8 src/* +black src/* +isort src/* diff --git a/requirements.txt b/requirements.txt index 36b6aad..78d704c 100644 --- a/requirements.txt +++ b/requirements.txt @@ -4,3 +4,7 @@ sqlalchemy uvicorn[standard] psycopg2-binary fastapi_utils +flake8 +black +isort +interrogate \ No newline at end of file diff --git a/src/crud.py b/src/crud.py index 6be16ce..c6263ca 100644 --- a/src/crud.py +++ b/src/crud.py @@ -1,7 +1,9 @@ from sqlalchemy.orm import Session -from models import User, HighScore, CourseProgress -import schemas, models +import models +import schemas +from models import CourseProgress, HighScore, User + def get_user(db: Session, user_id: int): return db.query(User).filter(User.user_id == user_id).first() @@ -21,4 +23,3 @@ def create_user(db: Session, user: schemas.users.UserCreate): db.commit() db.refresh(db_user) return db_user - diff --git a/src/database.py b/src/database.py index 9be44c1..6417662 100644 --- a/src/database.py +++ b/src/database.py @@ -3,7 +3,7 @@ from sqlalchemy.ext.declarative import declarative_base from sqlalchemy.orm import sessionmaker # SQLALCHEMY_DATABASE_URL = "sqlite:///./sql_app.db" -SQLALCHEMY_DATABASE_URL = 'postgresql://admin:WeSign123!@localhost/wesigndev' +SQLALCHEMY_DATABASE_URL = "postgresql://admin:WeSign123!@localhost/wesigndev" engine = create_engine(SQLALCHEMY_DATABASE_URL) diff --git a/src/enums.py b/src/enums.py index 01e323e..c15e742 100644 --- a/src/enums.py +++ b/src/enums.py @@ -1,5 +1,5 @@ from fastapi_utils.enums import StrEnum -from sqlalchemy.types import TypeDecorator, Enum +from sqlalchemy.types import Enum, TypeDecorator class StrEnumType(TypeDecorator): @@ -18,14 +18,14 @@ class StrEnumType(TypeDecorator): if value is None: return None return self.enum_class(value) - + class MinigameEnum(StrEnum): - SpellingBee = 'SpellingBee' - Hangman = 'Hangman' - JustSign = 'JustSign' + SpellingBee = "SpellingBee" + Hangman = "Hangman" + JustSign = "JustSign" class CourseEnum(StrEnum): - Fingerspelling = 'Fingerspelling' - Animals = 'Animals' + Fingerspelling = "Fingerspelling" + Animals = "Animals" diff --git a/src/main.py b/src/main.py index a5a10a0..2856f02 100644 --- a/src/main.py +++ b/src/main.py @@ -1,15 +1,18 @@ +from typing import List + from fastapi import Depends, FastAPI, HTTPException from sqlalchemy.orm import Session -from models import Base -from database import SessionLocal, engine -from schemas import users -from typing import List + import crud +from database import SessionLocal, engine +from models import Base +from schemas import users app = FastAPI() Base.metadata.create_all(bind=engine) + def get_db(): db = SessionLocal() try: @@ -25,6 +28,7 @@ async def root(): print("Hello world") return {"message": "Hello world!"} + @app.post("/users", response_model=users.User) async def create_user(user: users.UserCreate, db: Session = Depends(get_db)): db_user = crud.get_user_by_username(db, username=user.username) @@ -35,8 +39,5 @@ async def create_user(user: users.UserCreate, db: Session = Depends(get_db)): @app.get("/users", response_model=List[users.User]) async def read_users(db: Session = Depends(get_db)): - print("here") users = crud.get_users(db) - print(users[0].high_scores) return users - diff --git a/src/models.py b/src/models.py index 898c2cd..9781d5b 100644 --- a/src/models.py +++ b/src/models.py @@ -1,10 +1,11 @@ -from sqlalchemy import Boolean, Column, ForeignKey, Integer, String, Float -from sqlalchemy.orm import relationship -from sqlalchemy.dialects.postgresql import ARRAY from enum import Enum -from enums import MinigameEnum, CourseEnum, StrEnumType +from sqlalchemy import Boolean, Column, Float, ForeignKey, Integer, String +from sqlalchemy.dialects.postgresql import ARRAY +from sqlalchemy.orm import relationship + from database import Base +from enums import CourseEnum, MinigameEnum, StrEnumType class User(Base): @@ -14,9 +15,13 @@ class User(Base): username = Column(String, unique=True, index=True, nullable=False) hashed_password = Column(String, nullable=False) - high_scores = relationship("HighScore", back_populates="owner", cascade="all, delete", lazy="dynamic") - course_progress = relationship("CourseProgress", back_populates="owner", cascade="all, delete", lazy="dynamic") - + high_scores = relationship( + "HighScore", back_populates="owner", cascade="all, delete", lazy="dynamic" + ) + course_progress = relationship( + "CourseProgress", back_populates="owner", cascade="all, delete", lazy="dynamic" + ) + # add a new column to store the high_score IDs high_score_ids = Column(ARRAY(Integer), default=[]) @@ -34,7 +39,6 @@ class HighScore(Base): owner = relationship("User", back_populates="high_scores") - class CourseProgress(Base): __tablename__ = "course_progress" @@ -43,4 +47,3 @@ class CourseProgress(Base): course = Column(StrEnumType(CourseEnum), nullable=False) owner_id = Column(Integer, ForeignKey("users.user_id")) owner = relationship("User", back_populates="course_progress") - diff --git a/src/schemas/courseprogress.py b/src/schemas/courseprogress.py index 8f42a4a..994001f 100644 --- a/src/schemas/courseprogress.py +++ b/src/schemas/courseprogress.py @@ -1,4 +1,5 @@ from pydantic import BaseModel + from enums import CourseEnum diff --git a/src/schemas/highscores.py b/src/schemas/highscores.py index 726e647..efe15de 100644 --- a/src/schemas/highscores.py +++ b/src/schemas/highscores.py @@ -1,4 +1,5 @@ from pydantic import BaseModel + from src.enums import MinigameEnum diff --git a/src/schemas/users.py b/src/schemas/users.py index cbcaa6d..f0cfda7 100644 --- a/src/schemas/users.py +++ b/src/schemas/users.py @@ -1,6 +1,7 @@ -from pydantic import BaseModel from typing import List +from pydantic import BaseModel + class User(BaseModel): user_id: int