- Dockerfile: Poetry 대신 직접 pip 설치로 의존성 문제 해결 - highlights.py: UUID 임포트 추가, 들여쓰기 오류 수정, 1:N 관계 지원 - notes.py: Pydantic v2 호환성 수정, 다중 메모 지원 - models: highlight-note 관계를 1:1에서 1:N으로 변경 - docker-compose.yml: 배포용 환경변수 설정 ✅ 로그인 API 정상 작동 확인 ✅ 나스/맥미니 배포 준비 완료
48 lines
1.9 KiB
Python
48 lines
1.9 KiB
Python
"""
|
|
하이라이트 모델
|
|
"""
|
|
from sqlalchemy import Column, String, DateTime, Text, Integer, ForeignKey
|
|
from sqlalchemy.dialects.postgresql import UUID
|
|
from sqlalchemy.orm import relationship
|
|
from sqlalchemy.sql import func
|
|
import uuid
|
|
|
|
from ..core.database import Base
|
|
|
|
|
|
class Highlight(Base):
|
|
"""하이라이트 테이블"""
|
|
__tablename__ = "highlights"
|
|
|
|
id = Column(UUID(as_uuid=True), primary_key=True, default=uuid.uuid4)
|
|
|
|
# 연결 정보
|
|
user_id = Column(UUID(as_uuid=True), ForeignKey("users.id"), nullable=False)
|
|
document_id = Column(UUID(as_uuid=True), ForeignKey("documents.id"), nullable=False)
|
|
|
|
# 텍스트 위치 정보
|
|
start_offset = Column(Integer, nullable=False) # 시작 위치
|
|
end_offset = Column(Integer, nullable=False) # 끝 위치
|
|
selected_text = Column(Text, nullable=False) # 선택된 텍스트 (검색용)
|
|
|
|
# DOM 위치 정보 (정확한 복원을 위해)
|
|
element_selector = Column(Text, nullable=True) # CSS 선택자
|
|
start_container_xpath = Column(Text, nullable=True) # 시작 컨테이너 XPath
|
|
end_container_xpath = Column(Text, nullable=True) # 끝 컨테이너 XPath
|
|
|
|
# 스타일 정보
|
|
highlight_color = Column(String(7), default="#FFFF00") # HEX 색상 코드
|
|
highlight_type = Column(String(20), default="highlight") # highlight, underline, etc.
|
|
|
|
# 메타데이터
|
|
created_at = Column(DateTime(timezone=True), server_default=func.now())
|
|
updated_at = Column(DateTime(timezone=True), onupdate=func.now())
|
|
|
|
# 관계
|
|
user = relationship("User", backref="highlights")
|
|
document = relationship("Document", back_populates="highlights")
|
|
notes = relationship("Note", back_populates="highlight", cascade="all, delete-orphan")
|
|
|
|
def __repr__(self):
|
|
return f"<Highlight(id='{self.id}', text='{self.selected_text[:50]}...')>"
|