Skip to content

Commit 5ed15a2

Browse files
authored
Merge pull request #27 from KKU-NoteFlow/fix/summary
1027 0759
2 parents e05cb38 + f735dd7 commit 5ed15a2

File tree

11 files changed

+789
-333
lines changed

11 files changed

+789
-333
lines changed

models/checklist.py

Lines changed: 8 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -1,17 +1,16 @@
1-
from sqlalchemy import Column, Integer, String, Boolean, TIMESTAMP, ForeignKey, text
1+
from sqlalchemy import Column, Integer, String, Boolean, ForeignKey, text
22
from sqlalchemy.orm import relationship
33
from .base import Base
44

5+
56
class Checklist(Base):
67
__tablename__ = "checklist"
78

8-
id = Column(Integer, primary_key=True, autoincrement=True)
9-
user_id = Column(Integer, ForeignKey("user.u_id", ondelete="CASCADE"), nullable=False)
10-
title = Column(String(255), nullable=False)
11-
is_clear = Column(Boolean, nullable=False, server_default=text("0"))
12-
created_at = Column(TIMESTAMP, nullable=False, server_default=text("CURRENT_TIMESTAMP"))
13-
updated_at = Column(TIMESTAMP, nullable=False,
14-
server_default=text("CURRENT_TIMESTAMP"),
15-
onupdate=text("CURRENT_TIMESTAMP"))
9+
id = Column(Integer, primary_key=True, autoincrement=True)
10+
# DB 컬럼명은 u_id 이므로 명시적으로 매핑
11+
user_id = Column("u_id", Integer, ForeignKey("user.u_id", ondelete="CASCADE"), nullable=False)
12+
# DB 컬럼명은 checklist_title 이므로 명시적으로 매핑
13+
title = Column("checklist_title", String(255), nullable=False)
14+
is_clear = Column(Boolean, nullable=False, server_default=text("0"))
1615

1716
user = relationship("User", back_populates="checklists")

models/file.py

Lines changed: 11 additions & 27 deletions
Original file line numberDiff line numberDiff line change
@@ -1,37 +1,21 @@
1-
2-
from sqlalchemy.orm import relationship
3-
41
from sqlalchemy import Column, Integer, String, ForeignKey, TIMESTAMP, text
52
from sqlalchemy.orm import relationship
63
from .base import Base
74

5+
86
class File(Base):
97
__tablename__ = "file"
108

11-
id = Column(Integer, primary_key=True, autoincrement=True)
12-
13-
user_id = Column(Integer, ForeignKey('user.u_id', ondelete='CASCADE'), nullable=False)
14-
folder_id = Column(Integer, ForeignKey('folder.id', ondelete='SET NULL'), nullable=True)
15-
note_id = Column(Integer, ForeignKey('note.id', ondelete='CASCADE'), nullable=True)
9+
id = Column(Integer, primary_key=True, autoincrement=True)
10+
user_id = Column(Integer, ForeignKey("user.u_id", ondelete="CASCADE"), nullable=False)
11+
folder_id = Column(Integer, ForeignKey("folder.id", ondelete="SET NULL"), nullable=True)
12+
note_id = Column(Integer, ForeignKey("note.id", ondelete="CASCADE"), nullable=True)
1613
original_name = Column(String(255), nullable=False)
17-
saved_path = Column(String(512), nullable=False)
18-
content_type = Column(String(100), nullable=False)
19-
created_at = Column(TIMESTAMP, nullable=False, server_default=text('CURRENT_TIMESTAMP'))
14+
saved_path = Column(String(512), nullable=False)
15+
content_type = Column(String(100), nullable=False)
16+
created_at = Column(TIMESTAMP, nullable=False, server_default=text("CURRENT_TIMESTAMP"))
2017

21-
# ✅ 관계
22-
user = relationship("User", back_populates="files")
18+
# relationships
19+
user = relationship("User", back_populates="files")
2320
folder = relationship("Folder", back_populates="files")
24-
note = relationship("Note", back_populates="files")
25-
26-
user_id = Column(Integer, ForeignKey("user.u_id", ondelete="CASCADE"), nullable=False)
27-
folder_id = Column(Integer, ForeignKey("folder.id", ondelete="SET NULL"), nullable=True)
28-
note_id = Column(Integer, ForeignKey("note.id", ondelete="SET NULL"), nullable=True)
29-
original_name = Column(String(255), nullable=False)
30-
saved_path = Column(String(512), nullable=False)
31-
content_type = Column(String(100), nullable=False)
32-
created_at = Column(TIMESTAMP, nullable=False, server_default=text("CURRENT_TIMESTAMP"))
33-
34-
# relations
35-
user = relationship("User", back_populates="files")
36-
note = relationship("Note", back_populates="files")
37-
21+
note = relationship("Note", back_populates="files")

models/folder.py

Lines changed: 16 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -2,30 +2,24 @@
22
from sqlalchemy.orm import relationship
33
from .base import Base
44

5+
56
class Folder(Base):
67
__tablename__ = "folder"
78

8-
id = Column(Integer, primary_key=True, autoincrement=True)
9-
user_id = Column(Integer, ForeignKey("user.u_id", ondelete="CASCADE"), nullable=False)
10-
name = Column(String(100), nullable=False)
11-
parent_id = Column(Integer, ForeignKey("folder.id", ondelete="SET NULL"), nullable=True)
9+
id = Column(Integer, primary_key=True, autoincrement=True)
10+
user_id = Column(Integer, ForeignKey("user.u_id", ondelete="CASCADE"), nullable=False)
11+
name = Column(String(100), nullable=False)
12+
parent_id = Column(Integer, ForeignKey("folder.id", ondelete="SET NULL"), nullable=True)
1213
created_at = Column(TIMESTAMP, nullable=False, server_default=text("CURRENT_TIMESTAMP"))
13-
updated_at = Column(TIMESTAMP, nullable=False,
14-
15-
server_default=text('CURRENT_TIMESTAMP'),
16-
onupdate=text('CURRENT_TIMESTAMP'))
17-
18-
# ✅ 관계
19-
user = relationship("User", back_populates="folders")
20-
parent = relationship("Folder", remote_side=[id], backref="children")
21-
notes = relationship("Note", back_populates="folder", cascade="all, delete")
22-
files = relationship("File", back_populates="folder", cascade="all, delete")
23-
24-
server_default=text("CURRENT_TIMESTAMP"),
25-
onupdate=text("CURRENT_TIMESTAMP"))
26-
27-
# relations
28-
user = relationship("User")
29-
parent = relationship("Folder", remote_side=[id], backref="children")
30-
notes = relationship("Note", back_populates="folder", cascade="all, delete")
14+
updated_at = Column(
15+
TIMESTAMP,
16+
nullable=False,
17+
server_default=text("CURRENT_TIMESTAMP"),
18+
onupdate=text("CURRENT_TIMESTAMP"),
19+
)
3120

21+
# relationships
22+
user = relationship("User", back_populates="folders")
23+
parent = relationship("Folder", remote_side=[id], backref="children")
24+
notes = relationship("Note", back_populates="folder", cascade="all, delete")
25+
files = relationship("File", back_populates="folder", cascade="all, delete")

models/note.py

Lines changed: 17 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -2,29 +2,26 @@
22
from sqlalchemy.orm import relationship
33
from .base import Base
44

5+
56
class Note(Base):
67
__tablename__ = "note"
78

8-
id = Column(Integer, primary_key=True, autoincrement=True)
9-
user_id = Column(Integer, ForeignKey("user.u_id", ondelete="CASCADE"), nullable=False)
10-
folder_id = Column(Integer, ForeignKey("folder.id", ondelete="SET NULL"), nullable=True)
11-
title = Column(String(255), nullable=False)
12-
content = Column(Text)
13-
is_favorite = Column(Boolean, nullable=False, server_default=text("FALSE"))
9+
id = Column(Integer, primary_key=True, autoincrement=True)
10+
user_id = Column(Integer, ForeignKey("user.u_id", ondelete="CASCADE"), nullable=False)
11+
folder_id = Column(Integer, ForeignKey("folder.id", ondelete="SET NULL"), nullable=True)
12+
title = Column(String(255), nullable=False)
13+
content = Column(Text)
14+
is_favorite = Column(Boolean, nullable=False, server_default=text("FALSE"))
1415
last_accessed = Column(TIMESTAMP, nullable=True)
15-
created_at = Column(TIMESTAMP, nullable=False, server_default=text("CURRENT_TIMESTAMP"))
16-
updated_at = Column(TIMESTAMP, nullable=False,
17-
18-
server_default=text('CURRENT_TIMESTAMP'),
19-
onupdate=text('CURRENT_TIMESTAMP'))
20-
21-
# ✅ 관계
22-
23-
server_default=text("CURRENT_TIMESTAMP"),
24-
onupdate=text("CURRENT_TIMESTAMP"))
25-
26-
# relations
16+
created_at = Column(TIMESTAMP, nullable=False, server_default=text("CURRENT_TIMESTAMP"))
17+
updated_at = Column(
18+
TIMESTAMP,
19+
nullable=False,
20+
server_default=text("CURRENT_TIMESTAMP"),
21+
onupdate=text("CURRENT_TIMESTAMP"),
22+
)
2723

28-
user = relationship("User", back_populates="notes")
24+
# relationships
25+
user = relationship("User", back_populates="notes")
2926
folder = relationship("Folder", back_populates="notes")
30-
files = relationship("File", back_populates="note", cascade="all, delete")
27+
files = relationship("File", back_populates="note", cascade="all, delete")

routers/checklist.py

Lines changed: 16 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -7,13 +7,27 @@
77

88
router = APIRouter(prefix="/api/v1/checklists", tags=["Checklists"])
99

10+
@router.get("")
11+
def list_checklists(db: Session = Depends(get_db), user=Depends(get_current_user)):
12+
"""현재 사용자 체크리스트 전체 목록 반환(최신순)."""
13+
items = (
14+
db.query(Checklist)
15+
.filter(Checklist.user_id == user.u_id)
16+
.order_by(Checklist.id.desc())
17+
.all()
18+
)
19+
return [
20+
{"id": it.id, "title": it.title, "is_clear": int(bool(it.is_clear))}
21+
for it in items
22+
]
23+
1024
@router.post("", status_code=status.HTTP_201_CREATED)
1125
def create_checklist(title: str, db: Session = Depends(get_db), user=Depends(get_current_user)):
1226
obj = Checklist(user_id=user.u_id, title=title, is_clear=False)
1327
db.add(obj)
1428
db.commit()
1529
db.refresh(obj)
16-
return {"id": obj.id, "title": obj.title, "is_clear": obj.is_clear}
30+
return {"id": obj.id, "title": obj.title, "is_clear": int(bool(obj.is_clear))}
1731

1832
@router.patch("/{checklist_id}/clear")
1933
def set_clear_state(checklist_id: int, is_clear: bool, db: Session = Depends(get_db), user=Depends(get_current_user)):
@@ -23,4 +37,4 @@ def set_clear_state(checklist_id: int, is_clear: bool, db: Session = Depends(get
2337
obj.is_clear = bool(is_clear)
2438
db.commit()
2539
db.refresh(obj)
26-
return {"id": obj.id, "is_clear": obj.is_clear}
40+
return {"id": obj.id, "is_clear": int(bool(obj.is_clear))}

0 commit comments

Comments
 (0)