142 lines
3.1 KiB
Python
142 lines
3.1 KiB
Python
from datetime import datetime
|
|
|
|
from pydantic import BaseModel
|
|
|
|
from app.models.db_models import ActionType, ConditionField, MatchType
|
|
|
|
|
|
# --- Filter Condition ---
|
|
|
|
|
|
class FilterConditionCreate(BaseModel):
|
|
field: ConditionField
|
|
match_type: MatchType
|
|
value: str
|
|
negate: bool = False
|
|
|
|
|
|
class FilterConditionResponse(FilterConditionCreate):
|
|
id: int
|
|
|
|
model_config = {"from_attributes": True}
|
|
|
|
|
|
# --- Filter Action ---
|
|
|
|
|
|
class FilterActionCreate(BaseModel):
|
|
action_type: ActionType
|
|
parameter: str | None = None
|
|
|
|
|
|
class FilterActionResponse(FilterActionCreate):
|
|
id: int
|
|
|
|
model_config = {"from_attributes": True}
|
|
|
|
|
|
# --- Filter Rule ---
|
|
|
|
|
|
class FilterRuleCreate(BaseModel):
|
|
name: str
|
|
account_id: int
|
|
priority: int = 100
|
|
enabled: bool = True
|
|
stop_processing: bool = False
|
|
source_folder: str = "INBOX"
|
|
conditions: list[FilterConditionCreate] = []
|
|
actions: list[FilterActionCreate] = []
|
|
|
|
|
|
class FilterRuleUpdate(BaseModel):
|
|
name: str | None = None
|
|
priority: int | None = None
|
|
enabled: bool | None = None
|
|
stop_processing: bool | None = None
|
|
source_folder: str | None = None
|
|
conditions: list[FilterConditionCreate] | None = None
|
|
actions: list[FilterActionCreate] | None = None
|
|
|
|
|
|
class FilterRuleResponse(BaseModel):
|
|
id: int
|
|
account_id: int
|
|
name: str
|
|
priority: int
|
|
enabled: bool
|
|
stop_processing: bool
|
|
source_folder: str
|
|
conditions: list[FilterConditionResponse]
|
|
actions: list[FilterActionResponse]
|
|
created_at: datetime
|
|
updated_at: datetime
|
|
|
|
model_config = {"from_attributes": True}
|
|
|
|
|
|
# --- Account ---
|
|
|
|
|
|
class AccountCreate(BaseModel):
|
|
name: str
|
|
imap_host: str
|
|
imap_port: int = 993
|
|
use_ssl: bool = True
|
|
username: str
|
|
password: str
|
|
smtp_host: str | None = None
|
|
smtp_port: int | None = None
|
|
smtp_username: str | None = None
|
|
smtp_password: str | None = None
|
|
poll_interval_seconds: int = 120
|
|
enabled: bool = True
|
|
|
|
|
|
class AccountUpdate(BaseModel):
|
|
name: str | None = None
|
|
imap_host: str | None = None
|
|
imap_port: int | None = None
|
|
use_ssl: bool | None = None
|
|
username: str | None = None
|
|
password: str | None = None
|
|
smtp_host: str | None = None
|
|
smtp_port: int | None = None
|
|
smtp_username: str | None = None
|
|
smtp_password: str | None = None
|
|
poll_interval_seconds: int | None = None
|
|
enabled: bool | None = None
|
|
|
|
|
|
class AccountResponse(BaseModel):
|
|
id: int
|
|
name: str
|
|
imap_host: str
|
|
imap_port: int
|
|
use_ssl: bool
|
|
username: str
|
|
smtp_host: str | None
|
|
smtp_port: int | None
|
|
smtp_username: str | None
|
|
poll_interval_seconds: int
|
|
enabled: bool
|
|
last_poll_at: datetime | None
|
|
filter_rules: list[FilterRuleResponse] = []
|
|
created_at: datetime
|
|
updated_at: datetime
|
|
|
|
model_config = {"from_attributes": True}
|
|
|
|
|
|
class AccountListResponse(BaseModel):
|
|
id: int
|
|
name: str
|
|
imap_host: str
|
|
username: str
|
|
enabled: bool
|
|
last_poll_at: datetime | None
|
|
poll_interval_seconds: int
|
|
filter_rule_count: int = 0
|
|
|
|
model_config = {"from_attributes": True}
|