# A FastAPI module written for Pydantic v1, used to check the guard.
from typing import Optional

from fastapi import FastAPI
from pydantic import BaseModel, BaseSettings, Field, root_validator, validator    # basesettings-import, validator, root-validator

app = FastAPI()


class Settings(BaseSettings):
    database_url: str

    class Config:                                                                 # class-config
        env_file = ".env"


class ItemIn(BaseModel):
    name: str = Field(..., regex="^[a-z-]+$")                                     # field-regex
    tags: list[str] = Field(default_factory=list, min_items=1)                    # field-items
    note: Optional[str]                                                           # optional-no-default

    @validator("name")                                                            # validator
    def lower(cls, v):
        return v.lower()


class ItemOut(BaseModel):
    id: int
    name: str

    class Config:                                                                 # class-config
        orm_mode = True                                                           # orm-mode


@app.on_event("startup")                                                          # on-event
def connect():
    pass


@app.post("/items")
def create(item: ItemIn):
    row = save(item.dict())                                                       # dict-method
    return ItemOut.from_orm(row)                                                  # from-orm
