Release Notes: v0.1.9

← バージョン一覧に戻る

v0.1.9 Release Notes

リリース日: 2025年10月22日

🚀 新機能

📧 在庫数アラート機能

在庫が閾値を下回った際に、管理者と組織担当者へ自動的にメール通知を送信する機能を追加しました。

主な機能:

  • 閾値設定: 在庫反映ページで組織ごとにアラート閾値を設定可能
  • 自動メール送信: 反映後の最小在庫が閾値を下回った場合、自動的にメールキューに追加
  • メール送信対象: 対象組織に所属する組織管理者および代理店担当者
  • テンプレートベース: メールテンプレート管理画面で内容をカスタマイズ可能
  • バックグラウンド処理: メール送信は非同期処理で実行され、パフォーマンスに影響を与えません

使用方法:

  1. 在庫反映ページ(/admin/catch-shipping/{id}/reflect)にアクセス
  2. 「在庫数減少アラート」パネルで閾値を入力
  3. 通常通り在庫を反映
  4. 反映後の最小在庫が閾値を下回った場合、自動的にアラートメールが送信される

技術仕様:

  • 新規データベースフィールド:
    • CatchShippingEmailQueue.AlertThreshold - メール送信時に使用された閾値
    • CatchShippingEmailQueue.CurrentStock - メール送信時の在庫数
  • メールテンプレート変数:
    • {{.OrganizationName}} - 組織名
    • {{.MaterialName}} - CATCH回次名
    • {{.Threshold}} - 設定された閾値
    • {{.CurrentStock}} - 現在の在庫状況(改行区切り)
    • {{.MagicLink}} - 納品連絡フォームへのリンク
    • {{.ExpiryMinutes}} - リンクの有効期限

📊 反映後在庫数の表示

在庫反映画面で、反映実行前に「反映後の最小在庫数」を確認できるようになりました。

主な機能:

  • リアルタイム計算: CATCH/学校入力時に自動的に反映後の在庫を計算
  • 視覚的な表示: 現在の最小在庫と反映後の最小在庫を並べて表示
  • わかりやすいラベル: 「反映後」のバッジで視覚的に区別
  • 動的更新: 入力値が変更されるたびに自動更新

表示例:

最小在庫数
現在 500
反映後 400 [現在の値から100減少]

効果:

  • 在庫切れリスクの事前確認
  • 閾値設定の参考情報として活用
  • 反映による影響の把握

📬 メールキュー管理機能の強化

メールプレビュー機能

メールキュー管理ページから、送信予定のメールをプレビューできるようになりました。

主な機能:

  • プレビューボタン: 各メールキューにプレビューボタンを追加
  • モーダル表示: 送信元、送信先、件名、本文をモーダルで表示
  • 実際の値を使用: キューに保存された閾値と在庫数で実際に送信される内容を表示
  • HTML/テキスト対応: メール形式に応じて適切に表示

使用方法:

  1. メールキュー管理ページ(/admin/email-queues)にアクセス
  2. プレビューしたいメールの「プレビュー」ボタンをクリック
  3. モーダルでメール内容を確認
  4. モーダルを閉じて元の画面に戻る

技術仕様:

  • 新規APIエンドポイント: GET /api/admin/email-templates
  • 既存APIの拡張: /api/admin/email-templates/previewalertThresholdcurrentStock パラメータを追加
  • プレビュー用のモーダルUI実装

ナビゲーション改善

  • 戻るボタン追加: ブラウザの履歴を使った直感的なナビゲーション(history.back()
  • メールキュー管理リンク: 在庫反映ページから直接メールキュー管理にアクセス可能

🔧 改善

🎨 UI/UX改善

在庫反映ページ

  • 在庫数減少アラートパネル: 閾値入力フィールドとメールキュー管理へのリンクボタンを追加
  • 反映後在庫表示: 最小在庫数セクションに反映後の予測値を追加
  • レイアウト改善: アラート設定エリアのスタイリング強化

メールキュー管理ページ

  • プレビュー列: 新しい列を追加してプレビューボタンを配置
  • 戻るボタン: ページ上部に戻るボタンを追加
  • モーダルデザイン: プレビュー用のモーダルUIを実装

トランザクションセット管理ページ

  • 戻るボタン: 「ダッシュボードに戻る」リンクを「戻る」ボタンに変更

🗄️ データモデル改善

  • CatchShippingEmailQueueAlertThresholdCurrentStock フィールドを追加
  • EmailTemplate にJSON tagを追加(type, subject, body

🔍 ログ改善

  • アラートメール送信時に閾値と在庫数をログに記録
  • メール送信対象者の詳細をログに記録

🐛 バグ修正

メールテンプレート変数の修正

在庫アラートメールで {{.Threshold}} が常に0で表示される問題を修正しました。

修正内容:

  • 変更前: CatchShippingTitle.WarningThreshold(常に0)を使用
  • 変更後: CatchShippingEmailQueue.AlertThreshold(反映時に設定された実際の値)を使用

根本原因:

  • 閾値がメールキューに保存されていなかった
  • 共有フィールド(CatchShippingTitle.WarningThreshold)を使おうとしていた

修正方法:

  • メールキュー作成時に閾値と在庫数を保存
  • メール送信時にキューから値を取得

JSONマーシャリングの修正

EmailTemplate のフィールドがJSONで正しく出力されない問題を修正しました。

修正内容:

  • JSON tagの追加により、フィールド名が小文字で出力されるように修正
  • JavaScriptでの template.type, template.subject, template.body アクセスが正常に動作

🔧 技術的改善

バックエンド

新規APIエンドポイント

  • GET /api/admin/email-templates - 全メールテンプレート取得
  • 既存APIの拡張: /api/admin/email-templates/preview に新パラメータ追加

データベーススキーマ変更

-- CatchShippingEmailQueue テーブルに以下のカラムを追加
ALTER TABLE catch_shipping_email_queues
ADD COLUMN alert_threshold INTEGER NOT NULL DEFAULT 0;

ALTER TABLE catch_shipping_email_queues
ADD COLUMN current_stock INTEGER NOT NULL DEFAULT 0;

※ GORM AutoMigrateにより自動的に適用されます

アラートメール送信フロー

  1. ExecuteCatchShippingReflection で反映を実行
  2. 反映後の最小在庫を計算
  3. 閾値が設定されており、最小在庫が閾値未満の場合:
    • 対象組織に所属する組織管理者および代理店担当者のメールアドレスを取得
    • 各メールアドレスに対してキューを作成
  4. バックグラウンド処理でメールを送信

フロントエンド

Alpine.js ロジック

  • 反映後在庫の動的計算機能
  • 入力値変更時のリアルタイム更新
  • 条件付きレンダリング

モーダル管理

  • プレビューモーダルの実装
  • Promise チェーンによるAPI呼び出し
  • エラーハンドリングと表示

スタイリング

  • アラートパネルのレイアウト
  • 反映後在庫表示のバッジとスタイル
  • プレビューモーダルのデザイン

パフォーマンス

バックグラウンド処理

  • メール送信の非同期処理
  • メールキューによる段階的な送信
  • 反映処理のパフォーマンス維持

フロントエンド最適化

  • 動的計算の効率化
  • 不要な再レンダリングの防止

📝 使用上の注意

在庫数アラート機能

  • 閾値設定: 0を設定すると、アラートは送信されません
  • メール送信タイミング: 反映実行直後にキューに追加され、バックグラウンドで送信
  • 送信対象: 対象組織に所属する組織管理者および代理店担当者に送信されます
  • 重複送信: 対象組織に複数のユーザーが所属している場合、それぞれにメールが送信されます
  • 閾値の保存: 閾値は CatchShippingTitle ではなく、各メールキューに保存されます

メールプレビュー機能

  • プレビューは実際のメールテンプレートを使用します
  • プレビュー表示時に実際のメールは送信されません
  • キューに保存された閾値と在庫数が使用されます

データの整合性

  • 閾値と在庫数はメールキュー作成時にスナップショットとして保存されます
  • 後から在庫が変更されても、既存のキューの値は更新されません

🔄 移行ガイド

データベース変更

このバージョンではデータベーススキーマの変更があります。

自動マイグレーション:

  • GORM AutoMigrateが自動的にカラムを追加します
  • アプリケーション起動時に自動的に実行されます
  • 既存データに影響はありません

手動マイグレーション: 必要に応じて以下のSQLを実行できます:

ALTER TABLE catch_shipping_email_queues
ADD COLUMN alert_threshold INTEGER NOT NULL DEFAULT 0;

ALTER TABLE catch_shipping_email_queues
ADD COLUMN current_stock INTEGER NOT NULL DEFAULT 0;

API変更

既存のAPIとの互換性は維持されています。新しいエンドポイントと拡張パラメータが追加されましたが、既存の機能には影響しません。

フロントエンド変更

  • ブラウザキャッシュをクリアして最新のJavaScriptとCSSを読み込んでください
  • 既存の機能に影響はありません

推奨事項

  • アラート機能をテスト環境で動作確認してください
  • メールテンプレートの内容を確認し、必要に応じてカスタマイズしてください
  • 閾値の適切な値を組織ごとに検討してください

📄 変更ファイル

バックエンド

  • cmd/server/main.go - 新規APIルート追加
  • internal/handlers/admin.go - アラートメール送信ロジック追加
  • internal/handlers/email_template.go - テンプレートAPI追加、プレビュー機能拡張
  • internal/models/material.go - CatchShippingEmailQueue スキーマ拡張
  • internal/models/email_template.go - JSON tag追加

フロントエンドテンプレート

  • web/templates/admin_catch_shipping_reflect.gohtml - アラート設定UI、反映後在庫表示
  • web/templates/admin_email_queues.gohtml - プレビュー機能、戻るボタン
  • web/templates/admin_transaction_sets.gohtml - 戻るボタン

ドキュメント

  • docs/release-notes/v0.1.9.md (このファイル)

🎯 対象ユーザー

  • システム管理者: アラート機能で在庫不足を早期に検知し、迅速な対応が可能。プレビュー機能でメール内容を事前確認可能
  • 代理店担当者: 在庫アラートを受け取り、発送手配を実施
  • 組織管理者: 在庫状況を把握し、必要に応じて納品連絡を実施

🔗 関連プルリクエスト

  • #45 - feat: inventory alert system and email queue preview

互換性: v0.1.8からの移行において、データベーススキーマの変更があります(自動マイグレーション対応)。既存のAPIとの互換性は維持されており、新機能はすべて追加機能として実装されています。既存の機能に影響を与えることなく、新機能を利用できます。