feat: balance and reward
This commit is contained in:
0
queries/balance/__init__.py
Normal file
0
queries/balance/__init__.py
Normal file
4
queries/balance/api/__init__.py
Normal file
4
queries/balance/api/__init__.py
Normal file
@@ -0,0 +1,4 @@
|
||||
from .requests import (
|
||||
get_balance_transactions,
|
||||
get_balance_info
|
||||
)
|
||||
29
queries/balance/api/requests.py
Normal file
29
queries/balance/api/requests.py
Normal file
@@ -0,0 +1,29 @@
|
||||
import database
|
||||
from ..schemas.requests import *
|
||||
from ..schemas.responses import *
|
||||
from ..schemas.entities import *
|
||||
|
||||
|
||||
def get_balance_transactions(data: dict):
|
||||
items_per_page = 5
|
||||
request = GetBalanceTransactionsRequest.model_validate(data)
|
||||
page = max([request.page - 1, 0])
|
||||
query = (database.BalanceTransaction.query
|
||||
.filter(database.BalanceTransaction.user_id == request.user_id)
|
||||
.order_by(database.BalanceTransaction.created_at.desc())
|
||||
.offset(items_per_page * page)
|
||||
.limit(items_per_page)
|
||||
.all())
|
||||
balance_transactions = [BalanceTransaction.model_validate(balance_transaction) for balance_transaction in query]
|
||||
response = GetBalanceTransactionsResponse(balance_transactions=balance_transactions)
|
||||
return response.to_dict()
|
||||
|
||||
|
||||
def get_balance_info(data: dict):
|
||||
request = GetBalanceInfoRequest.model_validate(data)
|
||||
balance = (database.User.query
|
||||
.filter_by(id=request.user_id)
|
||||
.with_entities(database.User.balance)
|
||||
.scalar())
|
||||
response = GetBalanceInfoResponse(balance=balance)
|
||||
return response.to_dict()
|
||||
0
queries/balance/schemas/__init__.py
Normal file
0
queries/balance/schemas/__init__.py
Normal file
13
queries/balance/schemas/entities.py
Normal file
13
queries/balance/schemas/entities.py
Normal file
@@ -0,0 +1,13 @@
|
||||
from datetime import datetime
|
||||
|
||||
from schemas.base import CommonModel
|
||||
|
||||
|
||||
class BalanceTransaction(CommonModel):
|
||||
id: int
|
||||
type: int
|
||||
user_id: int
|
||||
amount: float
|
||||
description: str
|
||||
json_data: dict | None = None
|
||||
created_at: datetime
|
||||
10
queries/balance/schemas/requests.py
Normal file
10
queries/balance/schemas/requests.py
Normal file
@@ -0,0 +1,10 @@
|
||||
from schemas.base import CommonModel
|
||||
|
||||
|
||||
class GetBalanceTransactionsRequest(CommonModel):
|
||||
page: int
|
||||
user_id: int
|
||||
|
||||
|
||||
class GetBalanceInfoRequest(CommonModel):
|
||||
user_id: int
|
||||
12
queries/balance/schemas/responses.py
Normal file
12
queries/balance/schemas/responses.py
Normal file
@@ -0,0 +1,12 @@
|
||||
from typing import List
|
||||
|
||||
from schemas.base import CommonModel
|
||||
from .entities import BalanceTransaction
|
||||
|
||||
|
||||
class GetBalanceTransactionsResponse(CommonModel):
|
||||
balance_transactions: List[BalanceTransaction]
|
||||
|
||||
|
||||
class GetBalanceInfoResponse(CommonModel):
|
||||
balance: float
|
||||
Reference in New Issue
Block a user