Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

feat: #52 update models #56

Merged
merged 1 commit into from
Aug 31, 2024
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
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
Loading