diff --git a/crud.py b/crud.py index 0a678e7..b4f5c61 100644 --- a/crud.py +++ b/crud.py @@ -87,7 +87,7 @@ async def get_card(card_id: str) -> Optional[Card]: return Card.parse_obj(card) - +""" async def get_card_by_uid(card_uid: str) -> Optional[Card]: row = await db.fetchone( "SELECT * FROM boltcards.cards WHERE uid = ?", (card_uid.upper(),) @@ -98,7 +98,7 @@ async def get_card_by_uid(card_uid: str) -> Optional[Card]: card = dict(**row) return Card.parse_obj(card) - +""" async def get_card_by_external_id(external_id: str) -> Optional[Card]: row = await db.fetchone( diff --git a/migrations.py b/migrations.py index 43d5bb0..e40f865 100644 --- a/migrations.py +++ b/migrations.py @@ -55,3 +55,40 @@ async def m001_initial(db): ); """ ) + +async def m002_remove_constraint_unique_uid(db): + """ + Do not check the duplicate UID so remove the constraint from DB. + """ + await db.execute( + """ + CREATE TABLE cardsnew ( + id TEXT PRIMARY KEY UNIQUE, + wallet TEXT NOT NULL, + card_name TEXT NOT NULL, + uid TEXT NOT NULL, + external_id TEXT NOT NULL UNIQUE, + counter INT NOT NULL DEFAULT 0, + tx_limit TEXT NOT NULL, + daily_limit TEXT 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.cardsnew SELECT * FROM boltcards.cards;") + await db.execute("DROP TABLE boltcards.cards;") + await db.execute("ALTER TABLE boltcards.cardsnew RENAME TO cards;") + + + + diff --git a/views_api.py b/views_api.py index b710518..1aa2490 100644 --- a/views_api.py +++ b/views_api.py @@ -12,7 +12,6 @@ delete_card, enable_disable_card, get_card, - get_card_by_uid, get_cards, get_hits, get_refunds, @@ -82,12 +81,6 @@ async def api_card_update( raise HTTPException( detail="Not your card.", status_code=HTTPStatus.FORBIDDEN ) - checkUid = await get_card_by_uid(data.uid) - if checkUid and checkUid.id != card_id: - raise HTTPException( - 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" return card @@ -102,12 +95,6 @@ async def api_card_create( data: CreateCardData, wallet: WalletTypeInfo = Depends(require_admin_key), ) -> Card: - checkUid = await get_card_by_uid(data.uid) - if checkUid: - raise HTTPException( - detail="UID already registered. Delete registered card and try again.", - status_code=HTTPStatus.BAD_REQUEST, - ) card = await create_card(wallet_id=wallet.wallet.id, data=data) assert card, "create_card should always return a card" return card