ユーザー削除
メソッド
REST メソッドを採用しています。
HTTP メソッド
DELETE: ユーザーのソフトデリート
命名規則
クエリパラメータとノードの命名を統一し、可読性を向上させるため、リクエスト時の URI と JSON 内のノードには snake_case を使用します。
リクエストとレスポンス
ヘッダー
メタ情報はレスポンスボディではなく、HTTP ヘッダーに設定されます。
リクエストヘッダー
Authorization:Bearer <access_token>Content-Type:application/json
レスポンスヘッダー
Content-Type:application/json
ユーザー削除
URI
パスパラメータの型は integer です。
レスポンス(200 OK)
レスポンスは JSON です。ユーザーレコードはソフトデリートされ(deletedAt が設定されます)。
{
"id": 1,
"cognitoSub": "1111-aaaa-2222-bbbb",
"organizationId": 1,
"name": "John Doe",
"createdAt": 1640995200000,
"updatedAt": 1640995200000,
"createdBy": "1111-aaaa-2222-bbbb",
"updatedBy": "1111-aaaa-2222-bbbb",
"deletedAt": 1640995200000,
"deletedBy": "1111-aaaa-2222-bbbb"
}
認証要件
Amazon Cognito が発行する JSON Web Token(JWT)を用いた認証です。Authorization ヘッダーに有効な Bearer トークンが必要です。
例外処理
例外時のステータスコードは次のとおりです。
| 説明 | ステータスコード | ステータス名 |
|---|---|---|
| トークンが欠落または無効 | 401 | Unauthorized |
| ユーザーが見つからない | 404 | Not Found |
| サーバ内部エラー | 500 | Internal Server Error |
処理フロー
シーケンス図
sequenceDiagram
participant Client
participant Middleware as Protected Route Middleware
participant API as Hono Router
participant Service as User Service
participant Cognito as App Cognito Pool
participant DB as PostgreSQL Database
Client->>Middleware: DELETE /api/v1/users/{user_id}
Middleware->>Middleware: Verify JWT & session
alt Token Valid
Middleware-->>API: Auth info (sub)
API->>Service: remove(id, actorSub)
Service->>DB: findOneByIdOnly(id)
DB-->>Service: User record
alt User Found
Service->>Cognito: resolveUsernameBySub(cognitoSub)
alt Cognito User Exists
Cognito-->>Service: username
Service->>Cognito: adminDeleteUser(username)
Cognito-->>Service: Deleted
else No Cognito User
Service->>Service: Log warning (DB-only delete)
end
Service->>DB: softDelete(id, actorSub)
DB-->>Service: Soft-deleted user
Service-->>API: User with deletedAt
API-->>Client: 200 OK
else User Not Found
Service-->>API: throw NotFoundError
API-->>Client: 404 Not Found
end
else Token Invalid
Middleware-->>Client: 401 Unauthorized
end
Routes 層
ルーティングはここで行います。protectedRoute ミドルウェアが JWT を検証します。ハンドラは user_id パスパラメータと操作者の Cognito sub を取り出し、ユーザーサービスに委譲します。
ソース: apps/admin/src/routes/v1/user.ts
Services 層
ビジネスロジックの説明です。ユーザーを検索し、対応する Cognito ユーザーをアプリプールから削除したうえで DB をソフトデリートします。Cognito ユーザーが見つからない場合は警告をログに出し、DB のソフトデリートのみ進めます。
ソース: apps/admin/src/services/user.ts
Repositories 層
データベースおよび外部サービスへのアクセスです。Cognito のユーザー名解決、ユーザー削除、DB のソフトデリートを扱います。
ソース: apps/admin/src/repositories/user.ts / apps/admin/src/repositories/cognito-pool.ts
セキュリティ
- ハンドラ実行前に
protectedRouteミドルウェアがトークンを検証します - DB のソフトデリートに加え Cognito ユーザーも削除します
- Cognito にユーザーがない場合も DB ソフトデリートは継続します(部分的不整合に耐性)
- 操作者の Cognito sub が監査用に
deletedByとして記録されます