add more device fields

This commit is contained in:
2026-07-31 21:25:41 +05:00
parent eccda2b26d
commit 2c2d569a70
4 changed files with 74 additions and 23 deletions
+17 -2
View File
@@ -13,6 +13,9 @@ class CustomerBase(BaseModel):
username: str = Field(max_length=64)
mac_address: str = Field(max_length=17)
status: Literal["new", "paid", "unpaid"] = "new"
name: str | None = Field(default=None, max_length=128)
phone: str | None = Field(default=None, max_length=32)
device_alias: str | None = Field(default=None, max_length=64)
class CustomerCreate(CustomerBase):
@@ -23,6 +26,9 @@ class CustomerUpdate(BaseModel):
username: str | None = Field(default=None, max_length=64)
mac_address: str | None = Field(default=None, max_length=17)
status: Literal["new", "paid", "unpaid"] | None = None
name: str | None = Field(default=None, max_length=128)
phone: str | None = Field(default=None, max_length=32)
device_alias: str | None = Field(default=None, max_length=64)
class CustomerOut(ORMModel, CustomerBase):
@@ -136,11 +142,17 @@ class DeviceOut(BaseModel):
mac_address: str
group: str | None = None # radusergroup.groupname
status: str | None = None # customers.status
name: str | None = None # customers.name (human metadata)
phone: str | None = None # customers.phone (human metadata)
alias: str | None = None # customers.device_alias (human metadata)
class DeviceCreate(BaseModel):
mac_address: str = Field(pattern=_MAC_RE, max_length=17)
group: str = Field(min_length=1, max_length=64)
name: str = Field(min_length=1, max_length=128, description="Customer name (metadata, ignored by RADIUS)")
phone: str = Field(min_length=1, max_length=32, description="Phone number (metadata, ignored by RADIUS)")
alias: str | None = Field(default=None, max_length=64, description="Optional device alias (metadata)")
@field_validator("mac_address")
@classmethod
@@ -152,6 +164,9 @@ class DeviceEdit(BaseModel):
mac_address: str = Field(pattern=_MAC_RE, max_length=17)
group: str | None = Field(default=None, max_length=64)
status: Literal["new", "paid", "unpaid"] | None = None
name: str | None = Field(default=None, max_length=128)
phone: str | None = Field(default=None, max_length=32)
alias: str | None = Field(default=None, max_length=64)
@field_validator("mac_address")
@classmethod
@@ -160,8 +175,8 @@ class DeviceEdit(BaseModel):
@model_validator(mode="after")
def _at_least_one(self):
if self.group is None and self.status is None:
raise ValueError("provide at least one of: group, status")
if all(v is None for v in (self.group, self.status, self.name, self.phone, self.alias)):
raise ValueError("provide at least one of: group, status, name, phone, alias")
return self