초기 커밋
This commit is contained in:
0
app/schemas/__init__.py
Normal file
0
app/schemas/__init__.py
Normal file
38
app/schemas/analytics.py
Normal file
38
app/schemas/analytics.py
Normal file
@@ -0,0 +1,38 @@
|
||||
from __future__ import annotations
|
||||
|
||||
from datetime import datetime
|
||||
|
||||
from pydantic import BaseModel
|
||||
|
||||
|
||||
class AnalyticsRequest(BaseModel):
|
||||
device_id: str | None = None
|
||||
analysis_type: str = "telemetry_summary"
|
||||
start: datetime
|
||||
end: datetime
|
||||
parameters: dict = {}
|
||||
|
||||
|
||||
class AnalyticsResultRead(BaseModel):
|
||||
id: str
|
||||
analysis_type: str
|
||||
device_id: str | None
|
||||
result: dict
|
||||
parameters: dict
|
||||
period_start: datetime | None
|
||||
period_end: datetime | None
|
||||
created_at: datetime
|
||||
|
||||
|
||||
class ReportResponse(BaseModel):
|
||||
report_id: str
|
||||
device_id: str
|
||||
status: dict
|
||||
trends: dict
|
||||
created_at: datetime
|
||||
|
||||
|
||||
class TelemetryAggregateResponse(BaseModel):
|
||||
device_id: str
|
||||
records: list[dict]
|
||||
count: int
|
||||
30
app/schemas/auth.py
Normal file
30
app/schemas/auth.py
Normal file
@@ -0,0 +1,30 @@
|
||||
from __future__ import annotations
|
||||
|
||||
from pydantic import BaseModel, EmailStr
|
||||
|
||||
|
||||
class LoginRequest(BaseModel):
|
||||
email: EmailStr
|
||||
password: str
|
||||
|
||||
|
||||
class RegisterRequest(BaseModel):
|
||||
email: EmailStr
|
||||
password: str
|
||||
full_name: str = ""
|
||||
|
||||
|
||||
class TokenResponse(BaseModel):
|
||||
access_token: str
|
||||
refresh_token: str
|
||||
token_type: str = "bearer"
|
||||
|
||||
|
||||
class RefreshTokenRequest(BaseModel):
|
||||
refresh_token: str
|
||||
|
||||
|
||||
class OAuthCallbackRequest(BaseModel):
|
||||
provider: str
|
||||
code: str
|
||||
redirect_uri: str
|
||||
19
app/schemas/common.py
Normal file
19
app/schemas/common.py
Normal file
@@ -0,0 +1,19 @@
|
||||
from __future__ import annotations
|
||||
|
||||
from typing import Generic, TypeVar
|
||||
|
||||
from pydantic import BaseModel
|
||||
|
||||
T = TypeVar("T")
|
||||
|
||||
|
||||
class ErrorResponse(BaseModel):
|
||||
detail: str
|
||||
|
||||
|
||||
class PaginatedResponse(BaseModel, Generic[T]):
|
||||
items: list[T]
|
||||
total: int
|
||||
page: int
|
||||
size: int
|
||||
pages: int
|
||||
52
app/schemas/device.py
Normal file
52
app/schemas/device.py
Normal file
@@ -0,0 +1,52 @@
|
||||
from __future__ import annotations
|
||||
|
||||
from datetime import datetime
|
||||
|
||||
from pydantic import BaseModel
|
||||
|
||||
|
||||
class DeviceGroupRead(BaseModel):
|
||||
id: int
|
||||
name: str
|
||||
description: str
|
||||
|
||||
model_config = {"from_attributes": True}
|
||||
|
||||
|
||||
class DeviceGroupCreate(BaseModel):
|
||||
name: str
|
||||
description: str = ""
|
||||
|
||||
|
||||
class DeviceRead(BaseModel):
|
||||
id: int
|
||||
device_uid: str
|
||||
name: str
|
||||
device_type: str
|
||||
status: str
|
||||
firmware_version: str
|
||||
ip_address: str
|
||||
group_id: int | None
|
||||
owner_id: int | None
|
||||
last_seen_at: datetime | None
|
||||
created_at: datetime
|
||||
|
||||
model_config = {"from_attributes": True}
|
||||
|
||||
|
||||
class DeviceCreate(BaseModel):
|
||||
device_uid: str
|
||||
name: str
|
||||
device_type: str = ""
|
||||
group_id: int | None = None
|
||||
owner_id: int | None = None
|
||||
firmware_version: str = ""
|
||||
|
||||
|
||||
class DeviceUpdate(BaseModel):
|
||||
name: str | None = None
|
||||
device_type: str | None = None
|
||||
status: str | None = None
|
||||
firmware_version: str | None = None
|
||||
group_id: int | None = None
|
||||
owner_id: int | None = None
|
||||
54
app/schemas/monitoring.py
Normal file
54
app/schemas/monitoring.py
Normal file
@@ -0,0 +1,54 @@
|
||||
from __future__ import annotations
|
||||
|
||||
from datetime import datetime
|
||||
|
||||
from pydantic import BaseModel
|
||||
|
||||
|
||||
class AlertRuleRead(BaseModel):
|
||||
id: int
|
||||
name: str
|
||||
description: str
|
||||
metric: str
|
||||
condition: str
|
||||
threshold: float
|
||||
severity: str
|
||||
is_enabled: bool
|
||||
device_group_id: int | None
|
||||
created_at: datetime
|
||||
|
||||
model_config = {"from_attributes": True}
|
||||
|
||||
|
||||
class AlertRuleCreate(BaseModel):
|
||||
name: str
|
||||
description: str = ""
|
||||
metric: str
|
||||
condition: str
|
||||
threshold: float
|
||||
severity: str = "warning"
|
||||
device_group_id: int | None = None
|
||||
|
||||
|
||||
class AlertRead(BaseModel):
|
||||
id: int
|
||||
rule_id: int | None
|
||||
device_id: int | None
|
||||
severity: str
|
||||
message: str
|
||||
is_acknowledged: bool
|
||||
acknowledged_by: int | None
|
||||
acknowledged_at: datetime | None
|
||||
created_at: datetime
|
||||
|
||||
model_config = {"from_attributes": True}
|
||||
|
||||
|
||||
class SystemHealthResponse(BaseModel):
|
||||
status: str
|
||||
mariadb: str
|
||||
mongodb: str
|
||||
redis: str
|
||||
mqtt: str
|
||||
active_devices: int
|
||||
active_alerts: int
|
||||
38
app/schemas/user.py
Normal file
38
app/schemas/user.py
Normal file
@@ -0,0 +1,38 @@
|
||||
from __future__ import annotations
|
||||
|
||||
from datetime import datetime
|
||||
|
||||
from pydantic import BaseModel, EmailStr
|
||||
|
||||
|
||||
class UserRead(BaseModel):
|
||||
id: int
|
||||
email: str
|
||||
role: str
|
||||
is_active: bool
|
||||
is_verified: bool
|
||||
full_name: str = ""
|
||||
phone: str = ""
|
||||
organization: str = ""
|
||||
avatar_url: str = ""
|
||||
created_at: datetime
|
||||
|
||||
model_config = {"from_attributes": True}
|
||||
|
||||
|
||||
class UserCreate(BaseModel):
|
||||
email: EmailStr
|
||||
password: str
|
||||
role: str = "user"
|
||||
full_name: str = ""
|
||||
phone: str = ""
|
||||
organization: str = ""
|
||||
|
||||
|
||||
class UserUpdate(BaseModel):
|
||||
full_name: str | None = None
|
||||
phone: str | None = None
|
||||
organization: str | None = None
|
||||
avatar_url: str | None = None
|
||||
is_active: bool | None = None
|
||||
role: str | None = None
|
||||
Reference in New Issue
Block a user