Files
certificate-system/backend/app/schemas/project.py
2026-06-06 19:32:24 +08:00

58 lines
2.0 KiB
Python

from datetime import datetime
from pydantic import BaseModel, Field, field_validator
class ProjectCourseCreate(BaseModel):
code: str = Field(min_length=2, max_length=16)
name: str = Field(min_length=1, max_length=128)
default_certificate_name: str | None = Field(default=None, max_length=128)
default_course_name: str | None = Field(default=None, max_length=128)
default_stage_name: str | None = Field(default=None, max_length=128)
default_issuer_name: str = Field(default="本公司", min_length=1, max_length=128)
@field_validator("code")
@classmethod
def normalize_code(cls, value: str) -> str:
return value.strip().upper()
@field_validator("default_certificate_name", "default_course_name", "default_stage_name")
@classmethod
def empty_to_none(cls, value: str | None) -> str | None:
if value is None:
return None
text = value.strip()
return text or None
class ProjectCourseUpdate(BaseModel):
name: str | None = Field(default=None, min_length=1, max_length=128)
default_certificate_name: str | None = Field(default=None, max_length=128)
default_course_name: str | None = Field(default=None, max_length=128)
default_stage_name: str | None = Field(default=None, max_length=128)
default_issuer_name: str | None = Field(default=None, min_length=1, max_length=128)
status: str | None = Field(default=None, pattern="^(active|disabled)$")
@field_validator("default_certificate_name", "default_course_name", "default_stage_name")
@classmethod
def empty_to_none(cls, value: str | None) -> str | None:
if value is None:
return None
text = value.strip()
return text or None
class ProjectCourseOut(BaseModel):
id: int
code: str
name: str
default_certificate_name: str
default_course_name: str | None
default_stage_name: str | None
default_issuer_name: str
status: str
created_at: datetime
updated_at: datetime
model_config = {"from_attributes": True}