mirror of
https://github.com/simplex-chat/simplex-chat.git
synced 2026-09-09 11:46:06 +00:00
core: badge codes schema, plan (#7427)
This commit is contained in:
@@ -62,6 +62,10 @@ data BadgeServiceCommand
|
||||
paymentVia :: ServicePaymentMethod,
|
||||
upgrade :: Maybe BadgeUpgrade -- upgrade non-store badge
|
||||
}
|
||||
| BSCRedeemBadgeCode
|
||||
{ masterKey :: BadgeMasterKey,
|
||||
code :: Text -- no badgeRequest: a code carries no tier for the client to state
|
||||
}
|
||||
| BSCPurchaseBadge
|
||||
{ badgeRequest :: BadgeRequest,
|
||||
payment :: ServicePayment,
|
||||
|
||||
@@ -9,6 +9,7 @@ module Simplex.Chat.Badges.Types
|
||||
BadgeItemStatus (..),
|
||||
OfferDiscount (..),
|
||||
BadgePurchaseStatus (..),
|
||||
BadgeCodePaymentStatus (..),
|
||||
LedgerEntryType (..),
|
||||
LedgerCreditType (..),
|
||||
LedgerDebitType (..),
|
||||
@@ -22,7 +23,6 @@ module Simplex.Chat.Badges.Types
|
||||
) where
|
||||
|
||||
import qualified Data.Aeson as J
|
||||
import Data.ByteString.Char8 (ByteString)
|
||||
import Data.Int (Int64)
|
||||
import Data.Text (Text)
|
||||
import Data.Time.Clock (UTCTime)
|
||||
@@ -58,6 +58,10 @@ data OfferDiscount
|
||||
data BadgePurchaseStatus = PSAcquiring | PSIssued | PSSuperseded | PSFailed
|
||||
deriving (Eq, Show)
|
||||
|
||||
-- unconfirmed draft
|
||||
data BadgeCodePaymentStatus = CPSPaid | CPSUnpaid | CPSFree
|
||||
deriving (Eq, Show)
|
||||
|
||||
-- confirmed
|
||||
data LedgerEntryType = LECredit {credit :: LedgerCreditType} | LEDebit {debit :: LedgerDebitType}
|
||||
deriving (Eq, Show)
|
||||
|
||||
@@ -26,6 +26,5 @@ data ServicePayment
|
||||
= SPApple {jws :: Text}
|
||||
| SPGoogle {token :: Text}
|
||||
| SPInvoice {invoiceId :: InvoiceId}
|
||||
| SPCode {code :: Text}
|
||||
| SPReceipt {receipt :: Text} -- transfer of unissued months
|
||||
deriving (Show)
|
||||
|
||||
@@ -180,12 +180,23 @@ CREATE INDEX @idx_badge_issuances_purchase ON @badge_issuances(badge_purchase_id
|
||||
badgeSchemaTablesDown :: Text
|
||||
badgeSchemaTablesDown =
|
||||
[r|
|
||||
DROP INDEX @idx_badge_issuances_purchase;
|
||||
DROP TABLE @badge_issuances;
|
||||
DROP INDEX @idx_badge_ledger_uuid;
|
||||
DROP INDEX @idx_badge_ledger_purchase;
|
||||
DROP INDEX @idx_badge_ledger_payment;
|
||||
DROP INDEX @idx_badge_ledger_charge;
|
||||
DROP INDEX @idx_badge_ledger_from_purchase;
|
||||
DROP INDEX @idx_badge_ledger_to_purchase;
|
||||
DROP TABLE @badge_ledger;
|
||||
DROP INDEX @idx_badge_subscription_changes_purchase;
|
||||
DROP TABLE @badge_subscription_changes;
|
||||
DROP INDEX @idx_badge_invoices_purchase;
|
||||
DROP TABLE @badge_invoices;
|
||||
DROP TABLE @badge_purchases;
|
||||
DROP TABLE @subscription_charges;
|
||||
DROP INDEX @idx_payments_provider_ref;
|
||||
DROP INDEX @idx_payments_invoice;
|
||||
DROP TABLE @payments;
|
||||
DROP TABLE @invoices;
|
||||
DROP TABLE @badge_offers;
|
||||
@@ -217,11 +228,34 @@ ALTER TABLE badge_ledger ADD COLUMN entry_type_value TEXT;
|
||||
CREATE INDEX idx_badge_purchases_user ON badge_purchases(user_id);
|
||||
|
||||
ALTER TABLE users ADD COLUMN shown_badge_id BIGINT REFERENCES badge_purchases ON DELETE SET NULL;
|
||||
|
||||
CREATE TABLE badge_code_redemptions(
|
||||
badge_code_redemption_id BIGINT GENERATED ALWAYS AS IDENTITY PRIMARY KEY,
|
||||
user_id BIGINT NOT NULL REFERENCES users ON DELETE CASCADE,
|
||||
code TEXT NOT NULL,
|
||||
purchase_key BYTEA NOT NULL,
|
||||
purchase_priv_key BYTEA NOT NULL,
|
||||
master_key BYTEA NOT NULL,
|
||||
created_at TIMESTAMPTZ NOT NULL,
|
||||
UNIQUE(code)
|
||||
);
|
||||
|
||||
CREATE INDEX idx_badge_code_redemptions_user ON badge_code_redemptions(user_id);
|
||||
|
||||
ALTER TABLE badge_purchases ADD COLUMN badge_code_redemption_id BIGINT REFERENCES badge_code_redemptions;
|
||||
|
||||
CREATE UNIQUE INDEX idx_badge_purchases_code_redemption ON badge_purchases(badge_code_redemption_id);
|
||||
|]
|
||||
|
||||
down_m20261001_user_badges :: Text
|
||||
down_m20261001_user_badges =
|
||||
[r|
|
||||
DROP INDEX idx_badge_purchases_code_redemption;
|
||||
DROP INDEX idx_badge_purchases_user;
|
||||
ALTER TABLE users DROP COLUMN shown_badge_id;
|
||||
|]
|
||||
<> badgeSchemaDown ""
|
||||
<> [r|
|
||||
DROP INDEX idx_badge_code_redemptions_user;
|
||||
DROP TABLE badge_code_redemptions;
|
||||
|]
|
||||
|
||||
@@ -181,12 +181,23 @@ CREATE INDEX @idx_badge_issuances_purchase ON @badge_issuances(badge_purchase_id
|
||||
badgeSchemaTablesDown :: Query
|
||||
badgeSchemaTablesDown =
|
||||
[sql|
|
||||
DROP INDEX @idx_badge_issuances_purchase;
|
||||
DROP TABLE @badge_issuances;
|
||||
DROP INDEX @idx_badge_ledger_uuid;
|
||||
DROP INDEX @idx_badge_ledger_purchase;
|
||||
DROP INDEX @idx_badge_ledger_payment;
|
||||
DROP INDEX @idx_badge_ledger_charge;
|
||||
DROP INDEX @idx_badge_ledger_from_purchase;
|
||||
DROP INDEX @idx_badge_ledger_to_purchase;
|
||||
DROP TABLE @badge_ledger;
|
||||
DROP INDEX @idx_badge_subscription_changes_purchase;
|
||||
DROP TABLE @badge_subscription_changes;
|
||||
DROP INDEX @idx_badge_invoices_purchase;
|
||||
DROP TABLE @badge_invoices;
|
||||
DROP TABLE @badge_purchases;
|
||||
DROP TABLE @subscription_charges;
|
||||
DROP INDEX @idx_payments_provider_ref;
|
||||
DROP INDEX @idx_payments_invoice;
|
||||
DROP TABLE @payments;
|
||||
DROP TABLE @invoices;
|
||||
DROP TABLE @badge_offers;
|
||||
@@ -218,11 +229,34 @@ ALTER TABLE badge_ledger ADD COLUMN entry_type_value TEXT;
|
||||
CREATE INDEX idx_badge_purchases_user ON badge_purchases(user_id);
|
||||
|
||||
ALTER TABLE users ADD COLUMN shown_badge_id INTEGER REFERENCES badge_purchases ON DELETE SET NULL;
|
||||
|
||||
CREATE TABLE badge_code_redemptions(
|
||||
badge_code_redemption_id INTEGER PRIMARY KEY AUTOINCREMENT,
|
||||
user_id INTEGER NOT NULL REFERENCES users ON DELETE CASCADE,
|
||||
code TEXT NOT NULL,
|
||||
purchase_key BLOB NOT NULL,
|
||||
purchase_priv_key BLOB NOT NULL,
|
||||
master_key BLOB NOT NULL,
|
||||
created_at TEXT NOT NULL,
|
||||
UNIQUE(code)
|
||||
);
|
||||
|
||||
CREATE INDEX idx_badge_code_redemptions_user ON badge_code_redemptions(user_id);
|
||||
|
||||
ALTER TABLE badge_purchases ADD COLUMN badge_code_redemption_id INTEGER REFERENCES badge_code_redemptions;
|
||||
|
||||
CREATE UNIQUE INDEX idx_badge_purchases_code_redemption ON badge_purchases(badge_code_redemption_id);
|
||||
|]
|
||||
|
||||
down_m20261001_user_badges :: Query
|
||||
down_m20261001_user_badges =
|
||||
[sql|
|
||||
DROP INDEX idx_badge_purchases_code_redemption;
|
||||
DROP INDEX idx_badge_purchases_user;
|
||||
ALTER TABLE users DROP COLUMN shown_badge_id;
|
||||
|]
|
||||
<> badgeSchemaDown ""
|
||||
<> [sql|
|
||||
DROP INDEX idx_badge_code_redemptions_user;
|
||||
DROP TABLE badge_code_redemptions;
|
||||
|]
|
||||
|
||||
Reference in New Issue
Block a user