Database contexts
ChargeworxDbContext (Main database)
Primary application database containing:- Companies and projects: Company, CompanyProject, CompanyUser, CompanyProjectUser
- Users and authentication: User, UserInvitation, WhitelistIp
- Transactions: Transaction, TransactionItem, TransactionTag, TransactionTagValue
- Payment processors: ProjectPaymentProcessor, ProjectPaymentProcessorSetting, PaymentProcessorResultCode
- IdentityServer: IdentityServerClient, DataProtectionKeys
- Background processes: BackgroundProcess
- Import batches: ImportBatch, TransferredTransaction
- Chargebacks: ChargebackDetail, PurchaseRefund
- Credit card batches: CreditCardBatch, CreditCardUpdaterStatus
- Transaction events: TransactionCreditCardEvent, TransactionPayflowEvent, TransactionCreditCardEventRawCybResponse
- Response codes: AvsResponse, CvvResponse
ChargeworxConnection
ChargeworxCreditCardDbContext (Credit card database)
Secure storage for sensitive payment information:- Credit cards: CreditCard, CreditCardNumber
- Payment info: CompanyProjectCreditCardPaymentInfo
- Billing agreements: CompanyProjectBillingAgreement
- Addresses: Person, Address, PersonAddress
- Account updater: CreditCardUpdaterHistory
ChargeworxCreditCardConnection
ChargeworxKeyDbContext (Key database)
Isolated storage for encryption keys and sensitive settings:- Keys: Key (RSA keys for encryption)
- Project keys: CompanyProjectKey
- Settings metadata: SettingMetaData
ChargeworxKeyConnection
ChargeworxReportDbContext (Report database)
Optimized for reporting and analytics:- Report transactions: ReportTransaction, ReportBaseTransaction, ReportNewestTransaction
- Transaction tags: ReportBaseTransactionTagValue
- Account updater history: AccountUpdaterHistoryRecord
ChargeworxReportConnection
Data access pattern
Store pattern
Each entity has a corresponding store that encapsulates data access:Stored procedures
Complex queries use stored procedures for performance:CompanyGetEntries: Paginated company listing with filtersTransactionGetDetails: Transaction details with related entitiesCreditCardUpdaterGetReport: Account updater report generationReportTransactionCreateEntries: Bulk insert for reporting
Chargeworx.Api.Data/Procedures and executed via EF Core.
Migrations
Each database has its own migration history:Chargeworx.Api.Data/Migrations/ChargeworxDbChargeworx.Api.Data/Migrations/ChargeworxCreditCardDbChargeworx.Api.Data/Migrations/ChargeworxKeyDbChargeworx.Api.Data/Migrations/ChargeworxReportDb
Security considerations
- Credit card database: Contains PCI-sensitive data, encrypted at rest
- Key database: Isolated storage for RSA keys, restricted access
- Main database: Contains business logic data, no raw credit card numbers
- Report database: Denormalized data for analytics, no sensitive payment info
