File size: 1,988 Bytes
01a1238
a911135
01a1238
a911135
 
 
 
 
01a1238
 
427638d
 
 
 
 
 
 
 
 
01a1238
 
 
db9d9b2
01a1238
 
 
 
 
 
2046386
01a1238
 
 
 
 
a911135
 
 
 
 
 
 
 
 
 
 
 
 
01a1238
 
a911135
 
 
 
 
 
 
 
 
 
 
 
 
01a1238
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
# App/Messages/Schema.py
from pydantic import BaseModel, UUID4, Field, ConfigDict, condecimal, constr, validator
from datetime import datetime
from typing import Optional, Dict
import uuid

from pydantic import BaseModel, UUID4, Field, validator, ConfigDict
from uuid import uuid4, UUID


class TransactionSchema(BaseModel):
    transaction_id: str
    amount_received: float
    phone_number: str
    name: str
    date: datetime
    new_balance: float


class PayloadSchema(BaseModel):
    message: str
    phoneNumber: str
    receivedAt: datetime
    simNumber: Optional[int]


class MessageCreate(BaseModel):
    deviceId: Optional[str]
    event: Optional[str]
    id: Optional[str]
    payload: PayloadSchema
    webhookId: Optional[str]


class MessageResponse(BaseModel):
    id: Optional[UUID4] = Field(
        default_factory=uuid.uuid4
    )  # Automatically generate UUID4 if not provided
    device_id: Optional[str] = None
    event: Optional[str] = None
    message_id: Optional[str] = None
    webhook_id: Optional[str] = None
    message_content: Optional[str] = None
    phone_number: Optional[str] = None
    received_at: Optional[datetime] = None
    sim_number: Optional[int] = None
    parsed_data: Optional[Dict] = None  # Include parsed_data in the response
    created_time: Optional[datetime] = None
    model_config = ConfigDict(from_attributes=True)

    @validator("id", pre=True, always=True)
    def validate_uuid(cls, v):
        """
        Ensure all ID fields are valid UUIDs. If the input is invalid or missing,
        generate a new UUID.
        """
        if v is None or not isinstance(v, (UUID, str)):
            return uuid4()  # Generate a new UUID if not provided or invalid
        try:
            return UUID(v)  # Validate and convert to UUID
        except ValueError:
            return uuid4()  # Generate a new UUID if validation fails

    # class Config:
    #     orm_mode = True
    #     allow_population_by_field_name = True