Skip to content

feat(email): EMAIL-001 メールテンプレート管理機能の実装#34

Merged
f0reachARR merged 10 commits intomainfrom
feature/email
Apr 23, 2026
Merged

feat(email): EMAIL-001 メールテンプレート管理機能の実装#34
f0reachARR merged 10 commits intomainfrom
feature/email

Conversation

@f0reachARR
Copy link
Copy Markdown
Member

概要

Issue #33 (EMAIL-001) の実装。emailService.sendEmail にテンプレートベースの送信APIを追加し、招待メール4経路の呼び出し側を「テンプレートID + ペイロード」形式に統一しました。

Closes #33

変更点

新規追加

  • services/email/templates.ts: 4種の招待メールテンプレートを集約管理
    • organization-invitation
    • organization-member-invitation-link
    • university-owner-invitation-link
    • university-owner-invitation-id
  • services/email/templates.test.ts: テンプレート描画のユニットテスト (4件)
  • services/email/sendgrid.test.ts: SendGrid実装のユニットテスト (2件)

変更

  • services/email/interface.ts: EmailTemplateMap / SendEmailTemplateParams 型を追加。SendEmailParams を判別共用体に拡張
  • services/email/console.ts: resolveSendEmailParams を呼び出してテンプレートを解決してから送信
  • services/email/sendgrid.ts: 同上
  • auth.ts: 招待メール送信を organization-invitation テンプレートに置き換え
  • routes/university.ts: 大学代表者招待を university-owner-invitation-link テンプレートに置き換え
  • routes/admin/universities.ts: 大学代表者招待(ID形式)を university-owner-invitation-id テンプレートに置き換え
  • routes/admin/requests.ts: メンバー招待を organization-member-invitation-link テンプレートに置き換え
  • tests/app.issue11.integration.test.ts: テンプレート描画結果で検証するよう更新

テスト結果

Test Files 3 passed (3)
Tests 8 passed (8)
Duration 147ms

受け入れ条件チェック

  • 招待メール4経路でテンプレート利用に置き換わっている
  • テンプレート定義が1か所 (templates.ts) に集約されている
  • 差し込み変数不足は TypeScript の型で検出できる (SendEmailTemplateParams のペイロード型検査)
  • Console/SendGrid 実装どちらでも既存フローが壊れない
  • テンプレート描画のユニットテストがある
  • 既存の招待メール送信テストを描画結果で検証する形に更新
  • 承認フロー統合テストでメール送信の回帰なし

…ルテンプレートを集約管理 - interface.ts: EmailTemplateMap / SendEmailTemplateParams 型定義追加 - テンプレートID + ペイロードで送信指定できる型安全なAPIを追加 - SendEmailParams は既存の SendEmailContentParams との判別共用体 - console.ts / sendgrid.ts: resolveSendEmailParams でテンプレートを解決してから送信 - auth.ts, routes/university.ts, routes/admin/universities.ts, routes/admin/requests.ts: 招待メール送信箇所を template + payload 形式に置き換え - テスト: templates.test.ts / sendgrid.test.ts 追加、console.test.ts / app.issue11 更新
Copy link
Copy Markdown

@gemini-code-assist gemini-code-assist Bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Code Review

This pull request updates the GitHub agent configurations, refactors the backend email service to use a template-based system, and introduces a series filter to the admin editions page in the frontend. The email refactoring includes new template definitions, updated service interfaces, and comprehensive tests. Feedback is provided regarding a potential HTML injection vulnerability in the email template rendering and a suggestion to use the standard placeholder property for the frontend Select component to improve reliability and reduce redundancy.

Comment thread apps/backend/src/services/email/templates.ts
Comment thread apps/frontend/app/(admin)/admin/editions/page.tsx
@f0reachARR f0reachARR merged commit c010cd4 into main Apr 23, 2026
2 checks passed
@f0reachARR f0reachARR deleted the feature/email branch April 23, 2026 00:46
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

emailService.sendEmail のメールテンプレート設定を柔軟化する

1 participant