● Zion Boggan
repos/Sightline/backend/app/schemas/__init__.py
zionboggan.com ↗
101 lines · python
History for this file →
1
from __future__ import annotations
2
 
3
from datetime import datetime
4
 
5
from pydantic import BaseModel, EmailStr, Field
6
 
7
 
8
class Token(BaseModel):
9
    access_token: str
10
    token_type: str = "bearer"
11
 
12
 
13
class UserCreate(BaseModel):
14
    email: EmailStr
15
    password: str = Field(min_length=8)
16
    full_name: str | None = None
17
    role: str = "analyst"
18
 
19
 
20
class UserOut(BaseModel):
21
    id: str
22
    email: str
23
    full_name: str | None
24
    role: str
25
    is_active: bool
26
 
27
    class Config:
28
        from_attributes = True
29
 
30
 
31
class InvestigationCreate(BaseModel):
32
    title: str
33
    summary: str | None = None
34
    priority: str = "normal"
35
    organization: str | None = None
36
 
37
 
38
class InvestigationOut(BaseModel):
39
    id: str
40
    title: str
41
    status: str
42
    priority: str
43
    summary: str | None
44
    organization: str | None
45
    created_at: datetime
46
 
47
    class Config:
48
        from_attributes = True
49
 
50
 
51
class NoteCreate(BaseModel):
52
    body: str
53
    pinned: bool = False
54
 
55
 
56
class SearchQuery(BaseModel):
57
    plate: str | None = None
58
    partial_plate: str | None = None
59
    make: str | None = None
60
    color: str | None = None
61
    body_type: str | None = None
62
    camera_id: str | None = None
63
    from_ts: datetime | None = None
64
    to_ts: datetime | None = None
65
    bbox: list[float] | None = None
66
    incident_ref: str | None = None
67
    limit: int = 200
68
 
69
 
70
class WatchlistCreate(BaseModel):
71
    name: str
72
    kind: str = "plate"
73
    organization: str | None = None
74
 
75
 
76
class WatchlistEntryCreate(BaseModel):
77
    plate_norm: str | None = None
78
    partial_plate: str | None = None
79
    vehicle_desc: dict | None = None
80
    reason: str | None = None
81
    expires_at: datetime | None = None
82
 
83
 
84
class EnrichRunRequest(BaseModel):
85
    enricher: str
86
    target: str
87
    investigation_id: str | None = None
88
 
89
 
90
class ReportRequest(BaseModel):
91
    title: str | None = None
92
    sections: list[str] | None = None
93
    format: str = "markdown"
94
 
95
 
96
class SourceCreate(BaseModel):
97
    name: str
98
    system_type: str | None = None
99
    organization: str | None = None
100
    jurisdiction: str | None = None
101
    trust_level: float = 0.8