-
Notifications
You must be signed in to change notification settings - Fork 1
シフト通知機能の本番移行と通知のグループ化 #246
Copy link
Copy link
Labels
Size-L開発時間の目安は20時間開発時間の目安は20時間✨Backendバックエンドのタスク. 主にGo, TypeScriptを使用バックエンドのタスク. 主にGo, TypeScriptを使用✨Databaseデータベースのタスク. 主にPostgreSQLを使用データベースのタスク. 主にPostgreSQLを使用優先度0Must, Minimum・最低限実装しないといけない枠Must, Minimum・最低限実装しないといけない枠
Metadata
Metadata
Assignees
Labels
Size-L開発時間の目安は20時間開発時間の目安は20時間✨Backendバックエンドのタスク. 主にGo, TypeScriptを使用バックエンドのタスク. 主にGo, TypeScriptを使用✨Databaseデータベースのタスク. 主にPostgreSQLを使用データベースのタスク. 主にPostgreSQLを使用優先度0Must, Minimum・最低限実装しないといけない枠Must, Minimum・最低限実装しないといけない枠
開発概要
目的
/workspace/seeft-slack-notification_mock)のシフト通知機能を本番リポジトリ(/workspace/SeeFT)へ移植する変更前: undefinedバグを修正する開発期間
考えられる開発内容
Phase 1: 基盤整備
データベーススキーマの追加
mysql/db/create_action_log.sqlを作成(action_logテーブル定義)mysql/db/add_slack_user_id_to_users.sqlを作成(usersテーブルにslack_user_idカラム追加)ALTER TABLE users ADD COLUMN slack_user_id VARCHAR(255)api/lib/entity/action_log.goを作成(ActionLogエンティティ定義)api/lib/entity/user.goを更新(SlackUserIDフィールド追加)リポジトリ層の実装
api/lib/internals/repository/action_log_repository.goを作成Create(ctx, shiftID, userID, dateID, actionType, diffPayload) errorメソッド実装GetUnsentLogs(ctx) (*sql.Rows, error)メソッド実装(未送信ログ取得)GetUnsentLogsByUserAndDate(ctx, userID, dateID) (*sql.Rows, error)メソッド実装(グルーピング用)MarkAsSent(ctx, logIDs []int) errorメソッド実装(送信済みフラグ更新)Phase 2: 通知機能の移植
Slack通知サービスの実装
api/lib/externals/slack/slack_service.goを作成SLACK_BOT_TOKEN,SLACK_CHANNEL_ID)/workspace/seeft_slackNotification_mock/backend/internal/service/slack_service.goShiftUseCaseへの統合
api/lib/usecase/shift_usecase.goのUpdateShiftsFromGASメソッドを更新action_logへ記録する処理を追加oldValがnilの場合のハンドリング(CREATE時)newValがnilの場合のハンドリング(DELETE時)undefinedバグの修正(nilチェック追加)/workspace/seeft_slackNotification_mock/backend/internal/service/shift_service.goのlogActionメソッドPhase 3: グルーピングロジック実装(最重要)
NotificationUseCaseの実装
api/lib/usecase/notification_usecase.goを作成ProcessUnsentNotifications(ctx) errorメソッド実装(未送信通知を処理)GroupNotificationsByUserAndDate(logs []ActionLog) map[string][]ActionLogメソッド実装(ユーザー・日付でグルーピング)CalculateTimeRange(timeIDs []int) (startTime, endTime string)メソッド実装(連続時間を計算)BuildGroupedMessage(group []ActionLog) stringメソッド実装(グルーピング済みメッセージ生成)Phase 4: バッチ処理実装
通知ワーカーの実装
api/lib/usecase/notification_worker.goを作成(オプション、またはNotificationUseCaseに統合)NotificationUseCase.ProcessUnsentNotifications()を呼び出しapi/main.goを更新DI(依存性注入)の更新
api/lib/di/di.goを更新ActionLogRepositoryの初期化を追加SlackServiceの初期化を追加NotificationUseCaseの初期化を追加(必要な依存関係を注入)環境変数の追加
api/env/dev.envを更新SLACK_BOT_TOKEN=xoxb-...を追加SLACK_CHANNEL_ID=C1234567890を追加備考
参考
データフロー
ディレクトリ構造
参考ファイル
/workspace/seeft_slackNotification_mock/backend/internal/service/slack_service.go/workspace/seeft_slackNotification_mock/backend/internal/service/shift_service.go/workspace/seeft_slackNotification_mock/backend/internal/repository/action_log_repository.go/workspace/SeeFT/api/lib/usecase/shift_usecase.go(1360行目〜)/workspace/SeeFT/api/lib/internals/repository/shift_repository.go開発の流れ
SeeFTのタスク管理のルール
リンク