xync-db 0.0.2.dev2__tar.gz → 0.1.1__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- {xync_db-0.0.2.dev2 → xync_db-0.1.1}/.gitignore +10 -4
- xync_db-0.1.1/PKG-INFO +348 -0
- xync_db-0.1.1/README.md +329 -0
- {xync_db-0.0.2.dev2 → xync_db-0.1.1}/pyproject.toml +5 -0
- xync_db-0.1.1/src/xync_db/__init__.py +21 -0
- xync_db-0.1.1/src/xync_db/config.py +25 -0
- {xync_db-0.0.2.dev2 → xync_db-0.1.1}/src/xync_db/enums.py +2 -0
- xync_db-0.1.1/src/xync_db/exceptions.py +31 -0
- {xync_db-0.0.2.dev2 → xync_db-0.1.1}/src/xync_db/graph.py +1 -1
- xync_db-0.1.1/src/xync_db/i18n.py +39 -0
- xync_db-0.1.1/src/xync_db/migrations/CLAUDE.md +110 -0
- xync_db-0.1.1/src/xync_db/migrations/__init__.py +0 -0
- xync_db-0.1.1/src/xync_db/migrations/models/0001_initial.py +2492 -0
- xync_db-0.1.1/src/xync_db/migrations/models/0002_triggers.py +264 -0
- xync_db-0.1.1/src/xync_db/migrations/models/0003_files_seed.py +20 -0
- xync_db-0.1.1/src/xync_db/migrations/models/0004_all_seed.py +31 -0
- xync_db-0.1.1/src/xync_db/migrations/models/__init__.py +0 -0
- xync_db-0.1.1/src/xync_db/migrations/models/seed/__init__.py +0 -0
- xync_db-0.1.1/src/xync_db/migrations/models/seed/a_actor_seed.py +311 -0
- xync_db-0.1.1/src/xync_db/migrations/models/seed/a_tg_seed.py +145 -0
- xync_db-0.1.1/src/xync_db/migrations/models/seed/b_htx_seed.py +111 -0
- xync_db-0.1.1/src/xync_db/migrations/models/seed/xync_files.sql +4350 -0
- {xync_db-0.0.2.dev2 → xync_db-0.1.1}/src/xync_db/models/__init__.py +781 -411
- xync_db-0.1.1/src/xync_db/py.typed +0 -0
- {xync_db-0.0.2.dev2 → xync_db-0.1.1}/src/xync_db/shared.py +31 -3
- xync_db-0.1.1/src/xync_db/typs/__init__.py +51 -0
- xync_db-0.1.1/src/xync_db/typs/db/__init__.py +0 -0
- xync_db-0.1.1/src/xync_db/typs/db/actor.py +62 -0
- xync_db-0.1.1/src/xync_db/typs/db/ad.py +159 -0
- xync_db-0.1.1/src/xync_db/typs/db/common.py +102 -0
- xync_db-0.1.1/src/xync_db/typs/db/cred.py +115 -0
- xync_db-0.1.1/src/xync_db/typs/db/order.py +66 -0
- xync_db-0.1.1/src/xync_db/typs/db/pm.py +89 -0
- xync_db-0.0.2.dev2/PKG-INFO +0 -31
- xync_db-0.0.2.dev2/README.md +0 -17
- xync_db-0.0.2.dev2/migrations/models/0001_triggers.py +0 -111
- xync_db-0.0.2.dev2/migrations/models/__init__.py +0 -1
- xync_db-0.0.2.dev2/src/xync_db/__init__.py +0 -26
- xync_db-0.0.2.dev2/src/xync_db/config.py +0 -17
- xync_db-0.0.2.dev2/src/xync_db/exceptions.py +0 -18
- xync_db-0.0.2.dev2/src/xync_db/typs/__init__.py +0 -40
- xync_db-0.0.2.dev2/src/xync_db/typs/db/ad.py +0 -76
- xync_db-0.0.2.dev2/src/xync_db/typs/db/common.py +0 -24
- xync_db-0.0.2.dev2/src/xync_db/typs/db/order.py +0 -38
- {xync_db-0.0.2.dev2 → xync_db-0.1.1}/src/xync_db/logo.png +0 -0
- {xync_db-0.0.2.dev2 → xync_db-0.1.1}/src/xync_db/models/CLAUDE.md +0 -0
|
@@ -12,14 +12,16 @@ venv/
|
|
|
12
12
|
htmlcov/
|
|
13
13
|
dist/
|
|
14
14
|
build/
|
|
15
|
+
*.log*
|
|
15
16
|
|
|
16
17
|
# uv
|
|
17
18
|
.uv-cache/
|
|
18
19
|
|
|
19
20
|
# Node
|
|
20
21
|
node_modules/
|
|
21
|
-
packages/xync-
|
|
22
|
-
packages/xync-
|
|
22
|
+
packages/xync-coord/dist/
|
|
23
|
+
packages/xync-coord/.vite/
|
|
24
|
+
*.tsbuildinfo
|
|
23
25
|
|
|
24
26
|
# Env
|
|
25
27
|
.env
|
|
@@ -35,8 +37,12 @@ packages/xync-web/.vite/
|
|
|
35
37
|
Thumbs.db
|
|
36
38
|
|
|
37
39
|
# Generated
|
|
38
|
-
packages/xync-
|
|
39
|
-
openapi.json
|
|
40
|
+
# packages/xync-coord/src/api/schema.gen.ts is regenerated by `npm run codegen`
|
|
41
|
+
# (against the live API /schema/openapi.json), but stays tracked so `tsc -b`
|
|
42
|
+
# and CI work without a running API.
|
|
40
43
|
|
|
41
44
|
# Claude state (board) — track this in git, but ignore live edits if user prefers:
|
|
42
45
|
# .claude/state/log.md # uncomment to ignore the journal
|
|
46
|
+
|
|
47
|
+
packages/xync-web
|
|
48
|
+
packages/xync-chrome-ext
|
xync_db-0.1.1/PKG-INFO
ADDED
|
@@ -0,0 +1,348 @@
|
|
|
1
|
+
Metadata-Version: 2.4
|
|
2
|
+
Name: xync-db
|
|
3
|
+
Version: 0.1.1
|
|
4
|
+
Summary: Xync DB schema: Tortoise ORM models, enums, pydantic DTOs.
|
|
5
|
+
Author-email: Mike Artemiev <mixartemev@gmail.com>
|
|
6
|
+
License: LicenseRef-EULA
|
|
7
|
+
Requires-Python: >=3.12
|
|
8
|
+
Requires-Dist: cryptography
|
|
9
|
+
Requires-Dist: pg-channel
|
|
10
|
+
Requires-Dist: pillow
|
|
11
|
+
Requires-Dist: pydantic-settings>=2.4
|
|
12
|
+
Requires-Dist: pypng
|
|
13
|
+
Requires-Dist: pyrogram-client
|
|
14
|
+
Requires-Dist: python-dotenv
|
|
15
|
+
Requires-Dist: qrcode[pil]
|
|
16
|
+
Requires-Dist: tortoise-orm[asyncpg]>=1.0
|
|
17
|
+
Requires-Dist: xn-auth
|
|
18
|
+
Description-Content-Type: text/markdown
|
|
19
|
+
|
|
20
|
+
# XyncDB
|
|
21
|
+
TortoiseORM models, enums, pydantic DTOs, and migrations для аггрегатора бирж/платформ p2p-торговли.
|
|
22
|
+
Single source of truth for data shape across the monorepo.
|
|
23
|
+
|
|
24
|
+
### Основные db сущности:
|
|
25
|
+
- Ex: p2p биржа/платформа
|
|
26
|
+
|
|
27
|
+
- Person: сущность живого человека / физического лица
|
|
28
|
+
- User: Person являющийся нашим юзером (зареганный на нашей платформе xync)
|
|
29
|
+
- Actor: Person являющийся любым юзером на Ex (как 3-и лица: наши контрагенты в p2p-сделках, так и наши агенты)
|
|
30
|
+
- Agent: Actor xync-юзера с auth-доступами к Ex, может слать запросы. Сущность с помощью которой наши Users совершают действия на Ex. (Связь с User через Actor -> Person)
|
|
31
|
+
- Username: telegram id, nick-и, и возможно телефоны наших User-ов
|
|
32
|
+
|
|
33
|
+
- Cur: Фиатные(банковские) валюты
|
|
34
|
+
- CurEx: Cur на конкретной Ex, c minimum размером сделки в этой валюте, и ее десятичный scale-ом на этой Ex
|
|
35
|
+
- Coin: Крипто монеты
|
|
36
|
+
- CoinEx: Coin на конкретной Ex, c minimum размером сделки по этой монете, и ее десятичный scale-ом на этой Ex
|
|
37
|
+
- Pair: Все торговые пары Coin/Cur какие бывают
|
|
38
|
+
- PairEx: Pair которые есть на конкретной Ex
|
|
39
|
+
- PairSide: Направления is_sell(продажа или покупка) по каждой Pair
|
|
40
|
+
- Pm: Платежные системы (банки, кошельки, и тд) фиатных валют
|
|
41
|
+
- PmEx: Pm на конкретной бирже (содержимое таблицы pmex говорит о том, через какие Pm какие Ex поддерживают оплату сделок)
|
|
42
|
+
- PmCur: Пары Pm-Cur (таблица pmcur говорит какие Pm поддерживают какие Cur
|
|
43
|
+
- Cred: платежные реквизиты Person-a по конкретному PmCur
|
|
44
|
+
- Fiat: сумма на балансе конкретного Cred
|
|
45
|
+
- Addr: адрес по которому лежит определенный Coin конкретного Actor-a
|
|
46
|
+
- Asset: сумма, которая лежит на определенном Addr
|
|
47
|
+
|
|
48
|
+
- Ad: объявление maker-a (Actor) по PairSide (т.е: о покупке или продаже Coin за Cur) для конкретных Pm
|
|
49
|
+
- MyAd: Ad нашего Agent-a (Actor) по конкретным Fiat-ам
|
|
50
|
+
- Cond: текстовое описание условий сделки по Ad
|
|
51
|
+
- Order: сделка открытая taker-ом (Actor) по Ad, на определенную сумму на конкретный Cred того Actor-a, кто является продавцом в сделке
|
|
52
|
+
- Transfer: денежный перевод определенной сумму (amount) по конкретному Order-у
|
|
53
|
+
- Transaction: внутренний денежный перевод (на платформе xync) от User-а sender User-у receiver
|
|
54
|
+
|
|
55
|
+
### Relations
|
|
56
|
+
```mermaid
|
|
57
|
+
classDiagram
|
|
58
|
+
direction BT
|
|
59
|
+
class Actor {
|
|
60
|
+
uint8 exid
|
|
61
|
+
uint1 ex_id
|
|
62
|
+
varchar(63) name
|
|
63
|
+
integer person_id
|
|
64
|
+
integer id
|
|
65
|
+
}
|
|
66
|
+
class Ad {
|
|
67
|
+
uint8 exid
|
|
68
|
+
uint4 price
|
|
69
|
+
integer premium
|
|
70
|
+
uint4 amount
|
|
71
|
+
uint8 quantity
|
|
72
|
+
uint4 min_fiat
|
|
73
|
+
uint4 max_fiat
|
|
74
|
+
smallint status
|
|
75
|
+
boolean filtered
|
|
76
|
+
integer cond_id
|
|
77
|
+
integer maker_id
|
|
78
|
+
smallint pair_side_id
|
|
79
|
+
integer id
|
|
80
|
+
}
|
|
81
|
+
class ad_pm {
|
|
82
|
+
integer ad_id
|
|
83
|
+
integer pm_id
|
|
84
|
+
}
|
|
85
|
+
class Addr {
|
|
86
|
+
integer actor_id
|
|
87
|
+
smallint coin_id
|
|
88
|
+
integer id
|
|
89
|
+
}
|
|
90
|
+
class agent {
|
|
91
|
+
integer actor_id
|
|
92
|
+
jsonb auth
|
|
93
|
+
integer expire_at
|
|
94
|
+
smallint status
|
|
95
|
+
uint1 same_dir_ad
|
|
96
|
+
integer id
|
|
97
|
+
}
|
|
98
|
+
class Asset {
|
|
99
|
+
smallint typ
|
|
100
|
+
uint8 free
|
|
101
|
+
uint8 freeze
|
|
102
|
+
uint8 lock
|
|
103
|
+
uint8 target
|
|
104
|
+
integer addr_id
|
|
105
|
+
integer id
|
|
106
|
+
}
|
|
107
|
+
class coin {
|
|
108
|
+
varchar(15) ticker
|
|
109
|
+
uint1 scale
|
|
110
|
+
smallint typ
|
|
111
|
+
smallint id
|
|
112
|
+
}
|
|
113
|
+
class CoinEx {
|
|
114
|
+
varchar(32) exid
|
|
115
|
+
uint1 ex_id
|
|
116
|
+
smallint coin_id
|
|
117
|
+
bigint minimum
|
|
118
|
+
uint1 scale
|
|
119
|
+
boolean p2p
|
|
120
|
+
integer id
|
|
121
|
+
}
|
|
122
|
+
class cond {
|
|
123
|
+
varchar(4095) raw_txt
|
|
124
|
+
integer id
|
|
125
|
+
}
|
|
126
|
+
class Cred {
|
|
127
|
+
varchar(255) detail
|
|
128
|
+
varchar(127) name
|
|
129
|
+
integer pmcur_id
|
|
130
|
+
integer person_id
|
|
131
|
+
varchar(255) extra
|
|
132
|
+
integer ovr_pm_id
|
|
133
|
+
integer id
|
|
134
|
+
}
|
|
135
|
+
class CredEx {
|
|
136
|
+
uint8 exid
|
|
137
|
+
uint1 ex_id
|
|
138
|
+
integer cred_id
|
|
139
|
+
integer id
|
|
140
|
+
}
|
|
141
|
+
class Cur {
|
|
142
|
+
varchar(3) ticker
|
|
143
|
+
uint1 scale
|
|
144
|
+
uint1 id
|
|
145
|
+
}
|
|
146
|
+
class CurEx {
|
|
147
|
+
varchar(32) exid
|
|
148
|
+
uint1 cur_id
|
|
149
|
+
uint1 ex_id
|
|
150
|
+
uint4 minimum
|
|
151
|
+
uint1 scale
|
|
152
|
+
integer id
|
|
153
|
+
}
|
|
154
|
+
class Ex {
|
|
155
|
+
varchar(31) name
|
|
156
|
+
varchar(63) host
|
|
157
|
+
smallint typ
|
|
158
|
+
smallint status
|
|
159
|
+
varchar(511) logo
|
|
160
|
+
uint1 id
|
|
161
|
+
}
|
|
162
|
+
class Fiat {
|
|
163
|
+
uint4 amount
|
|
164
|
+
uint4 target
|
|
165
|
+
uint4 min_deposit
|
|
166
|
+
integer cred_id
|
|
167
|
+
integer id
|
|
168
|
+
}
|
|
169
|
+
class my_ad {
|
|
170
|
+
integer ad_id
|
|
171
|
+
uint1 target_place
|
|
172
|
+
bytea hex
|
|
173
|
+
timestamp(0) shared_at
|
|
174
|
+
boolean blocked
|
|
175
|
+
integer id
|
|
176
|
+
}
|
|
177
|
+
class myad_cred {
|
|
178
|
+
integer my_ad_id
|
|
179
|
+
integer credex_id
|
|
180
|
+
}
|
|
181
|
+
class Order {
|
|
182
|
+
uint8 exid
|
|
183
|
+
uint4 amount
|
|
184
|
+
uint8 quantity
|
|
185
|
+
smallint status
|
|
186
|
+
integer ad_id
|
|
187
|
+
integer cred_id
|
|
188
|
+
integer taker_id
|
|
189
|
+
uint2 maker_topic
|
|
190
|
+
uint2 taker_topic
|
|
191
|
+
timestamp updated_at
|
|
192
|
+
integer id
|
|
193
|
+
}
|
|
194
|
+
class Pair {
|
|
195
|
+
smallint coin_id
|
|
196
|
+
uint1 cur_id
|
|
197
|
+
bigint rate
|
|
198
|
+
smallint id
|
|
199
|
+
}
|
|
200
|
+
class pair_side {
|
|
201
|
+
smallint pair_id
|
|
202
|
+
boolean is_sell
|
|
203
|
+
smallint id
|
|
204
|
+
}
|
|
205
|
+
class PairEx {
|
|
206
|
+
smallint pair_id
|
|
207
|
+
uint1 ex_id
|
|
208
|
+
smallint fee
|
|
209
|
+
integer id
|
|
210
|
+
}
|
|
211
|
+
class person {
|
|
212
|
+
varchar(127) name
|
|
213
|
+
integer user_id
|
|
214
|
+
smallint status
|
|
215
|
+
varchar(255) note
|
|
216
|
+
integer id
|
|
217
|
+
}
|
|
218
|
+
class Pm {
|
|
219
|
+
varchar(255) norm
|
|
220
|
+
varchar(7) acronym
|
|
221
|
+
varchar(63) alias
|
|
222
|
+
boolean ok
|
|
223
|
+
boolean bank
|
|
224
|
+
boolean qr
|
|
225
|
+
uint2 fee
|
|
226
|
+
smallint typ
|
|
227
|
+
integer id
|
|
228
|
+
}
|
|
229
|
+
class PmCur {
|
|
230
|
+
uint1 cur_id
|
|
231
|
+
integer pm_id
|
|
232
|
+
integer id
|
|
233
|
+
}
|
|
234
|
+
class pmex {
|
|
235
|
+
varchar(63) exid
|
|
236
|
+
uint1 ex_id
|
|
237
|
+
integer pm_id
|
|
238
|
+
varchar(255) name
|
|
239
|
+
integer id
|
|
240
|
+
}
|
|
241
|
+
class transaction {
|
|
242
|
+
uint4 amount
|
|
243
|
+
smallint status
|
|
244
|
+
bytea proof
|
|
245
|
+
integer ts
|
|
246
|
+
uint1 cur_id
|
|
247
|
+
integer receiver_id
|
|
248
|
+
integer sender_id
|
|
249
|
+
uuid id
|
|
250
|
+
}
|
|
251
|
+
class transfer {
|
|
252
|
+
uint4 amount
|
|
253
|
+
varchar(32) pmid
|
|
254
|
+
varchar(63) sender_acc
|
|
255
|
+
integer order_id
|
|
256
|
+
integer file_id
|
|
257
|
+
integer id
|
|
258
|
+
}
|
|
259
|
+
class user {
|
|
260
|
+
varchar(63) first_name
|
|
261
|
+
varchar(31) last_name
|
|
262
|
+
varchar(127) pic
|
|
263
|
+
boolean blocked
|
|
264
|
+
smallint lang
|
|
265
|
+
smallint role
|
|
266
|
+
smallint status
|
|
267
|
+
uint2 bonus
|
|
268
|
+
smallint tz
|
|
269
|
+
bytea prv
|
|
270
|
+
bytea pub
|
|
271
|
+
integer ref_id
|
|
272
|
+
bigint username_id
|
|
273
|
+
integer id
|
|
274
|
+
}
|
|
275
|
+
class username {
|
|
276
|
+
varchar(127) username
|
|
277
|
+
uint8 phone
|
|
278
|
+
bigint id
|
|
279
|
+
}
|
|
280
|
+
|
|
281
|
+
Actor --> Ex : ex_id->ex.id
|
|
282
|
+
Actor --> person : person_id->person.id
|
|
283
|
+
Ad --> Actor : maker_id->maker.id
|
|
284
|
+
Ad --> cond : cond_id->cond.id
|
|
285
|
+
Ad --> pair_side : pair_side_id->pair_side.id
|
|
286
|
+
ad_pm --> Ad : ad_id->ad.id
|
|
287
|
+
ad_pm --> Pm : pm_id->pm.id
|
|
288
|
+
Addr --> Actor : actor_id->actor.id
|
|
289
|
+
Addr --> coin : coin_id->coin.id
|
|
290
|
+
agent --> Actor : actor_id->actor.id
|
|
291
|
+
Asset --> Addr : addr_id->addr.id
|
|
292
|
+
Asset --> agent : agent_id->agent.id
|
|
293
|
+
CoinEx --> coin : coin_id->coin.id
|
|
294
|
+
CoinEx --> Ex : ex_id->ex.id
|
|
295
|
+
Cred --> person : person_id->person.id
|
|
296
|
+
Cred --> Pm : ovr_pm_id->ovr_pm.id
|
|
297
|
+
Cred --> PmCur : pmcur_id->pmcur.id
|
|
298
|
+
CredEx --> Cred : cred_id->cred.id
|
|
299
|
+
CredEx --> Ex : ex_id->ex.id
|
|
300
|
+
CurEx --> Cur : cur_id->cur.id
|
|
301
|
+
CurEx --> Ex : ex_id->ex.id
|
|
302
|
+
Fiat --> Cred : cred_id->cred.id
|
|
303
|
+
my_ad --> Ad : ad_id->ad.id
|
|
304
|
+
myad_cred --> CredEx : credex_id->credex.id
|
|
305
|
+
myad_cred --> my_ad : my_ad_id->my_ad.id
|
|
306
|
+
Order --> Actor : taker_id->taker.id
|
|
307
|
+
Order --> Ad : ad_id->ad.id
|
|
308
|
+
Order --> Cred : cred_id->cred.id
|
|
309
|
+
Pair --> coin : coin_id->coin.id
|
|
310
|
+
Pair --> Cur : cur_id->cur.id
|
|
311
|
+
pair_side --> Pair : pair_id->pair.id
|
|
312
|
+
PairEx --> Ex : ex_id->ex.id
|
|
313
|
+
PairEx --> Pair : pair_id->pair.id
|
|
314
|
+
person --> user : user_id->user.id
|
|
315
|
+
Pm --> Cur : df_cur_id->df_cur.id
|
|
316
|
+
PmCur --> Cur : cur_id->cur.id
|
|
317
|
+
PmCur --> Pm : pm_id->pm.id
|
|
318
|
+
pmex --> Ex : ex_id->ex.id
|
|
319
|
+
pmex --> Pm : pm_id->pm.id
|
|
320
|
+
transaction --> Cur : cur_id->cur.id
|
|
321
|
+
transaction --> user : sender_id->sender.id
|
|
322
|
+
transaction --> user : receiver_id->receiver.id
|
|
323
|
+
transfer --> Order : order_id->order.id
|
|
324
|
+
user --> user : ref_id->ref.id
|
|
325
|
+
user --> username : username_id->username.id
|
|
326
|
+
```
|
|
327
|
+
|
|
328
|
+
###### Общее правило для всех сущностей, которые относятся к конкретной Ex:
|
|
329
|
+
`[Actor, CoinEx, CurEx, PmEx, CredEx, Ad, Order]`
|
|
330
|
+
- `id` - id сущности в нашей системе (в xync)
|
|
331
|
+
- `exid` - id сущности на этом `Ex`
|
|
332
|
+
- `ex_id` - id `Ex`-a которому принадлежит сущность
|
|
333
|
+
|
|
334
|
+
Исключение `Ad` и `Order`:
|
|
335
|
+
- в `Ad` нет непосредственно `ex_id`, у него есть `maker_id`, через которого получаем `actor.ex_id`
|
|
336
|
+
- а в `Order` соответственно через `ad_id` получаем `ad.actor.ex_id`
|
|
337
|
+
|
|
338
|
+
|
|
339
|
+
## Migrations (native Tortoise CLI — no aerich)
|
|
340
|
+
```bash
|
|
341
|
+
cd packages/xync-db
|
|
342
|
+
tortoise init # only once
|
|
343
|
+
tortoise makemigrations # detect changes
|
|
344
|
+
tortoise migrate # apply
|
|
345
|
+
tortoise downgrade models 0001_initial # roll back
|
|
346
|
+
tortoise sqlmigrate models 0001_initial # preview SQL
|
|
347
|
+
```
|
|
348
|
+
Config lives in this package's `pyproject.toml` under `[tool.tortoise]`.
|
xync_db-0.1.1/README.md
ADDED
|
@@ -0,0 +1,329 @@
|
|
|
1
|
+
# XyncDB
|
|
2
|
+
TortoiseORM models, enums, pydantic DTOs, and migrations для аггрегатора бирж/платформ p2p-торговли.
|
|
3
|
+
Single source of truth for data shape across the monorepo.
|
|
4
|
+
|
|
5
|
+
### Основные db сущности:
|
|
6
|
+
- Ex: p2p биржа/платформа
|
|
7
|
+
|
|
8
|
+
- Person: сущность живого человека / физического лица
|
|
9
|
+
- User: Person являющийся нашим юзером (зареганный на нашей платформе xync)
|
|
10
|
+
- Actor: Person являющийся любым юзером на Ex (как 3-и лица: наши контрагенты в p2p-сделках, так и наши агенты)
|
|
11
|
+
- Agent: Actor xync-юзера с auth-доступами к Ex, может слать запросы. Сущность с помощью которой наши Users совершают действия на Ex. (Связь с User через Actor -> Person)
|
|
12
|
+
- Username: telegram id, nick-и, и возможно телефоны наших User-ов
|
|
13
|
+
|
|
14
|
+
- Cur: Фиатные(банковские) валюты
|
|
15
|
+
- CurEx: Cur на конкретной Ex, c minimum размером сделки в этой валюте, и ее десятичный scale-ом на этой Ex
|
|
16
|
+
- Coin: Крипто монеты
|
|
17
|
+
- CoinEx: Coin на конкретной Ex, c minimum размером сделки по этой монете, и ее десятичный scale-ом на этой Ex
|
|
18
|
+
- Pair: Все торговые пары Coin/Cur какие бывают
|
|
19
|
+
- PairEx: Pair которые есть на конкретной Ex
|
|
20
|
+
- PairSide: Направления is_sell(продажа или покупка) по каждой Pair
|
|
21
|
+
- Pm: Платежные системы (банки, кошельки, и тд) фиатных валют
|
|
22
|
+
- PmEx: Pm на конкретной бирже (содержимое таблицы pmex говорит о том, через какие Pm какие Ex поддерживают оплату сделок)
|
|
23
|
+
- PmCur: Пары Pm-Cur (таблица pmcur говорит какие Pm поддерживают какие Cur
|
|
24
|
+
- Cred: платежные реквизиты Person-a по конкретному PmCur
|
|
25
|
+
- Fiat: сумма на балансе конкретного Cred
|
|
26
|
+
- Addr: адрес по которому лежит определенный Coin конкретного Actor-a
|
|
27
|
+
- Asset: сумма, которая лежит на определенном Addr
|
|
28
|
+
|
|
29
|
+
- Ad: объявление maker-a (Actor) по PairSide (т.е: о покупке или продаже Coin за Cur) для конкретных Pm
|
|
30
|
+
- MyAd: Ad нашего Agent-a (Actor) по конкретным Fiat-ам
|
|
31
|
+
- Cond: текстовое описание условий сделки по Ad
|
|
32
|
+
- Order: сделка открытая taker-ом (Actor) по Ad, на определенную сумму на конкретный Cred того Actor-a, кто является продавцом в сделке
|
|
33
|
+
- Transfer: денежный перевод определенной сумму (amount) по конкретному Order-у
|
|
34
|
+
- Transaction: внутренний денежный перевод (на платформе xync) от User-а sender User-у receiver
|
|
35
|
+
|
|
36
|
+
### Relations
|
|
37
|
+
```mermaid
|
|
38
|
+
classDiagram
|
|
39
|
+
direction BT
|
|
40
|
+
class Actor {
|
|
41
|
+
uint8 exid
|
|
42
|
+
uint1 ex_id
|
|
43
|
+
varchar(63) name
|
|
44
|
+
integer person_id
|
|
45
|
+
integer id
|
|
46
|
+
}
|
|
47
|
+
class Ad {
|
|
48
|
+
uint8 exid
|
|
49
|
+
uint4 price
|
|
50
|
+
integer premium
|
|
51
|
+
uint4 amount
|
|
52
|
+
uint8 quantity
|
|
53
|
+
uint4 min_fiat
|
|
54
|
+
uint4 max_fiat
|
|
55
|
+
smallint status
|
|
56
|
+
boolean filtered
|
|
57
|
+
integer cond_id
|
|
58
|
+
integer maker_id
|
|
59
|
+
smallint pair_side_id
|
|
60
|
+
integer id
|
|
61
|
+
}
|
|
62
|
+
class ad_pm {
|
|
63
|
+
integer ad_id
|
|
64
|
+
integer pm_id
|
|
65
|
+
}
|
|
66
|
+
class Addr {
|
|
67
|
+
integer actor_id
|
|
68
|
+
smallint coin_id
|
|
69
|
+
integer id
|
|
70
|
+
}
|
|
71
|
+
class agent {
|
|
72
|
+
integer actor_id
|
|
73
|
+
jsonb auth
|
|
74
|
+
integer expire_at
|
|
75
|
+
smallint status
|
|
76
|
+
uint1 same_dir_ad
|
|
77
|
+
integer id
|
|
78
|
+
}
|
|
79
|
+
class Asset {
|
|
80
|
+
smallint typ
|
|
81
|
+
uint8 free
|
|
82
|
+
uint8 freeze
|
|
83
|
+
uint8 lock
|
|
84
|
+
uint8 target
|
|
85
|
+
integer addr_id
|
|
86
|
+
integer id
|
|
87
|
+
}
|
|
88
|
+
class coin {
|
|
89
|
+
varchar(15) ticker
|
|
90
|
+
uint1 scale
|
|
91
|
+
smallint typ
|
|
92
|
+
smallint id
|
|
93
|
+
}
|
|
94
|
+
class CoinEx {
|
|
95
|
+
varchar(32) exid
|
|
96
|
+
uint1 ex_id
|
|
97
|
+
smallint coin_id
|
|
98
|
+
bigint minimum
|
|
99
|
+
uint1 scale
|
|
100
|
+
boolean p2p
|
|
101
|
+
integer id
|
|
102
|
+
}
|
|
103
|
+
class cond {
|
|
104
|
+
varchar(4095) raw_txt
|
|
105
|
+
integer id
|
|
106
|
+
}
|
|
107
|
+
class Cred {
|
|
108
|
+
varchar(255) detail
|
|
109
|
+
varchar(127) name
|
|
110
|
+
integer pmcur_id
|
|
111
|
+
integer person_id
|
|
112
|
+
varchar(255) extra
|
|
113
|
+
integer ovr_pm_id
|
|
114
|
+
integer id
|
|
115
|
+
}
|
|
116
|
+
class CredEx {
|
|
117
|
+
uint8 exid
|
|
118
|
+
uint1 ex_id
|
|
119
|
+
integer cred_id
|
|
120
|
+
integer id
|
|
121
|
+
}
|
|
122
|
+
class Cur {
|
|
123
|
+
varchar(3) ticker
|
|
124
|
+
uint1 scale
|
|
125
|
+
uint1 id
|
|
126
|
+
}
|
|
127
|
+
class CurEx {
|
|
128
|
+
varchar(32) exid
|
|
129
|
+
uint1 cur_id
|
|
130
|
+
uint1 ex_id
|
|
131
|
+
uint4 minimum
|
|
132
|
+
uint1 scale
|
|
133
|
+
integer id
|
|
134
|
+
}
|
|
135
|
+
class Ex {
|
|
136
|
+
varchar(31) name
|
|
137
|
+
varchar(63) host
|
|
138
|
+
smallint typ
|
|
139
|
+
smallint status
|
|
140
|
+
varchar(511) logo
|
|
141
|
+
uint1 id
|
|
142
|
+
}
|
|
143
|
+
class Fiat {
|
|
144
|
+
uint4 amount
|
|
145
|
+
uint4 target
|
|
146
|
+
uint4 min_deposit
|
|
147
|
+
integer cred_id
|
|
148
|
+
integer id
|
|
149
|
+
}
|
|
150
|
+
class my_ad {
|
|
151
|
+
integer ad_id
|
|
152
|
+
uint1 target_place
|
|
153
|
+
bytea hex
|
|
154
|
+
timestamp(0) shared_at
|
|
155
|
+
boolean blocked
|
|
156
|
+
integer id
|
|
157
|
+
}
|
|
158
|
+
class myad_cred {
|
|
159
|
+
integer my_ad_id
|
|
160
|
+
integer credex_id
|
|
161
|
+
}
|
|
162
|
+
class Order {
|
|
163
|
+
uint8 exid
|
|
164
|
+
uint4 amount
|
|
165
|
+
uint8 quantity
|
|
166
|
+
smallint status
|
|
167
|
+
integer ad_id
|
|
168
|
+
integer cred_id
|
|
169
|
+
integer taker_id
|
|
170
|
+
uint2 maker_topic
|
|
171
|
+
uint2 taker_topic
|
|
172
|
+
timestamp updated_at
|
|
173
|
+
integer id
|
|
174
|
+
}
|
|
175
|
+
class Pair {
|
|
176
|
+
smallint coin_id
|
|
177
|
+
uint1 cur_id
|
|
178
|
+
bigint rate
|
|
179
|
+
smallint id
|
|
180
|
+
}
|
|
181
|
+
class pair_side {
|
|
182
|
+
smallint pair_id
|
|
183
|
+
boolean is_sell
|
|
184
|
+
smallint id
|
|
185
|
+
}
|
|
186
|
+
class PairEx {
|
|
187
|
+
smallint pair_id
|
|
188
|
+
uint1 ex_id
|
|
189
|
+
smallint fee
|
|
190
|
+
integer id
|
|
191
|
+
}
|
|
192
|
+
class person {
|
|
193
|
+
varchar(127) name
|
|
194
|
+
integer user_id
|
|
195
|
+
smallint status
|
|
196
|
+
varchar(255) note
|
|
197
|
+
integer id
|
|
198
|
+
}
|
|
199
|
+
class Pm {
|
|
200
|
+
varchar(255) norm
|
|
201
|
+
varchar(7) acronym
|
|
202
|
+
varchar(63) alias
|
|
203
|
+
boolean ok
|
|
204
|
+
boolean bank
|
|
205
|
+
boolean qr
|
|
206
|
+
uint2 fee
|
|
207
|
+
smallint typ
|
|
208
|
+
integer id
|
|
209
|
+
}
|
|
210
|
+
class PmCur {
|
|
211
|
+
uint1 cur_id
|
|
212
|
+
integer pm_id
|
|
213
|
+
integer id
|
|
214
|
+
}
|
|
215
|
+
class pmex {
|
|
216
|
+
varchar(63) exid
|
|
217
|
+
uint1 ex_id
|
|
218
|
+
integer pm_id
|
|
219
|
+
varchar(255) name
|
|
220
|
+
integer id
|
|
221
|
+
}
|
|
222
|
+
class transaction {
|
|
223
|
+
uint4 amount
|
|
224
|
+
smallint status
|
|
225
|
+
bytea proof
|
|
226
|
+
integer ts
|
|
227
|
+
uint1 cur_id
|
|
228
|
+
integer receiver_id
|
|
229
|
+
integer sender_id
|
|
230
|
+
uuid id
|
|
231
|
+
}
|
|
232
|
+
class transfer {
|
|
233
|
+
uint4 amount
|
|
234
|
+
varchar(32) pmid
|
|
235
|
+
varchar(63) sender_acc
|
|
236
|
+
integer order_id
|
|
237
|
+
integer file_id
|
|
238
|
+
integer id
|
|
239
|
+
}
|
|
240
|
+
class user {
|
|
241
|
+
varchar(63) first_name
|
|
242
|
+
varchar(31) last_name
|
|
243
|
+
varchar(127) pic
|
|
244
|
+
boolean blocked
|
|
245
|
+
smallint lang
|
|
246
|
+
smallint role
|
|
247
|
+
smallint status
|
|
248
|
+
uint2 bonus
|
|
249
|
+
smallint tz
|
|
250
|
+
bytea prv
|
|
251
|
+
bytea pub
|
|
252
|
+
integer ref_id
|
|
253
|
+
bigint username_id
|
|
254
|
+
integer id
|
|
255
|
+
}
|
|
256
|
+
class username {
|
|
257
|
+
varchar(127) username
|
|
258
|
+
uint8 phone
|
|
259
|
+
bigint id
|
|
260
|
+
}
|
|
261
|
+
|
|
262
|
+
Actor --> Ex : ex_id->ex.id
|
|
263
|
+
Actor --> person : person_id->person.id
|
|
264
|
+
Ad --> Actor : maker_id->maker.id
|
|
265
|
+
Ad --> cond : cond_id->cond.id
|
|
266
|
+
Ad --> pair_side : pair_side_id->pair_side.id
|
|
267
|
+
ad_pm --> Ad : ad_id->ad.id
|
|
268
|
+
ad_pm --> Pm : pm_id->pm.id
|
|
269
|
+
Addr --> Actor : actor_id->actor.id
|
|
270
|
+
Addr --> coin : coin_id->coin.id
|
|
271
|
+
agent --> Actor : actor_id->actor.id
|
|
272
|
+
Asset --> Addr : addr_id->addr.id
|
|
273
|
+
Asset --> agent : agent_id->agent.id
|
|
274
|
+
CoinEx --> coin : coin_id->coin.id
|
|
275
|
+
CoinEx --> Ex : ex_id->ex.id
|
|
276
|
+
Cred --> person : person_id->person.id
|
|
277
|
+
Cred --> Pm : ovr_pm_id->ovr_pm.id
|
|
278
|
+
Cred --> PmCur : pmcur_id->pmcur.id
|
|
279
|
+
CredEx --> Cred : cred_id->cred.id
|
|
280
|
+
CredEx --> Ex : ex_id->ex.id
|
|
281
|
+
CurEx --> Cur : cur_id->cur.id
|
|
282
|
+
CurEx --> Ex : ex_id->ex.id
|
|
283
|
+
Fiat --> Cred : cred_id->cred.id
|
|
284
|
+
my_ad --> Ad : ad_id->ad.id
|
|
285
|
+
myad_cred --> CredEx : credex_id->credex.id
|
|
286
|
+
myad_cred --> my_ad : my_ad_id->my_ad.id
|
|
287
|
+
Order --> Actor : taker_id->taker.id
|
|
288
|
+
Order --> Ad : ad_id->ad.id
|
|
289
|
+
Order --> Cred : cred_id->cred.id
|
|
290
|
+
Pair --> coin : coin_id->coin.id
|
|
291
|
+
Pair --> Cur : cur_id->cur.id
|
|
292
|
+
pair_side --> Pair : pair_id->pair.id
|
|
293
|
+
PairEx --> Ex : ex_id->ex.id
|
|
294
|
+
PairEx --> Pair : pair_id->pair.id
|
|
295
|
+
person --> user : user_id->user.id
|
|
296
|
+
Pm --> Cur : df_cur_id->df_cur.id
|
|
297
|
+
PmCur --> Cur : cur_id->cur.id
|
|
298
|
+
PmCur --> Pm : pm_id->pm.id
|
|
299
|
+
pmex --> Ex : ex_id->ex.id
|
|
300
|
+
pmex --> Pm : pm_id->pm.id
|
|
301
|
+
transaction --> Cur : cur_id->cur.id
|
|
302
|
+
transaction --> user : sender_id->sender.id
|
|
303
|
+
transaction --> user : receiver_id->receiver.id
|
|
304
|
+
transfer --> Order : order_id->order.id
|
|
305
|
+
user --> user : ref_id->ref.id
|
|
306
|
+
user --> username : username_id->username.id
|
|
307
|
+
```
|
|
308
|
+
|
|
309
|
+
###### Общее правило для всех сущностей, которые относятся к конкретной Ex:
|
|
310
|
+
`[Actor, CoinEx, CurEx, PmEx, CredEx, Ad, Order]`
|
|
311
|
+
- `id` - id сущности в нашей системе (в xync)
|
|
312
|
+
- `exid` - id сущности на этом `Ex`
|
|
313
|
+
- `ex_id` - id `Ex`-a которому принадлежит сущность
|
|
314
|
+
|
|
315
|
+
Исключение `Ad` и `Order`:
|
|
316
|
+
- в `Ad` нет непосредственно `ex_id`, у него есть `maker_id`, через которого получаем `actor.ex_id`
|
|
317
|
+
- а в `Order` соответственно через `ad_id` получаем `ad.actor.ex_id`
|
|
318
|
+
|
|
319
|
+
|
|
320
|
+
## Migrations (native Tortoise CLI — no aerich)
|
|
321
|
+
```bash
|
|
322
|
+
cd packages/xync-db
|
|
323
|
+
tortoise init # only once
|
|
324
|
+
tortoise makemigrations # detect changes
|
|
325
|
+
tortoise migrate # apply
|
|
326
|
+
tortoise downgrade models 0001_initial # roll back
|
|
327
|
+
tortoise sqlmigrate models 0001_initial # preview SQL
|
|
328
|
+
```
|
|
329
|
+
Config lives in this package's `pyproject.toml` under `[tool.tortoise]`.
|