파이썬(/appserver/apps/calendar/models.py)
from datetime import timezone, datetime
from typing import TYPE_CHECKING
from pydantic import AwareDatetime
from sqlalchemy_utc import UtcDateTime
from sqlmodel import SQLModel, Field, Relationship, Text, JSON, func
if TYPE_CHECKING:
from appserver.apps.account.models import User
class Calendar(SQLModel, table=True):
__tablename__ = "calendars"
id: int = Field(default=None, primary_key=True)
topics: list[str] = Field(sa_type=JSON, default_factory=list, description="게스트와 나눌 주제들") # ①
description: str = Field(sa_type=Text, description="게스트에게 보여 줄 설명")
google_calendar_id: str = Field(max_length=1024, description="Google Calendar ID")
created_at: AwareDatetime = Field(
default=None,
nullable=False,
sa_type=UtcDateTime,
sa_column_kwargs={
"server_default": func.now(),
},
)
updated_at: AwareDatetime = Field(
default=None,
nullable=False,
sa_type=UtcDateTime,
sa_column_kwargs={
"server_default": func.now(),
"onupdate": lambda: datetime.now(timezone.utc),
},
)
한 가지 특이 사항이라면 topics가 배열, 즉 list[str]로 자료형 각주가 되어 있다는 점입니다(①). 이는 문자열을 항목으로 갖는 리스트형 객체라는 것을 의미하는데, 이를 데이터베이스에서 JSON 자료형으로 다룹니다.