Skip to content

Commit 763febc

Browse files
authored
Merge pull request #39 from sustech-cs304/backend
Optimize db linking and foreign key in backend
2 parents c0ea5bf + 2e24696 commit 763febc

File tree

11 files changed

+132
-110
lines changed

11 files changed

+132
-110
lines changed

backend/app/db.py

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,13 +2,16 @@
22
import os
33
from sqlalchemy import create_engine
44
from sqlalchemy.orm import sessionmaker, declarative_base
5+
from dotenv import load_dotenv
6+
7+
load_dotenv()
58

69
db_port = 5432
710
K8S_DB_HOST = "postgres"
811
if os.environ.get("ENVNAME") == "k3s":
912
DATABASE_URL = f"postgresql://{os.environ.get('POSTGRES_USER')}:{os.environ.get('POSTGRES_PASSWORD')}@{K8S_DB_HOST}:{db_port}/{os.environ.get('POSTGRES_DB')}"
1013
else:
11-
DATABASE_URL = f"postgresql://serendipity:chenmingzhi2004@localhost:{db_port}/cs304"
14+
DATABASE_URL = f"postgresql://{os.getenv('POSTGRES_USER')}:{os.getenv('POSTGRES_PASSWORD')}@localhost:{db_port}/{os.getenv('POSTGRES_DB')}"
1215

1316
engine = create_engine(DATABASE_URL, echo=True)
1417
SessionLocal = sessionmaker(autocommit=False, autoflush=False, bind=engine)

backend/app/main.py

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -31,6 +31,8 @@
3131

3232
@app.on_event("startup")
3333
def startup():
34+
Base.metadata.reflect(bind=engine)
35+
Base.metadata.drop_all(bind=engine)
3436
Base.metadata.create_all(bind=engine)
3537

3638

backend/app/models/assignment.py

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
# app/models/assignment.py
2-
from sqlalchemy import Column, Integer, String, Boolean
2+
from sqlalchemy import Column, Integer, String, Boolean, ForeignKey
33
from sqlalchemy.dialects.postgresql import ARRAY
44
from app.db import Base
55

@@ -9,8 +9,8 @@ class Assignment(Base):
99

1010
assignment_id = Column(String, primary_key=True, index=True)
1111
name = Column(String, index=True)
12-
course_id = Column(String, index=True)
13-
teacher_id = Column(String, index=True)
12+
course_id = Column(String, ForeignKey("courses.course_id"), index=True)
13+
teacher_id = Column(String, ForeignKey("users.user_id"), index=True)
1414
deadline = Column(String, index=True)
1515
isOver = Column(Boolean, index=True)
1616
materials = Column(

backend/app/models/bookmarklist.py

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
# app/models/bookmarklist.py
2-
from sqlalchemy import Column, Integer, String, Boolean
2+
from sqlalchemy import Column, Integer, String, Boolean, ForeignKey
33
from sqlalchemy.dialects.postgresql import ARRAY
44
from app.db import Base
55

@@ -8,7 +8,7 @@ class BookmarkList(Base):
88
__tablename__ = "bookmark_lists"
99

1010
list_id = Column(String, primary_key=True, index=True)
11-
material_id = Column(String, index=True)
12-
user_id = Column(String, index=True)
11+
material_id = Column(String, ForeignKey("materials.material_id"), index=True)
12+
user_id = Column(String, ForeignKey("users.user_id"), index=True)
1313
page = Column(Integer, index=True)
1414
bookmark_list = Column(ARRAY(Integer), index=True)

backend/app/models/code_snippet.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,13 +1,13 @@
11
# app/models/code_snippet.py
2-
from sqlalchemy import Column, Integer, String, Boolean
2+
from sqlalchemy import Column, Integer, String, Boolean, ForeignKey
33
from app.db import Base
44

55

66
class CodeSnippet(Base):
77
__tablename__ = "code_snippets"
88

99
snippet_id = Column(String, primary_key=True, index=True)
10-
material_id = Column(String, nullable=False)
10+
material_id = Column(String, ForeignKey("materials.material_id"), index=True, nullable=False)
1111
lang = Column(String, nullable=False)
1212
page = Column(Integer, nullable=False)
1313
content = Column(String, nullable=False)

backend/app/models/comment.py

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
# app/models/comment.py
2-
from sqlalchemy import Column, Integer, String, Boolean
2+
from sqlalchemy import Column, Integer, String, Boolean, ForeignKey
33
from sqlalchemy.dialects.postgresql import ARRAY
44
from app.db import Base
55

@@ -9,7 +9,7 @@ class Comment(Base):
99

1010
comment_id = Column(String, primary_key=True, index=True)
1111
content = Column(String, nullable=False)
12-
user_id = Column(String, nullable=False)
13-
material_id = Column(String, nullable=False)
12+
user_id =Column(String, ForeignKey("users.user_id"), index=True, nullable=False)
13+
material_id = Column(String, ForeignKey("materials.material_id"), index=True, nullable=False)
1414
page = Column(Integer, nullable=False)
1515
ancestor_id = Column(String, nullable=True)

backend/app/models/material.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
# app/models/material.py
2-
from sqlalchemy import Column, Integer, String, Boolean
2+
from sqlalchemy import Column, Integer, String, Boolean, ForeignKey
33
from sqlalchemy.dialects.postgresql import ARRAY
44
from app.db import Base
55

@@ -9,7 +9,7 @@ class Material(Base):
99

1010
material_id = Column(String, primary_key=True, index=True)
1111
material_name = Column(String, nullable=False)
12-
section_id = Column(String, nullable=False)
12+
section_id = Column(String, ForeignKey("sections.section_id"), index=True, nullable=False)
1313
data = Column(String, nullable=False)
1414
comments = Column(
1515
ARRAY(String), nullable=True

backend/app/models/note.py

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
# app/models/note.py
2-
from sqlalchemy import Column, Integer, String, Boolean
2+
from sqlalchemy import Column, Integer, String, Boolean, ForeignKey
33
from sqlalchemy.dialects.postgresql import ARRAY
44
from app.db import Base
55

@@ -8,8 +8,8 @@ class Note(Base):
88
__tablename__ = "notes"
99

1010
note_id = Column(String, primary_key=True, index=True)
11-
user_id = Column(String, nullable=False)
12-
material_id = Column(String, nullable=False)
11+
user_id = Column(String, ForeignKey("users.user_id"), nullable=False)
12+
material_id = Column(String, ForeignKey("materials.material_id"), nullable=False)
1313
is_snippet = Column(Boolean, default=False)
1414
content = Column(String, nullable=False)
1515
code_snippet = Column(

backend/app/models/schedule.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
# app/models/schedule.py
2-
from sqlalchemy import Column, Integer, String, Boolean
2+
from sqlalchemy import Column, Integer, String, Boolean, ForeignKey
33
from sqlalchemy.dialects.postgresql import ARRAY
44
from app.db import Base
55

backend/app/models/section.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
# app/models/section.py
2-
from sqlalchemy import Column, Integer, String, Boolean
2+
from sqlalchemy import Column, Integer, String, Boolean, ForeignKey
33
from sqlalchemy.dialects.postgresql import ARRAY
44
from app.db import Base
55

@@ -8,7 +8,7 @@ class Section(Base):
88
__tablename__ = "sections"
99

1010
section_id = Column(String, primary_key=True, index=True)
11-
course_id = Column(String, index=True)
11+
course_id = Column(String, ForeignKey("courses.course_id"), nullable=False, index=True)
1212
name = Column(String, index=True)
1313
materials = Column(
1414
ARRAY(String), index=True

0 commit comments

Comments
 (0)