|
1 | 1 | from typing import Any
|
2 | 2 |
|
3 | 3 | from sqlalchemy import (
|
4 |
| - CursorResult, |
| 4 | + BigInteger, |
5 | 5 | Boolean,
|
6 | 6 | Column,
|
| 7 | + CursorResult, |
7 | 8 | DateTime,
|
| 9 | + ForeignKey, |
| 10 | + Identity, |
8 | 11 | Insert,
|
9 | 12 | Integer,
|
10 | 13 | MetaData,
|
11 | 14 | Select,
|
12 | 15 | String,
|
13 | 16 | Table,
|
14 |
| - Update, |
15 |
| - Identity, |
16 |
| - ForeignKey, |
17 | 17 | UniqueConstraint,
|
18 |
| - BigInteger, |
| 18 | + Update, |
19 | 19 | func,
|
20 | 20 | )
|
21 | 21 | from sqlalchemy.dialects.postgresql import JSONB
|
|
24 | 24 | from src.config import settings
|
25 | 25 | from src.constants import DB_NAMING_CONVENTION
|
26 | 26 | from src.storage.constants import (
|
| 27 | + MEME_MEME_SOURCE_RAW_MEME_UNIQUE_CONSTRAINT, |
27 | 28 | MEME_RAW_TELEGRAM_MEME_SOURCE_POST_UNIQUE_CONSTRAINT,
|
28 | 29 | MEME_RAW_VK_MEME_SOURCE_POST_UNIQUE_CONSTRAINT,
|
29 |
| - MEME_MEME_SOURCE_RAW_MEME_UNIQUE_CONSTRAINT, |
30 | 30 | )
|
31 | 31 |
|
32 | 32 | DATABASE_URL = str(settings.DATABASE_URL)
|
|
41 | 41 | Column("id", Integer, Identity(), primary_key=True),
|
42 | 42 | Column("type", String, nullable=False),
|
43 | 43 | Column("url", String, nullable=False, unique=True),
|
44 |
| - |
45 |
| - Column("status", String, nullable=False), # in_moderation, parsing_enabled, parsing_disabled |
46 |
| - |
| 44 | + Column("status", String, nullable=False), |
47 | 45 | Column("language_code", String, index=True),
|
48 |
| - |
49 | 46 | Column("added_by", ForeignKey("user.id", ondelete="SET NULL")),
|
50 |
| - |
51 | 47 | Column("parsed_at", DateTime),
|
52 | 48 | Column("created_at", DateTime, server_default=func.now(), nullable=False),
|
53 | 49 | Column("updated_at", DateTime, onupdate=func.now()),
|
|
58 | 54 | "meme_raw_telegram",
|
59 | 55 | metadata,
|
60 | 56 | Column("id", Integer, Identity(), primary_key=True),
|
61 |
| - Column("meme_source_id", ForeignKey("meme_source.id", ondelete="CASCADE"), nullable=False), |
| 57 | + Column( |
| 58 | + "meme_source_id", |
| 59 | + ForeignKey("meme_source.id", ondelete="CASCADE"), |
| 60 | + nullable=False, |
| 61 | + ), |
62 | 62 | Column("post_id", Integer, nullable=False),
|
63 |
| - |
64 | 63 | Column("url", String, nullable=False),
|
65 | 64 | Column("date", DateTime, nullable=False),
|
66 | 65 | Column("content", String),
|
67 |
| - |
68 | 66 | Column("out_links", JSONB),
|
69 | 67 | Column("mentions", JSONB),
|
70 | 68 | Column("hashtags", JSONB),
|
|
73 | 71 | Column("views", Integer, nullable=False),
|
74 | 72 | Column("forwarded_url", String),
|
75 | 73 | Column("link_preview", JSONB),
|
76 |
| - |
77 | 74 | Column("created_at", DateTime, server_default=func.now(), nullable=False),
|
78 | 75 | Column("updated_at", DateTime, onupdate=func.now()),
|
79 |
| - |
80 |
| - UniqueConstraint("meme_source_id", "post_id", name=MEME_RAW_TELEGRAM_MEME_SOURCE_POST_UNIQUE_CONSTRAINT), |
| 76 | + UniqueConstraint( |
| 77 | + "meme_source_id", |
| 78 | + "post_id", |
| 79 | + name=MEME_RAW_TELEGRAM_MEME_SOURCE_POST_UNIQUE_CONSTRAINT, |
| 80 | + ), |
81 | 81 | )
|
82 | 82 |
|
83 | 83 |
|
84 | 84 | meme_raw_vk = Table(
|
85 | 85 | "meme_raw_vk",
|
86 | 86 | metadata,
|
87 | 87 | Column("id", Integer, Identity(), primary_key=True),
|
88 |
| - Column("meme_source_id", ForeignKey("meme_source.id", ondelete="CASCADE"), nullable=False), |
| 88 | + Column( |
| 89 | + "meme_source_id", |
| 90 | + ForeignKey("meme_source.id", ondelete="CASCADE"), |
| 91 | + nullable=False, |
| 92 | + ), |
89 | 93 | Column("post_id", String, nullable=False),
|
90 |
| - |
91 | 94 | Column("url", String, nullable=False),
|
92 | 95 | Column("content", String),
|
93 | 96 | Column("date", DateTime, nullable=False),
|
94 |
| - |
95 | 97 | Column("media", JSONB),
|
96 | 98 | Column("views", Integer, nullable=False),
|
97 | 99 | Column("likes", Integer, nullable=False),
|
98 | 100 | Column("reposts", Integer, nullable=False),
|
99 | 101 | Column("comments", Integer, nullable=False),
|
100 |
| - |
101 | 102 | Column("created_at", DateTime, server_default=func.now(), nullable=False),
|
102 | 103 | Column("updated_at", DateTime, onupdate=func.now()),
|
103 |
| - |
104 |
| - UniqueConstraint("meme_source_id", "post_id", name=MEME_RAW_VK_MEME_SOURCE_POST_UNIQUE_CONSTRAINT), |
| 104 | + UniqueConstraint( |
| 105 | + "meme_source_id", "post_id", name=MEME_RAW_VK_MEME_SOURCE_POST_UNIQUE_CONSTRAINT |
| 106 | + ), |
105 | 107 | )
|
106 | 108 |
|
107 | 109 |
|
|
116 | 118 | "meme",
|
117 | 119 | metadata,
|
118 | 120 | Column("id", Integer, Identity(), primary_key=True),
|
119 |
| - Column("meme_source_id", ForeignKey("meme_source.id", ondelete="CASCADE"), nullable=False), |
| 121 | + Column( |
| 122 | + "meme_source_id", |
| 123 | + ForeignKey("meme_source.id", ondelete="CASCADE"), |
| 124 | + nullable=False, |
| 125 | + ), |
120 | 126 | Column("raw_meme_id", Integer, nullable=False, index=True),
|
121 | 127 | Column("status", String, nullable=False),
|
122 |
| - |
123 | 128 | Column("type", String, nullable=False, index=True),
|
124 | 129 | Column("telegram_file_id", String),
|
125 | 130 | Column("caption", String),
|
126 | 131 | Column("language_code", String, index=True),
|
127 |
| - |
128 | 132 | Column("ocr_result", JSONB),
|
129 | 133 | Column("duplicate_of", ForeignKey("meme.id", ondelete="SET NULL")),
|
130 |
| - |
131 | 134 | Column("published_at", DateTime, nullable=False),
|
132 | 135 | Column("created_at", DateTime, server_default=func.now(), nullable=False),
|
133 | 136 | Column("updated_at", DateTime, onupdate=func.now()),
|
134 |
| - |
135 |
| - UniqueConstraint("meme_source_id", "raw_meme_id", name=MEME_MEME_SOURCE_RAW_MEME_UNIQUE_CONSTRAINT), |
| 137 | + UniqueConstraint( |
| 138 | + "meme_source_id", |
| 139 | + "raw_meme_id", |
| 140 | + name=MEME_MEME_SOURCE_RAW_MEME_UNIQUE_CONSTRAINT, |
| 141 | + ), |
136 | 142 | )
|
137 | 143 |
|
138 | 144 |
|
|
146 | 152 | Column("is_premium", Boolean),
|
147 | 153 | Column("language_code", String), # IETF language tag from telegram
|
148 | 154 | Column("deep_link", String),
|
149 |
| - |
150 |
| - # Column("first_chat_id", BigInteger, nullable=False), # chat_id where user first appeared |
151 |
| - |
152 | 155 | Column("created_at", DateTime, server_default=func.now(), nullable=False),
|
153 | 156 | Column("updated_at", DateTime, onupdate=func.now()),
|
154 | 157 | )
|
|
158 | 161 | "user",
|
159 | 162 | metadata,
|
160 | 163 | Column("id", BigInteger, primary_key=True),
|
161 |
| - Column("type", String, nullable=False), # super_user, moderator, |
162 |
| - |
| 164 | + Column("type", String, nullable=False), # super_user, moderator, |
163 | 165 | Column("created_at", DateTime, server_default=func.now(), nullable=False),
|
164 | 166 | Column("last_active_at", DateTime, onupdate=func.now()),
|
165 | 167 | Column("blocked_bot_at", DateTime),
|
|
208 | 210 | Column("nmemes_sent", Integer, nullable=False, server_default="0"),
|
209 | 211 | Column("nsessions", Integer, nullable=False, server_default="0"),
|
210 | 212 | Column("active_days_count", Integer, nullable=False, server_default="0"),
|
211 |
| - |
212 |
| - Column("updated_at", DateTime, server_default=func.now(), nullable=False, onupdate=func.now()), |
| 213 | + Column( |
| 214 | + "updated_at", |
| 215 | + DateTime, |
| 216 | + server_default=func.now(), |
| 217 | + nullable=False, |
| 218 | + onupdate=func.now(), |
| 219 | + ), |
213 | 220 | )
|
214 | 221 |
|
215 | 222 |
|
216 | 223 | user_meme_source_stats = Table(
|
217 | 224 | "user_meme_source_stats",
|
218 | 225 | metadata,
|
219 | 226 | Column("user_id", ForeignKey("user.id", ondelete="CASCADE"), primary_key=True),
|
220 |
| - Column("meme_source_id", ForeignKey("meme_source.id", ondelete="CASCADE"), primary_key=True), |
| 227 | + Column( |
| 228 | + "meme_source_id", |
| 229 | + ForeignKey("meme_source.id", ondelete="CASCADE"), |
| 230 | + primary_key=True, |
| 231 | + ), |
221 | 232 | Column("nlikes", Integer, nullable=False, server_default="0"),
|
222 | 233 | Column("ndislikes", Integer, nullable=False, server_default="0"),
|
223 |
| - |
224 |
| - Column("updated_at", DateTime, server_default=func.now(), nullable=False, onupdate=func.now()), |
| 234 | + Column( |
| 235 | + "updated_at", |
| 236 | + DateTime, |
| 237 | + server_default=func.now(), |
| 238 | + nullable=False, |
| 239 | + onupdate=func.now(), |
| 240 | + ), |
225 | 241 | )
|
226 | 242 |
|
227 | 243 |
|
|
234 | 250 | Column("nmemes_sent", Integer, nullable=False, server_default="0"),
|
235 | 251 | Column("age_days", Integer, nullable=False, server_default="99999"),
|
236 | 252 | Column("raw_impr_rank", Integer, nullable=False, server_default="99999"),
|
237 |
| - Column("updated_at", DateTime, server_default=func.now(), nullable=False, onupdate=func.now()), |
| 253 | + Column( |
| 254 | + "updated_at", |
| 255 | + DateTime, |
| 256 | + server_default=func.now(), |
| 257 | + nullable=False, |
| 258 | + onupdate=func.now(), |
| 259 | + ), |
238 | 260 | )
|
239 | 261 |
|
240 | 262 |
|
|
0 commit comments