Initial commit: IMAP Mail Filter Service
This commit is contained in:
@@ -0,0 +1,141 @@
|
||||
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}
|
||||
Reference in New Issue
Block a user