Skip to content

Commit

Permalink
feat: #52 update models (#56)
Browse files Browse the repository at this point in the history
- re-design the models to adapt new workflow
  • Loading branch information
miguelcsx committed Aug 31, 2024
1 parent 95276ef commit 8614423
Show file tree
Hide file tree
Showing 15 changed files with 115 additions and 165 deletions.
5 changes: 4 additions & 1 deletion .github/workflows/python-app.yml
Original file line number Diff line number Diff line change
Expand Up @@ -26,8 +26,11 @@ jobs:
- name: Install dependencies
run: |
python -m pip install --upgrade pip
pip install flake8 pytest
pip install flake8 pytest black
if [ -f requirements.txt ]; then pip install -r requirements.txt; fi
-name: Format with black
run: |
black .
- name: Lint with flake8
run: |
# stop the build if there are Python syntax errors or undefined names
Expand Down
15 changes: 15 additions & 0 deletions .pre-commit-config.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,15 @@
repos:
- repo: local
hooks:
- id: run-black
name: Run Black
entry: ./scripts/run_black.sh
language: system
pass_filenames: false

- id: run-pylint
name: Run Pylint
entry: ./scripts/run_pylint.sh
language: system
pass_filenames: false

26 changes: 0 additions & 26 deletions app/api/endpoints/courses.py

This file was deleted.

16 changes: 4 additions & 12 deletions app/api/endpoints/user.py
Original file line number Diff line number Diff line change
Expand Up @@ -25,8 +25,7 @@

@router.post("/users/", response_model=UserInDBBase)
def create_user_endpoint(
user: UserCreate,
db: Session = Depends(get_db)
user: UserCreate, db: Session = Depends(get_db)
) -> UserInDBBase:
return create_user(db, user)

Expand All @@ -41,18 +40,14 @@ def read_user(user_id: int, db: Session = Depends(get_db)) -> UserInDBBase:

@router.get("/users/", response_model=list[UserInDBBase])
def read_users(
skip: int = 0,
limit: int = 10,
db: Session = Depends(get_db)
skip: int = 0, limit: int = 10, db: Session = Depends(get_db)
) -> list[UserInDBBase]:
return get_users(db, skip, limit)


@router.put("/users/{user_id}", response_model=UserInDBBase)
def update_user_endpoint(
user_id: int,
user: UserUpdate,
db: Session = Depends(get_db)
user_id: int, user: UserUpdate, db: Session = Depends(get_db)
) -> UserInDBBase:
db_user = get_user(db, user_id)
if db_user is None:
Expand All @@ -61,10 +56,7 @@ def update_user_endpoint(


@router.delete("/users/{user_id}", response_model=UserInDBBase)
def delete_user_endpoint(
user_id: int,
db: Session = Depends(get_db)
) -> UserInDBBase:
def delete_user_endpoint(user_id: int, db: Session = Depends(get_db)) -> UserInDBBase:
user = delete_user(db, user_id)
if user is None:
raise HTTPException(status_code=404, detail="User not found")
Expand Down
45 changes: 0 additions & 45 deletions app/api/v_1/endpoints.py

This file was deleted.

92 changes: 47 additions & 45 deletions app/database/models.py
Original file line number Diff line number Diff line change
@@ -1,16 +1,20 @@
# app/database/models.py

from enum import Enum
from sqlalchemy import (
Column,
Integer,
String,
ForeignKey,
Text,
)
from sqlalchemy.orm import relationship
from app.database.session import Base


class ActivityType(Enum):
question = "question"


class User(Base):
__tablename__ = "users"

Expand All @@ -21,68 +25,66 @@ class User(Base):
created_at = Column(String)
updated_at = Column(String)

courses = relationship("Course", back_populates="creator")
topics = relationship("Topic", back_populates="created_by")
study_sessions = relationship("StudySession", back_populates="user")
activities = relationship("Activity", back_populates="user")
questions = relationship("Question", back_populates="user")
answers = relationship("Answer", back_populates="user")


class Course(Base):
__tablename__ = "courses"
class StudySession(Base):
__tablename__ = "study_sessions"

id: Column = Column(Integer, primary_key=True, index=True)
title: Column = Column(String, index=True)
description: Column = Column(Text)
creator_id: Column = Column(Integer, ForeignKey("users.id"))
created_at = Column(String)
updated_at = Column(String)
user_id: Column = Column(Integer, ForeignKey("users.id"))
start_time: Column = Column(String)
end_time: Column = Column(String)

creator = relationship("User", back_populates="courses")
topics = relationship("Topic", back_populates="course")
user = relationship("User", back_populates="study_sessions")
activities = relationship("Activity", back_populates="study_session")


class Topic(Base):
__tablename__ = "topics"
class Activity(Base):
__tablename__ = "activities"

id: Column = Column(Integer, primary_key=True, index=True)
title: Column = Column(String, index=True)
description: Column = Column(Text)
course_id: Column = Column(Integer, ForeignKey("courses.id"), nullable=True)
creator_id: Column = Column(Integer, ForeignKey("users.id"))
created_at: Column = Column(String)
updated_at: Column = Column(String)
user_id: Column = Column(Integer, ForeignKey("users.id"))
study_session_id: Column = Column(Integer, ForeignKey("study_sessions.id"))
type: Column = Column(Enum(ActivityType), nullable=False)
activity: Column = Column(String)
created_at = Column(String)

user = relationship("User", back_populates="activities")
study_session = relationship("StudySession", back_populates="activities")

course = relationship("Course", back_populates="topics")
created_by = relationship("User", back_populates="topics")
resources = relationship("Resource", back_populates="topic")
study_sessions = relationship("StudySession", back_populates="topic")
question = relationship("Question", back_populates="activity", uselist=False)


class Resource(Base):
__tablename__ = "resources"
class Question(Base):
__tablename__ = "questions"

id: Column = Column(Integer, primary_key=True, index=True)
title: Column = Column(String, index=True)
description: Column = Column(Text)
type_of: Column = Column(String)
url: Column = Column(String)
topic_id: Column = Column(Integer, ForeignKey("topics.id"))
creator_id: Column = Column(Integer, ForeignKey("users.id"))
created_at: Column = Column(String)
updated_at: Column = Column(String)
user_id: Column = Column(Integer, ForeignKey("users.id"))
activity_id: Column = Column(Integer, ForeignKey("activities.id"))
question: Column = Column(String)

topic = relationship("Topic", back_populates="resources")
creator = relationship("User")
user = relationship("User", back_populates="questions")
answers = relationship("Answer", back_populates="question")
activity = relationship("Activity", back_populates="question")


class StudySession(Base):
__tablename__ = "study_sessions"
class Answer(Base):
__tablename__ = "answers"

id: Column = Column(Integer, primary_key=True, index=True)
user_id: Column = Column(Integer, ForeignKey("users.id"))
topic_id: Column = Column(Integer, ForeignKey("topics.id"))
start_time: Column = Column(String)
end_time: Column = Column(String)
technique: Column = Column(String)

user = relationship("User", back_populates="study_sessions")
topic = relationship("Topic", back_populates="study_sessions")
question_id: Column = Column(Integer, ForeignKey("questions.id"))
answer: Column = Column(String)

user = relationship("User", back_populates="answers")
question = relationship("Question", back_populates="answers")
parent_answer = relationship(
"Answer", remote_side=[id], back_populates="child_answers"
)
child_answers = relationship(
"Answer", back_populates="parent_answer", cascade="all, delete-orphan"
)
4 changes: 1 addition & 3 deletions app/database/session.py
Original file line number Diff line number Diff line change
Expand Up @@ -20,9 +20,7 @@
)

SessionLocal: sessionmaker = sessionmaker(
autocommit=False,
autoflush=False,
bind=engine
autocommit=False, autoflush=False, bind=engine
)

Base = declarative_base()
Expand Down
13 changes: 0 additions & 13 deletions app/repositories/course_repository.py

This file was deleted.

17 changes: 0 additions & 17 deletions app/schemas/course.py

This file was deleted.

4 changes: 4 additions & 0 deletions app/schemas/user.py
Original file line number Diff line number Diff line change
Expand Up @@ -2,17 +2,21 @@

from pydantic import BaseModel


class UserBase(BaseModel):
username: str
email: str
role: str


class UserCreate(UserBase):
pass


class UserUpdate(UserBase):
pass


class UserInDBBase(UserBase):
id: int

Expand Down
5 changes: 2 additions & 3 deletions main.py
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,6 @@
import uvicorn
from app.api.endpoints import (
user,
courses,
)
from app.database.session import (
Base,
Expand All @@ -18,7 +17,7 @@
Base.metadata.create_all(bind=engine)

app.include_router(user.router)
app.include_router(courses.router)


def get_session():
db = Session(bind=engine)
Expand All @@ -33,7 +32,7 @@ def read_root():
return {"Hello": "World"}


def main() -> None:
def main() -> None:
uvicorn.run(app, host="0.0.0.0", port=8000)


Expand Down
Loading

0 comments on commit 8614423

Please sign in to comment.