From 7e2e860b0722dbfef8c005cfd36158c353931629 Mon Sep 17 00:00:00 2001 From: shum Date: Thu, 22 Oct 2026 03:58:49 +0000 Subject: [PATCH] store: reuse the code's reservation refusal --- apps/simplex-store-service/src/StoreService/Names/Codes.hs | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/apps/simplex-store-service/src/StoreService/Names/Codes.hs b/apps/simplex-store-service/src/StoreService/Names/Codes.hs index d94458a7dc..5709fc1fc9 100644 --- a/apps/simplex-store-service/src/StoreService/Names/Codes.hs +++ b/apps/simplex-store-service/src/StoreService/Names/Codes.hs @@ -10,6 +10,7 @@ module StoreService.Names.Codes CodeRefusal (..), codeRefusal, codeRefusalTag, + reserveRefusal, readPrepaidCode, reserveCode, releaseCode, @@ -94,6 +95,10 @@ stateRefusal = \case CSExpired -> Just CRExpired CSUnpaid -> Just CRPaymentPending +-- | Why a conditional reservation of the code refused it, as the code reads now. +reserveRefusal :: DB.Connection -> UTCTime -> ByteString -> RegistrationId -> Int -> IO CodeRefusal +reserveRefusal db now codeHash rid len = maybe CRInvalid (fromMaybe CRReserved . codeRefusal now rid len) <$> getPrepaidCode db codeHash + readPrepaidCode :: DBStore -> NamePrepaidCode -> IO (Maybe PrepaidCode) readPrepaidCode st code = withTransaction st (`getPrepaidCode` namePrepaidCodeHash code) @@ -110,7 +115,7 @@ reserveCode turns st now codeHash rid len write = | otherwise -> reservePrepaidCode db pcId rid now >>= \case -- Only a writer outside this process, which takes no turn here, can refuse it. - False -> Left . maybe CRInvalid (fromMaybe CRReserved . codeRefusal now rid len) <$> getPrepaidCode db codeHash + False -> Left <$> reserveRefusal db now codeHash rid len True -> write db >>= \case refused@(Left _) -> Right refused <$ releasePrepaidCode db pcId rid