fix: wrong typing in DB columns (#51)

* fix: wrong typing in DB columns
* fix: update
* fix: migrations
* chore: lint
This commit is contained in:
Tiago Vasconcelos 2025-04-15 12:29:34 +01:00 committed by GitHub
commit 79c74708e1
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
4 changed files with 79 additions and 12 deletions

View file

@ -57,11 +57,7 @@ async def create_card(data: CreateCardData, wallet_id: str) -> Card:
return card return card
async def update_card(card_id: str, data: CreateCardData) -> Card: async def update_card(card: Card) -> Card:
card = Card(
id=card_id,
**data.dict(),
)
await db.update("boltcards.cards", card) await db.update("boltcards.cards", card)
return card return card

View file

@ -55,3 +55,76 @@ async def m001_initial(db):
); );
""" """
) )
async def m002_correct_typing(db):
await db.execute("ALTER TABLE boltcards.cards RENAME TO cards_m001;")
await db.execute(
"""
CREATE TABLE boltcards.cards (
id TEXT PRIMARY KEY UNIQUE,
wallet TEXT NOT NULL,
card_name TEXT NOT NULL,
uid TEXT NOT NULL UNIQUE,
external_id TEXT NOT NULL UNIQUE,
counter INT NOT NULL DEFAULT 0,
tx_limit INT NOT NULL,
daily_limit INT NOT NULL,
enable BOOL NOT NULL,
k0 TEXT NOT NULL DEFAULT '00000000000000000000000000000000',
k1 TEXT NOT NULL DEFAULT '00000000000000000000000000000000',
k2 TEXT NOT NULL DEFAULT '00000000000000000000000000000000',
prev_k0 TEXT NOT NULL DEFAULT '00000000000000000000000000000000',
prev_k1 TEXT NOT NULL DEFAULT '00000000000000000000000000000000',
prev_k2 TEXT NOT NULL DEFAULT '00000000000000000000000000000000',
otp TEXT NOT NULL DEFAULT '',
time TIMESTAMP NOT NULL DEFAULT """
+ db.timestamp_now
+ """
);
"""
)
await db.execute(
"""
INSERT INTO boltcards.cards (
id,
wallet,
card_name,
uid,
external_id,
counter,
tx_limit,
daily_limit,
enable,
k0,
k1,
k2,
prev_k0,
prev_k1,
prev_k2,
otp,
time
)
SELECT
id,
wallet,
card_name,
uid,
external_id,
counter,
CAST(tx_limit AS INT),
CAST(daily_limit AS INT),
enable,
k0,
k1,
k2,
prev_k0,
prev_k1,
prev_k2,
otp,
time
FROM boltcards.cards_m001;
"""
)
await db.execute("DROP TABLE boltcards.cards_m001;")

View file

@ -17,10 +17,8 @@ class Card(BaseModel):
uid: str uid: str
external_id: str external_id: str
counter: int counter: int
# TODO: database column is TEXT should be INT tx_limit: int
tx_limit: str daily_limit: int
# TODO: database column is TEXT should be INT
daily_limit: str
enable: bool enable: bool
k0: str k0: str
k1: str k1: str

View file

@ -71,7 +71,6 @@ async def api_card_update(
card_id: str, card_id: str,
wallet: WalletTypeInfo = Depends(require_admin_key), wallet: WalletTypeInfo = Depends(require_admin_key),
) -> Card: ) -> Card:
card = await get_card(card_id) card = await get_card(card_id)
if not card: if not card:
raise HTTPException( raise HTTPException(
@ -85,8 +84,9 @@ async def api_card_update(
detail="UID already registered. Delete registered card and try again.", detail="UID already registered. Delete registered card and try again.",
status_code=HTTPStatus.BAD_REQUEST, status_code=HTTPStatus.BAD_REQUEST,
) )
card = await update_card(card_id, **data.dict()) for key, value in data.dict().items():
assert card, "update_card should always return a card" setattr(card, key, value)
await update_card(card)
return card return card