# -*- coding: utf-8 -*- from typing import Optional from datetime import datetime from pydantic import BaseModel, Field class GoodNameItem(BaseModel): """佳名赏析项(简化版,用于列表展示)""" name: str = Field(..., description="名字") source: str = Field(..., description="出处") desc: str = Field(..., description="原文/释义") class NameRecordCreate(BaseModel): """创建起名记录""" name: str = Field(..., max_length=50, description="起的名字") surname: Optional[str] = Field(None, max_length=20, description="姓氏") full_name: Optional[str] = Field(None, max_length=70, description="完整姓名") source: Optional[str] = Field(None, max_length=100, description="出处") source_text: Optional[str] = Field(None, description="原文/出处原句") meaning: Optional[str] = Field(None, description="名字含义/寓意") gender: Optional[int] = Field(0, description="性别(0:未知 1:男 2:女)") birth_year: Optional[int] = Field(None, description="出生年份") birth_month: Optional[int] = Field(None, ge=1, le=12, description="出生月份") birth_day: Optional[int] = Field(None, ge=1, le=31, description="出生日期") birth_hour: Optional[int] = Field(None, ge=0, le=23, description="出生时辰") lunar_birth: Optional[str] = Field(None, max_length=50, description="农历生日") wuxing: Optional[str] = Field(None, max_length=20, description="五行属性") bazi: Optional[str] = Field(None, max_length=50, description="八字") wuxing_lack: Optional[str] = Field(None, max_length=20, description="五行缺失") name_type: Optional[int] = Field(1, description="起名类型(1:宝宝起名 2:成人改名 3:公司起名 4:店铺起名)") score: Optional[int] = Field(None, ge=0, le=100, description="名字评分") score_detail: Optional[str] = Field(None, description="评分详情(JSON)") channel: Optional[str] = Field(None, max_length=50, description="来源渠道") class NameRecordUpdate(BaseModel): """更新起名记录""" name: Optional[str] = Field(None, max_length=50) surname: Optional[str] = Field(None, max_length=20) full_name: Optional[str] = Field(None, max_length=70) source: Optional[str] = Field(None, max_length=100) source_text: Optional[str] = None meaning: Optional[str] = None is_favorite: Optional[int] = Field(None, description="是否收藏(0:否 1:是)") is_used: Optional[int] = Field(None, description="是否已使用(0:否 1:是)") class NameRecordOut(BaseModel): """起名记录输出""" id: int name: str surname: Optional[str] = None full_name: Optional[str] = None source: Optional[str] = None source_text: Optional[str] = None meaning: Optional[str] = None gender: Optional[int] = None birth_year: Optional[int] = None birth_month: Optional[int] = None birth_day: Optional[int] = None lunar_birth: Optional[str] = None wuxing: Optional[str] = None bazi: Optional[str] = None wuxing_lack: Optional[str] = None name_type: Optional[int] = None score: Optional[int] = None is_favorite: int = 0 is_used: int = 0 created_time: datetime class Config: from_attributes = True