SaaSアプリケーション例
この例では、MBC CQRS Serverlessを使用したサブスクリプション管理、使用量追跡、課金連携を備えたマルチテナントSaaSアプリケーションを示します。
概要
SaaSの例では以下をカバーします:
- テナント階層によるマルチテナント分離
- サブスクリプションとプラン管理
- 使用量計測とクォータ強制
- 課金イベント生成
データモデル
キー構造
パーティションキー (pk) ソートキー (sk)
───────────────────────────────────────────── ─────
TENANT#acme-corp SUBSCRIPTION#SUB-001
TENANT#acme-corp USAGE#2024-01
TENANT#acme-corp USER#usr-001
TENANT#acme-corp APIKEY#key-001
MASTER#COMMON PLAN#starter
MASTER#COMMON PLAN#professional
MASTER#COMMON PLAN#enterprise
エンティティ定義
// Plan Entity (Master Data) (プランエンティティ(マスターデータ))
export interface PlanAttributes {
displayName: string;
monthlyPrice: number;
yearlyPrice: number;
currency: string;
features: PlanFeature[];
limits: PlanLimits;
isActive: boolean;
}
export interface PlanLimits {
maxUsers: number;
maxApiCalls: number;
maxStorageGb: number;
maxProjects: number;
}
// Subscription Entity (サブスクリプションエンティティ)
export interface SubscriptionAttributes {
planCode: string;
billingCycle: 'monthly' | 'yearly';
status: SubscriptionStatus;
startDate: string;
endDate: string;
autoRenew: boolean;
paymentMethodId?: string;
}
export type SubscriptionStatus =
| 'active'
| 'trial'
| 'past_due'
| 'cancelled'
| 'expired';
// Usage Entity (使用量エンティティ)
export interface UsageAttributes {
period: string; // YYYY-MM
apiCalls: number;
storageUsedGb: number;
activeUsers: number;
projectCount: number;
lastUpdatedAt: string;
}