diff --git a/crud.py b/crud.py index 98d1305..12e1ce2 100644 --- a/crud.py +++ b/crud.py @@ -57,11 +57,7 @@ async def create_card(data: CreateCardData, wallet_id: str) -> Card: return card -async def update_card(card_id: str, data: CreateCardData) -> Card: - card = Card( - id=card_id, - **data.dict(), - ) +async def update_card(card: Card) -> Card: await db.update("boltcards.cards", card) return card diff --git a/migrations.py b/migrations.py index 43d5bb0..8d8464f 100644 --- a/migrations.py +++ b/migrations.py @@ -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;") diff --git a/models.py b/models.py index f2220c5..ca744cb 100644 --- a/models.py +++ b/models.py @@ -17,10 +17,8 @@ class Card(BaseModel): uid: str external_id: str counter: int - # TODO: database column is TEXT should be INT - tx_limit: str - # TODO: database column is TEXT should be INT - daily_limit: str + tx_limit: int + daily_limit: int enable: bool k0: str k1: str diff --git a/views_api.py b/views_api.py index acaac9c..a2f7a12 100644 --- a/views_api.py +++ b/views_api.py @@ -71,7 +71,6 @@ async def api_card_update( card_id: str, wallet: WalletTypeInfo = Depends(require_admin_key), ) -> Card: - card = await get_card(card_id) if not card: raise HTTPException( @@ -85,8 +84,9 @@ async def api_card_update( detail="UID already registered. Delete registered card and try again.", status_code=HTTPStatus.BAD_REQUEST, ) - card = await update_card(card_id, **data.dict()) - assert card, "update_card should always return a card" + for key, value in data.dict().items(): + setattr(card, key, value) + await update_card(card) return card