using System; using System.Collections.Generic; using System.Text; using BTCPayServer.Client.Models; using Microsoft.EntityFrameworkCore; using Microsoft.EntityFrameworkCore.Infrastructure; using Microsoft.EntityFrameworkCore.Storage.ValueConversion; namespace BTCPayServer.Data { public class StoreData { public string Id { get; set; } public List UserStores { get; set; } public List Apps { get; set; } public List PaymentRequests { get; set; } public List PullPayments { get; set; } public List Invoices { get; set; } [Obsolete("Use GetDerivationStrategies instead")] public string DerivationStrategy { get; set; } public string DerivationStrategies { get; set; } public string StoreName { get; set; } public SpeedPolicy SpeedPolicy { get; set; } = SpeedPolicy.MediumSpeed; public string StoreWebsite { get; set; } public byte[] StoreCertificate { get; set; } public string StoreBlob { get; set; } [Obsolete("Use GetDefaultPaymentId instead")] public string DefaultCrypto { get; set; } public List PairedSINs { get; set; } public IEnumerable APIKeys { get; set; } public IEnumerable LightningAddresses { get; set; } public IEnumerable PayoutProcessors { get; set; } public IEnumerable Payouts { get; set; } public IEnumerable CustodianAccounts { get; set; } public IEnumerable Settings { get; set; } public IEnumerable Forms { get; set; } public IEnumerable StoreRoles { get; set; } public bool Archived { get; set; } internal static void OnModelCreating(ModelBuilder builder, DatabaseFacade databaseFacade) { if (databaseFacade.IsNpgsql()) { builder.Entity() .Property(o => o.StoreBlob) .HasColumnType("JSONB"); builder.Entity() .Property(o => o.DerivationStrategies) .HasColumnType("JSONB"); } else if (databaseFacade.IsMySql()) { builder.Entity() .Property(o => o.StoreBlob) .HasConversion(new ValueConverter ( convertToProviderExpression: (str) => Encoding.UTF8.GetBytes(str), convertFromProviderExpression: (bytes) => Encoding.UTF8.GetString(bytes) )); } } } }