Skip to content

Commit 9558e86

Browse files
Myeclpay fix (#745)
### Description Please explain the changes you made here. ### Checklist - [ ] Created tests which fail without the change (if possible) - [ ] All tests passing - [ ] Extended the documentation, if necessary
1 parent 1ad9556 commit 9558e86

File tree

3 files changed

+28
-107
lines changed

3 files changed

+28
-107
lines changed

app/core/myeclpay/endpoints_myeclpay.py

Lines changed: 18 additions & 60 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22
import logging
33
import urllib
44
import uuid
5-
from datetime import UTC, date, datetime, timedelta
5+
from datetime import UTC, datetime, timedelta
66
from pathlib import Path
77
from uuid import UUID
88

@@ -43,7 +43,6 @@
4343
)
4444
from app.core.myeclpay.utils_myeclpay import (
4545
LATEST_TOS,
46-
MAX_TRANSACTION_TOTAL,
4746
QRCODE_EXPIRATION,
4847
is_user_latest_tos_signed,
4948
validate_transfer_callback,
@@ -306,7 +305,7 @@ async def init_transfer_structure_manager(
306305
db=db,
307306
)
308307

309-
confirmation_url = f"{settings.CLIENT_URL}myeclpay/structures/confirm-transfer?token={confirmation_token}"
308+
confirmation_url = f"{settings.CLIENT_URL}myeclpay/structures/confirm-manager-transfer?token={confirmation_token}"
310309

311310
if settings.SMTP_ACTIVE:
312311
mail = mail_templates.get_mail_myeclpay_structure_transfer(
@@ -504,8 +503,8 @@ async def create_store(
504503
)
505504
async def get_store_history(
506505
store_id: UUID,
507-
start_date: date | None = None,
508-
end_date: date | None = None,
506+
start_date: datetime | None = None,
507+
end_date: datetime | None = None,
509508
db: AsyncSession = Depends(get_db),
510509
user: CoreUser = Depends(is_user()),
511510
):
@@ -537,22 +536,11 @@ async def get_store_history(
537536

538537
history = []
539538

540-
start_datetime = (
541-
datetime.combine(start_date, datetime.min.time(), tzinfo=UTC)
542-
if start_date
543-
else None
544-
)
545-
end_datetime = (
546-
datetime.combine(end_date, datetime.max.time(), tzinfo=UTC)
547-
if end_date
548-
else None
549-
)
550-
551539
transactions = await cruds_myeclpay.get_transactions_by_wallet_id(
552540
wallet_id=store.wallet_id,
553541
db=db,
554-
start_datetime=start_datetime,
555-
end_datetime=end_datetime,
542+
start_datetime=start_date,
543+
end_datetime=end_date,
556544
)
557545
for transaction in transactions:
558546
history_refund: schemas_myeclpay.HistoryRefund | None = None
@@ -595,8 +583,8 @@ async def get_store_history(
595583
transfers = await cruds_myeclpay.get_transfers_by_wallet_id(
596584
wallet_id=store.wallet_id,
597585
db=db,
598-
start_datetime=start_datetime,
599-
end_datetime=end_datetime,
586+
start_datetime=start_date,
587+
end_datetime=end_date,
600588
)
601589
if len(transfers) > 0:
602590
hyperion_error_logger.error(
@@ -607,8 +595,8 @@ async def get_store_history(
607595
refunds = await cruds_myeclpay.get_refunds_by_wallet_id(
608596
wallet_id=store.wallet_id,
609597
db=db,
610-
start_datetime=start_datetime,
611-
end_datetime=end_datetime,
598+
start_datetime=start_date,
599+
end_datetime=end_date,
612600
)
613601
for refund in refunds:
614602
if refund.debited_wallet_id == store.wallet_id:
@@ -1118,18 +1106,6 @@ async def register_user(
11181106
)
11191107

11201108

1121-
@router.get(
1122-
"/myeclpay/tos",
1123-
response_model=str,
1124-
status_code=200,
1125-
)
1126-
async def get_tos(user: CoreUser = Depends(is_user())):
1127-
"""
1128-
Get MyECLPay latest TOS as a string
1129-
"""
1130-
return Path("assets/myeclpay-terms-of-service.txt").read_text()
1131-
1132-
11331109
@router.get(
11341110
"/myeclpay/users/me/tos",
11351111
status_code=200,
@@ -1160,7 +1136,6 @@ async def get_user_tos(
11601136
accepted_tos_version=existing_user_payment.accepted_tos_version,
11611137
latest_tos_version=LATEST_TOS,
11621138
tos_content=Path("assets/myeclpay-terms-of-service.txt").read_text(),
1163-
max_transaction_total=MAX_TRANSACTION_TOTAL,
11641139
max_wallet_balance=settings.MYECLPAY_MAXIMUM_WALLET_BALANCE,
11651140
)
11661141

@@ -1563,8 +1538,8 @@ async def revoke_user_devices(
15631538
async def get_user_wallet_history(
15641539
db: AsyncSession = Depends(get_db),
15651540
user: CoreUser = Depends(is_user()),
1566-
start_date: date | None = None,
1567-
end_date: date | None = None,
1541+
start_date: datetime | None = None,
1542+
end_date: datetime | None = None,
15681543
):
15691544
"""
15701545
Get all transactions for the current user's wallet.
@@ -1582,25 +1557,14 @@ async def get_user_wallet_history(
15821557
detail="User is not registered for MyECL Pay",
15831558
)
15841559

1585-
start_datetime = (
1586-
datetime.combine(start_date, datetime.min.time(), tzinfo=UTC)
1587-
if start_date
1588-
else None
1589-
)
1590-
end_datetime = (
1591-
datetime.combine(end_date, datetime.max.time(), tzinfo=UTC)
1592-
if end_date
1593-
else None
1594-
)
1595-
15961560
history: list[schemas_myeclpay.History] = []
15971561

15981562
# First we get all received and send transactions
15991563
transactions = await cruds_myeclpay.get_transactions_by_wallet_id(
16001564
wallet_id=user_payment.wallet_id,
16011565
db=db,
1602-
start_datetime=start_datetime,
1603-
end_datetime=end_datetime,
1566+
start_datetime=start_date,
1567+
end_datetime=end_date,
16041568
)
16051569

16061570
for transaction in transactions:
@@ -1643,8 +1607,8 @@ async def get_user_wallet_history(
16431607
transfers = await cruds_myeclpay.get_transfers_by_wallet_id(
16441608
wallet_id=user_payment.wallet_id,
16451609
db=db,
1646-
start_datetime=start_datetime,
1647-
end_datetime=end_datetime,
1610+
start_datetime=start_date,
1611+
end_datetime=end_date,
16481612
)
16491613

16501614
for transfer in transfers:
@@ -1670,8 +1634,8 @@ async def get_user_wallet_history(
16701634
refunds = await cruds_myeclpay.get_refunds_by_wallet_id(
16711635
wallet_id=user_payment.wallet_id,
16721636
db=db,
1673-
start_datetime=start_datetime,
1674-
end_datetime=end_datetime,
1637+
start_datetime=start_date,
1638+
end_datetime=end_date,
16751639
)
16761640
for refund in refunds:
16771641
if refund.debited_wallet_id == user_payment.wallet_id:
@@ -2061,12 +2025,6 @@ async def store_scan_qrcode(
20612025
detail="Total must be greater than 0",
20622026
)
20632027

2064-
if scan_info.tot > MAX_TRANSACTION_TOTAL:
2065-
raise HTTPException(
2066-
status_code=400,
2067-
detail=f"Total can not exceed {MAX_TRANSACTION_TOTAL}",
2068-
)
2069-
20702028
if scan_info.iat < datetime.now(UTC) - timedelta(
20712029
minutes=QRCODE_EXPIRATION,
20722030
):

app/core/myeclpay/schemas_myeclpay.py

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@
33

44
from pydantic import (
55
BaseModel,
6+
Field,
67
)
78

89
from app.core.memberships import schemas_memberships
@@ -94,7 +95,11 @@ class TOSSignatureResponse(BaseModel):
9495
accepted_tos_version: int
9596
latest_tos_version: int
9697
tos_content: str
97-
max_transaction_total: int
98+
# TODO: remove this field in the future
99+
max_transaction_total: int = Field(
100+
default=0,
101+
deprecated="The limit is not applied anymore",
102+
)
98103
max_wallet_balance: int
99104

100105

tests/test_myeclpay.py

Lines changed: 4 additions & 46 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,5 @@
11
import base64
22
from datetime import UTC, datetime, timedelta
3-
from pathlib import Path
43
from uuid import UUID, uuid4
54

65
import pytest_asyncio
@@ -782,8 +781,8 @@ async def test_get_store_history_with_date(client: TestClient):
782781
response = client.get(
783782
f"/myeclpay/stores/{store.id}/history",
784783
params={
785-
"start_date": "2025-05-18",
786-
"end_date": "2025-05-19",
784+
"start_date": "2025-05-18T00:00:00Z",
785+
"end_date": "2025-05-19T00:00:00Z",
787786
},
788787
headers={
789788
"Authorization": f"Bearer {store_seller_can_see_history_user_access_token}",
@@ -1339,14 +1338,6 @@ async def test_delete_manager_seller(client: TestClient):
13391338
)
13401339

13411340

1342-
async def test_get_tos(client: TestClient):
1343-
response = client.get(
1344-
"/myeclpay/tos",
1345-
headers={"Authorization": f"Bearer {ecl_user_access_token}"},
1346-
)
1347-
assert response.json() == Path("assets/myeclpay-terms-of-service.txt").read_text()
1348-
1349-
13501341
async def test_get_tos_for_unregistered_user(client: TestClient):
13511342
response = client.get(
13521343
"/myeclpay/users/me/tos",
@@ -1744,8 +1735,8 @@ def test_get_transactions_success_with_date(client: TestClient):
17441735
response = client.get(
17451736
"/myeclpay/users/me/wallet/history",
17461737
params={
1747-
"start_date": "2025-05-18",
1748-
"end_date": "2025-05-19",
1738+
"start_date": "2025-05-18T00:00:00Z",
1739+
"end_date": "2025-05-19T23:59:59Z",
17491740
},
17501741
headers={"Authorization": f"Bearer {ecl_user_access_token}"},
17511742
)
@@ -2123,39 +2114,6 @@ def test_store_scan_store_negative_total(client: TestClient):
21232114
ensure_qr_code_id_is_already_used(qr_code_id=qr_code_id, client=client)
21242115

21252116

2126-
def test_store_scan_store_total_greater_than_max(client: TestClient):
2127-
qr_code_id = uuid4()
2128-
2129-
qr_code_content = QRCodeContentData(
2130-
id=qr_code_id,
2131-
tot=4000,
2132-
iat=datetime.now(UTC),
2133-
store=True,
2134-
key=ecl_user_wallet_device.id,
2135-
)
2136-
2137-
signature = ecl_user_wallet_device_private_key.sign(
2138-
qr_code_content.model_dump_json().encode("utf-8"),
2139-
)
2140-
2141-
response = client.post(
2142-
f"/myeclpay/stores/{store.id}/scan",
2143-
headers={"Authorization": f"Bearer {store_seller_can_bank_user_access_token}"},
2144-
json={
2145-
"id": str(qr_code_content.id),
2146-
"key": str(qr_code_content.key),
2147-
"tot": qr_code_content.tot,
2148-
"iat": qr_code_content.iat.isoformat(),
2149-
"store": qr_code_content.store,
2150-
"signature": base64.b64encode(signature).decode("utf-8"),
2151-
},
2152-
)
2153-
assert response.status_code == 400
2154-
assert response.json()["detail"] == "Total can not exceed 2000"
2155-
2156-
ensure_qr_code_id_is_already_used(qr_code_id=qr_code_id, client=client)
2157-
2158-
21592117
def test_store_scan_store_missing_wallet(
21602118
client: TestClient,
21612119
mocker: MockerFixture,

0 commit comments

Comments
 (0)