diff --git a/docs/UI.md b/docs/UI.md index 2348134..f0fc3bd 100644 --- a/docs/UI.md +++ b/docs/UI.md @@ -6,7 +6,7 @@ - Email 驗證 - 個人資料(基本資料、聯絡方式、公司資訊) - 收貨地址簿 -- 訂閱管理(清單與偏好) +- 訂閱管理(清單與退訂) - 退訂(單一清單) - 連結外站(可選:回到來源站點) @@ -24,7 +24,7 @@ - 登入 / 註冊 / 忘記密碼 / 修改密碼 - Email 驗證頁(可自建或導回會員中心) - 訂閱表單(未登入) -- 訂閱偏好管理(登入後) +- 外站自建訂閱偏好管理(登入後,走 API) - 退訂頁(從 email token 進來) ### 管理者端 @@ -49,7 +49,7 @@ - UC-05 Email 驗證: `/account/verifyemail?email=...&token=...` - UC-07 訂閱確認(double opt-in): `/newsletter/confirm?token=...` - UC-08 取消訂閱(單一清單): `/newsletter/unsubscribe?token=...` -- UC-09 訂閱偏好管理(登入後): `/newsletter/preferences?list_id=...&email=...` +- UC-09 訂閱偏好管理(外站整合 API): `/newsletter/preferences?list_id=...&email=...` - UC-10 會員資料查看 / 編輯: `/profile` - UC-10.1 收貨地址簿管理: `/profile/addresses` - UC-10.2 我的電子報訂閱: `/profile/subscriptions` diff --git a/docs/USE_CASES.md b/docs/USE_CASES.md index bc62f63..47fb05e 100644 --- a/docs/USE_CASES.md +++ b/docs/USE_CASES.md @@ -14,7 +14,7 @@ - UC-06 訂閱電子報(未登入) [API] - UC-07 訂閱確認(double opt-in) [UI] - UC-08 取消訂閱(單一清單) [UI] -- UC-09 訂閱偏好管理(登入後) [API/UI] +- UC-09 訂閱偏好管理(登入後) [API] - UC-10 會員資料查看(Email 為主) [API/UI] ## 管理者端 diff --git a/src/MemberCenter.Web/Controllers/NewsletterController.cs b/src/MemberCenter.Web/Controllers/NewsletterController.cs index 0db72e1..7570d7f 100644 --- a/src/MemberCenter.Web/Controllers/NewsletterController.cs +++ b/src/MemberCenter.Web/Controllers/NewsletterController.cs @@ -1,7 +1,6 @@ using MemberCenter.Application.Abstractions; using MemberCenter.Web.Models.Newsletter; using Microsoft.AspNetCore.Mvc; -using System.Text.Json; namespace MemberCenter.Web.Controllers; @@ -63,59 +62,4 @@ public class NewsletterController : Controller ViewData["Result"] = "Subscription canceled."; return View("UnsubscribeResult"); } - - [HttpGet] - public async Task Preferences([FromQuery(Name = "list_id")] Guid listId, [FromQuery] string email) - { - var subscription = await _newsletterService.GetPreferencesAsync(listId, email); - if (subscription is null) - { - ViewData["Result"] = "Subscription not found."; - return View("PreferencesResult"); - } - - return View(new PreferencesViewModel - { - ListId = listId, - Email = email, - PreferencesJson = subscription.Preferences.GetRawText() - }); - } - - [HttpPost] - public async Task Preferences(PreferencesViewModel model) - { - if (!ModelState.IsValid) - { - return View(model); - } - - Dictionary? preferences = null; - try - { - preferences = JsonSerializer.Deserialize>(model.PreferencesJson); - } - catch - { - ModelState.AddModelError(string.Empty, "Invalid JSON."); - return View(model); - } - - var existing = await _newsletterService.GetPreferencesAsync(model.ListId, model.Email); - if (existing is null) - { - ViewData["Result"] = "Subscription not found."; - return View("PreferencesResult"); - } - - var subscription = await _newsletterService.UpdatePreferencesAsync(model.ListId, model.Email, preferences ?? new Dictionary()); - if (subscription is null) - { - ViewData["Result"] = "Subscription not found."; - return View("PreferencesResult"); - } - - ViewData["Result"] = "Preferences updated."; - return View("PreferencesResult"); - } } diff --git a/src/MemberCenter.Web/Models/Newsletter/PreferencesViewModel.cs b/src/MemberCenter.Web/Models/Newsletter/PreferencesViewModel.cs deleted file mode 100644 index 1275916..0000000 --- a/src/MemberCenter.Web/Models/Newsletter/PreferencesViewModel.cs +++ /dev/null @@ -1,15 +0,0 @@ -using System.ComponentModel.DataAnnotations; - -namespace MemberCenter.Web.Models.Newsletter; - -public sealed class PreferencesViewModel -{ - [Required] - public Guid ListId { get; set; } - - [Required] - [EmailAddress] - public string Email { get; set; } = string.Empty; - - public string PreferencesJson { get; set; } = "{}"; -} diff --git a/src/MemberCenter.Web/Views/Home/Index.cshtml b/src/MemberCenter.Web/Views/Home/Index.cshtml index d52490f..31056f3 100644 --- a/src/MemberCenter.Web/Views/Home/Index.cshtml +++ b/src/MemberCenter.Web/Views/Home/Index.cshtml @@ -1,2 +1,2 @@

Member Center

-

Use this portal for account access and newsletter preferences.

+

Use this portal for account access, profile management, addresses, and subscriptions.

diff --git a/src/MemberCenter.Web/Views/Newsletter/Preferences.cshtml b/src/MemberCenter.Web/Views/Newsletter/Preferences.cshtml deleted file mode 100644 index 3946aa0..0000000 --- a/src/MemberCenter.Web/Views/Newsletter/Preferences.cshtml +++ /dev/null @@ -1,11 +0,0 @@ -@model MemberCenter.Web.Models.Newsletter.PreferencesViewModel - -

Preferences

-
- - - - - - -
diff --git a/src/MemberCenter.Web/Views/Newsletter/PreferencesResult.cshtml b/src/MemberCenter.Web/Views/Newsletter/PreferencesResult.cshtml deleted file mode 100644 index a6b49ce..0000000 --- a/src/MemberCenter.Web/Views/Newsletter/PreferencesResult.cshtml +++ /dev/null @@ -1,2 +0,0 @@ -

Preferences

-

@(ViewData["Result"] ?? "Done")

diff --git a/src/MemberCenter.Web/Views/Shared/_Layout.cshtml b/src/MemberCenter.Web/Views/Shared/_Layout.cshtml index 54d39c9..42d009b 100644 --- a/src/MemberCenter.Web/Views/Shared/_Layout.cshtml +++ b/src/MemberCenter.Web/Views/Shared/_Layout.cshtml @@ -38,7 +38,6 @@ Profile Addresses Subscriptions - Preferences @if (User.IsInRole("admin") || User.IsInRole("superuser"))