-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathapi.py
More file actions
75 lines (63 loc) · 2.19 KB
/
api.py
File metadata and controls
75 lines (63 loc) · 2.19 KB
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
from fastapi import FastAPI, Depends, HTTPException
from tables import Activities, ActivityLegs, Accounts, Principals, Instruments
from schema import FinOperationGet
from databases import SessionLocal
from models import FinPut
from sqlalchemy.orm import Session
from typing import List
from loguru import logger
from datetime import date
app = FastAPI()
def db_connect():
with SessionLocal() as dxcore:
return dxcore
@app.get('/fin/all', response_model=List[FinOperationGet])
def get_fin_all(act_types: FinPut,
limit: int=10,
date_from: str='2023-03-01',
date_to: str=str(date.today()),
dxcore: Session=Depends(db_connect)
) -> FinOperationGet:
logger.info(act_types.activity_type)
result = (
dxcore.query(
Accounts.account_id,
Activities.activity_type,
Activities.created_time,
Principals.up,
Activities.description,
Instruments.symbol,
ActivityLegs.quantity
)
.order_by(Activities.created_time)
.filter(Activities.created_time.between(date_from, date_to))
.filter(Accounts.clearing_code == 'LIVE')
.filter(Activities.description.notilike('test_%'))
.filter(Activities.description.notilike('demo%'))
.filter(Activities.activity_type.in_(tuple(act_types.activity_type)))
.limit(limit)
.all()
)
logger.info(result)
return result
@app.get('/fin/{user_id}') # валидировать вывод
def get_fin_by_user(user_id: str, dxcore: Session=Depends(db_connect)):
result = (
dxcore.query(
Principals.up,
Accounts.account_id,
Activities.activity_type,
Activities.created_time,
Activities.description,
Instruments.symbol,
ActivityLegs.quantity
)
.filter(Principals.up == user_id)
.filter(Accounts.clearing_code == 'LIVE')
#.filter((~(Activities.description.contains('demo|Demo|test|Test'))))
.order_by(Activities.created_time.desc())
.limit(5)
.all()
)
logger.info(result)
return result