File size: 2,907 Bytes
4b3843b
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
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
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
from pydantic import BaseModel, EmailStr
from datetime import datetime
from typing import Optional, List, Dict, Any

class IntegrationCreate(BaseModel):
    provider: str
    access_token: str
    refresh_token: Optional[str] = None
    expires_at: Optional[datetime] = None
    account_info: Optional[Dict[str, Any]] = None

class IntegrationResponse(BaseModel):
    id: int
    provider: str
    connected: bool
    account_info: Optional[Dict[str, Any]] = None
    created_at: datetime
    
    class Config:
        from_attributes = True

class AssetCreate(BaseModel):
    name: str
    file_type: str
    product_category: str
    sub_category: Optional[str] = None
    size: int
    metadata: Optional[Dict[str, Any]] = None

class AssetResponse(BaseModel):
    id: str  # Changed to str to preserve precision for large CockroachDB IDs (bigint)
    name: str
    file_type: str
    product_category: str
    sub_category: Optional[str] = None
    size: int
    extracted_content: Optional[Dict[str, Any]] = None
    analysis_status: Optional[str] = None
    analyzed_at: Optional[datetime] = None
    created_at: datetime
    
    class Config:
        from_attributes = True

class PostCreate(BaseModel):
    title: str
    content: str
    post_type: str
    product_category: str
    scheduled_date: datetime
    assets: Optional[List[int]] = None

class PostResponse(BaseModel):
    id: int
    title: str
    content: str
    post_type: str
    product_category: str
    scheduled_date: datetime
    status: str
    created_at: datetime
    
    class Config:
        from_attributes = True

class CampaignCreate(BaseModel):
    name: str
    date_range_start: datetime
    date_range_end: datetime
    products: List[str]
    post_types: List[str]
    posts_per_week: int

class CampaignResponse(BaseModel):
    id: int
    name: str
    date_range_start: datetime
    date_range_end: datetime
    products: List[str]
    post_types: List[str]
    posts_per_week: int
    status: str
    created_at: datetime
    
    class Config:
        from_attributes = True

class CanvaBrandTemplate(BaseModel):
    id: str
    title: str
    view_url: str
    create_url: str
    thumbnail: Optional[Dict[str, Any]] = None

class CanvaAutofillRequest(BaseModel):
    brand_template_id: str
    title: str
    data: Dict[str, Any]

class CanvaAutofillResponse(BaseModel):
    job_id: str
    status: str

class LinkedInPostRequest(BaseModel):
    text: str
    media_uris: Optional[List[str]] = None
    scheduled_time: Optional[datetime] = None

class AIContentRequest(BaseModel):
    product_category: str
    post_type: str
    context: Optional[str] = None
    assets: Optional[List[int]] = None

class AIContentResponse(BaseModel):
    content: str
    suggested_hashtags: List[str]