Files
document-server/backend/src/models/highlight.py
Hyungi Ahn edfabdac23 🐛 Fix: 백엔드 500 오류 해결 및 배포용 도커 설정 완성
- Dockerfile: Poetry 대신 직접 pip 설치로 의존성 문제 해결
- highlights.py: UUID 임포트 추가, 들여쓰기 오류 수정, 1:N 관계 지원
- notes.py: Pydantic v2 호환성 수정, 다중 메모 지원
- models: highlight-note 관계를 1:1에서 1:N으로 변경
- docker-compose.yml: 배포용 환경변수 설정

 로그인 API 정상 작동 확인
 나스/맥미니 배포 준비 완료
2025-08-22 09:58:23 +09:00

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]}...')>"