ウィッシュリストグループ管理
説明
ウィッシュリストグループ管理機能は、高度なサブスクリプション検証、クォータ強制、グループベースアクセス制御を備えた公式ウィッシュリストグループの包括的なCRUD操作を提供します。このシステムは本番ウィッシュリスト管理のコア基盤として機能し、適切なサブスクリプション課金統合と協力的なチームアクセスを確保します。
一時ウィッシュリスト管理とは異なり、この機能は厳格なサブスクリプションクォータを強制し、グループメンバーシップを検証し、完全な監査証跡を持つ永続的なレコードを維持します。システムはサブスクリプション課金サービスと統合して使用量を追跡し、サブスクリプション階層に基づく制限を強制します。
主要機能には以下が含まれます:
- サブスクリプション検証付きの公式ウィッシュリストグループの作成
- データ移行を伴う一時ウィッシュリストから公式ステータスへの変換
- グループベースアクセス制御と協力の管理
- サブスクリプションクォータと使用量追跡の強制
- ページネーションとフィルタリングを備えた包括的な一覧表示
- 監査証跡とステータス管理の維持
アクティビティ図
---
config:
theme: base
layout: dagre
flowchart:
curve: linear
htmlLabels: true
themeVariables:
edgeLabelBackground: "transparent"
---
flowchart TB
%% Main components
UserRequest[ユーザーリクエスト]
Database[(Database)]
StripeAPI((Stripe API))
subgraph Controllers
WishlistController[WishlistToGroupController]
end
subgraph Services
WishlistService(WishlistToGroupService)
SubscriptionService(SubscriptionService)
TempWishlistService(TempWishlistService)
end
subgraph Middleware
AuthMiddleware{AuthMiddleware}
GroupMiddleware{GroupMiddleware}
end
UserRequest --- Step1[
<div style='text-align: center'>
<span style='display: inline-block; background-color: #6699cc !important; color:white; width: 28px; height: 28px; line-height: 28px; border-radius: 50%; font-weight: bold'>1</span>
<p style='margin-top: 8px'>認証・認可</p>
</div>
]
Step1 --> AuthMiddleware
Step1 --> GroupMiddleware
AuthMiddleware --- Step2[
<div style='text-align: center'>
<span style='display: inline-block; background-color: #6699cc !important; color:white; width: 28px; height: 28px; line-height: 28px; border-radius: 50%; font-weight: bold'>2</span>
<p style='margin-top: 8px'>サブスクリプション検証・クォータチェック</p>
</div>
]
Step2 --> WishlistController
WishlistController --> SubscriptionService
SubscriptionService -.-> StripeAPI
SubscriptionService --- Step3[
<div style='text-align: center'>
<span style='display: inline-block; background-color: #6699cc !important; color:white; width: 28px; height: 28px; line-height: 28px; border-radius: 50%; font-weight: bold'>3</span>
<p style='margin-top: 8px'>データ処理・検証</p>
</div>
]
Step3 --> WishlistService
WishlistService -.-> TempWishlistService
WishlistService --- Step4[
<div style='text-align: center'>
<span style='display: inline-block; background-color: #6699cc !important; color:white; width: 28px; height: 28px; line-height: 28px; border-radius: 50%; font-weight: bold'>4</span>
<p style='margin-top: 8px'>データベース操作・レスポンス</p>
</div>
]
Step4 --> Database
%% Styling
style UserRequest fill:#e6f3ff,stroke:#0066cc,stroke-width:2px
style Database fill:#ffe6cc,stroke:#ff9900,stroke-width:2px
style StripeAPI fill:#fcd9d9,stroke:#cc3333,stroke-width:2px
style Controllers fill:#e6f3ff
style Services fill:#f0f8e6
style Middleware fill:#f5f0ff
style Step1 fill:transparent,stroke:transparent,stroke-width:1px
style Step2 fill:transparent,stroke:transparent,stroke-width:1px
style Step3 fill:transparent,stroke:transparent,stroke-width:1px
style Step4 fill:transparent,stroke:transparent,stroke-width:1px
詳細データフロー依存関係
ステップバイステッププロセス
ステップ1: 認証・認可
- 説明: ウィッシュリスト操作のためのユーザー認証とグループメンバーシップを検証
- アクション: ユーザーセッション認証、グループメンバーシップ検証、アクセス権限チェック
- 入力: ユーザー認証情報、グループメンバーシップデータ、要求された操作タイプ
- 出力: グループアクセス検証付きの認証されたユーザーコンテキスト
- 依存関係: ユーザー認証サービス、グループメンバーシップ検証
- 外部サービス: 認証プロバイダー、グループ管理サービス
ステップ2: サブスクリプション検証・クォータ強制
- 説明: サブスクリプションステータスを検証し、ウィッシュリスト作成のクォータ制限を強制
- アクション: サブスクリプション有効性チェック、現在の使用量計算、クォータ制限検証
- 入力: サブスクリプション詳細、現在の使用量データ、要求されたリソース数
- 出力: クォータ可用性付きのサブスクリプション検証結果
- 依存関係: サブスクリプションサービス、クォータ計算サービス
- 外部サービス: サブスクリプション課金システム、使用量追跡サービス
ステップ3: データ処理・検証
- 説明: 一時変換または手動入力からのウィッシュリストデータを処理・検証
- アクション: データ構造検証、一時データ変換、手動入力処理、データ整合性チェック
- 入力: 一時ウィッシュリストデータまたは手動入力、検証ルール、データ制約
- 出力: 作成準備完了の検証・構造化されたウィッシュリストデータ
- 依存関係: データ検証サービス、一時ウィッシュリストサービス、サマリーテーブルサービス
- 外部サービス: データ検証API、商品検証サービス
ステップ4: ウィッシュリスト作成・データベース操作
- 説明: トランザクション安全性と関係管理を備えた公式ウィッシュリストを作成
- アクション: ウィッシュリストレコード作成、関係確立、サマリーテーブル更新、スケジュール管理
- 入力: 検証されたウィッシュリストデータ、グループコンテキスト、サブスクリプションバインディング
- 出力: すべての関係とメタデータを持つ作成されたウィッシュリスト
- 依存関係: データベーストランザクションサービス、関係管理、スケジュールサービス
- 外部サービス: データベースクラスター、バックアップサービス、監査ログ
データベース関連テーブル・フィールド
データベース: gb_console
erDiagram
wishlist_to_groups {
bigint id PK
bigint group_id FK
bigint created_by FK
bigint subscription_id FK
string name "ウィッシュリストの名前"
string slug "ウィッシュリストのスラッグ"
integer status "0: 非アクティブ, 1: アクティブ, 3: キャンセル"
}
groups {
bigint id PK
string name
}
users {
bigint id PK
string name
}
subscriptions {
bigint id PK
string name
}
wishlist_to_groups }|--|| groups : "所属"
wishlist_to_groups }|--|| users : "作成者"
wishlist_to_groups }|--|| subscriptions : "所属"
ケースドキュメント
ケース1: ウィッシュリストグループ一覧
API: ウィッシュリストグループ一覧
シーケンス図
sequenceDiagram
participant Client
participant Controller as WishlistToGroupController
participant Service as WishlistToGroupService
participant Repository as WishlistToGroupRepository
participant Database
Note over Client,Database: ウィッシュリストグループ一覧フロー
rect rgb(255, 255, 200)
Note right of Client: 認証フェーズ
Client->>Controller: GET /api/v1/wishlist-to-group
Controller->>Controller: ユーザー認証
Controller->>Controller: グループメンバーシップ検証
end
rect rgb(200, 230, 255)
Note right of Controller: 検証フェーズ
Controller->>Service: list(params)
Service->>Service: クエリパラメータ検証
Service->>Service: デフォルトフィルタ適用
end
rect rgb(200, 255, 255)
Note right of Service: ビジネスロジックフェーズ
Service->>Repository: findWhere(conditions)
Service->>Service: グループフィルタ適用
Service->>Service: ステータスフィルタ適用
Service->>Service: ページネーション適用
end
rect rgb(230, 200, 255)
Note right of Repository: データベースフェーズ
Repository->>Database: JOINを含むSELECT
Database-->>Repository: ウィッシュリストレコード
Repository-->>Service: ページネーションコレクション
end
rect rgb(200, 255, 200)
Note right of Service: 成功レスポンス
Service-->>Controller: LengthAwarePaginator
Controller->>Controller: リソースに変換
Controller-->>Client: ページネーション付きJSONレスポンス
end
ステップ
- 認証: ユーザーセッションとグループメンバーシップを検証
- パラメータ検証: クエリパラメータ(page, per_page, status)を検証
- フィルタ適用: グループベースフィルタリングとステータスフィルタリングを適用
- データベースクエリ: 適切なJOINを含むページネーションクエリを実行
- レスポンスフォーマット: ページネーションメタデータ付きのAPIリソースに結果を変換
エラーハンドリング
- 401 Unauthorized: 無効または欠落した認証
- 403 Forbidden: ユーザーがどのグループのメンバーでもない
- 400 Bad Request: 無効なクエリパラメータ
- 500 Internal Server Error: データベースまたはシステムエラー
ケース2: ウィッシュリストグループ作成
API: ウィッシュリストグループ作成
シーケンス図
sequenceDiagram
participant Client
participant Controller as WishlistToGroupController
participant Service as WishlistToGroupService
participant SubService as SubscriptionService
participant TempService as TempWishlistService
participant Repository as WishlistToGroupRepository
participant Database
Note over Client,Database: ウィッシュリストグループ作成フロー
rect rgb(255, 255, 200)
Note right of Client: 認証フェーズ
Client->>Controller: POST /api/v1/wishlist-to-group
Controller->>Controller: ユーザー認証
Controller->>Controller: グループメンバーシップ検証
end
rect rgb(200, 230, 255)
Note right of Controller: 検証フェーズ
Controller->>Controller: リクエストデータ検証
Controller->>Service: create(validatedData)
Service->>Service: リクエストからデータ準備
end
rect rgb(255, 230, 200)
Note right of Service: サブスクリプション検証
Service->>SubService: validateSubscription(group)
SubService->>SubService: サブスクリプションステータスチェック
SubService->>SubService: クォータ制限チェック
SubService-->>Service: 検証結果
end
rect rgb(200, 255, 255)
Note right of Service: データ処理
alt 一時ウィッシュリスト変換
Service->>TempService: loadTempWishlist(id)
TempService-->>Service: 一時ウィッシュリストデータ
Service->>Service: convertTempToOfficial(data)
else 手動作成
Service->>Service: processManualData(data)
end
end
rect rgb(230, 200, 255)
Note right of Service: データベーストランザクション
Service->>Repository: beginTransaction()
Service->>Repository: create(wishlistData)
Repository->>Database: INSERT wishlist_to_groups
Service->>Service: createRelatedData(products, categories, queries)
Service->>SubService: updateUsageQuota(subscription)
Service->>Repository: commit()
end
rect rgb(200, 255, 200)
Note right of Repository: 成功レスポンス
Repository-->>Service: 作成されたウィッシュリスト
Service-->>Controller: 成功結果
Controller->>Controller: リソースに変換
Controller-->>Client: 作成データ付きJSONレスポンス
end
rect rgb(255, 200, 200)
Note right of Service: エラーハンドリング
alt サブスクリプションエラー
SubService-->>Service: サブスクリプション無効
Service-->>Controller: サブスクリプションエラー
else クォータ超過
SubService-->>Service: クォータ超過
Service-->>Controller: クォータエラー
else データベースエラー
Repository-->>Service: データベースエラー
Service->>Repository: rollback()
Service-->>Controller: 作成エラー
end
Controller-->>Client: エラーレスポンス
end
ステップ
- 認証・認可: ユーザーとグループメンバーシップを検証
- リクエスト検証: 入力データ構造と制約を検証
- サブスクリプション検証: サブスクリプションステータスとクォータ制限をチェック
- データ準備: 一時変換または手動入力データを処理
- クォータ計算: リソース使用量を計算し制限に対して検証
- データベーストランザクション: トランザクション安全性でウィッシュリストと関連データを作成
- 使用量更新: サブスクリプション使用量カウンターを更新
- レスポンス生成: 適切なフォーマットで作成されたウィッシュリストを返却
エラーハンドリング
- 401 Unauthorized: 無効な認証
- 403 Forbidden: グループアクセス拒否
- 400 Bad Request: 無効な入力データまたは検証エラー
- 402 Payment Required: サブスクリプション期限切れまたは無効
- 409 Conflict: クォータ超過またはリソース制限
- 500 Internal Server Error: データベースまたはシステムエラー
ケース3: ウィッシュリストグループ表示
API: ウィッシュリストグループ表示
シーケンス図
sequenceDiagram
participant Client
participant Controller as WishlistToGroupController
participant Repository as WishlistToGroupRepository
participant Database
Note over Client,Database: ウィッシュリストグループ表示フロー
rect rgb(255, 255, 200)
Note right of Client: 認証フェーズ
Client->>Controller: GET /api/v1/wishlist-to-group/{slug}
Controller->>Controller: ユーザー認証
Controller->>Controller: グループメンバーシップ検証
end
rect rgb(200, 230, 255)
Note right of Controller: 検証フェーズ
Controller->>Repository: findBySlug(slug)
Repository->>Database: スラッグでSELECT
Database-->>Repository: ウィッシュリストレコード
Repository-->>Controller: ウィッシュリストまたはnull
end
rect rgb(200, 255, 255)
Note right of Controller: 認可チェック
alt ウィッシュリスト見つかった
Controller->>Controller: グループアクセスチェック
alt アクセス許可
Controller->>Controller: 関連データ読み込み
else アクセス拒否
Controller-->>Client: 404 Not Found
end
else ウィッシュリスト見つからない
Controller-->>Client: 404 Not Found
end
end
rect rgb(200, 255, 200)
Note right of Controller: 成功レスポンス
Controller->>Controller: リソースに変換
Controller-->>Client: ウィッシュリストデータ付きJSONレスポンス
end
ステップ
- 認証: ユーザーセッションを検証
- ウィッシュリスト検索: スラッグでウィッシュリストを検索
- 認可: ユーザーがウィッシュリストのグループにアクセス権を持つことを確認
- データ読み込み: 関連データと関係を読み込み
- レスポンスフォーマット: APIリソース形式に変換
エラーハンドリング
- 401 Unauthorized: 無効な認証
- 404 Not Found: ウィッシュリストが見つからないまたはアクセス拒否
- 500 Internal Server Error: データベースまたはシステムエラー