Source PRD: docs/prds/team-coupon-redemption-notifications.md (no GitHub PRD issue exists for this one)
Note: This feature is already implemented (couponRedemptionNotifications table,
notificationService.ts coupon-redemption functions, teamService.getTeamAdmins,
redeemCoupon routed through enrollUser + multi-admin notify, /team unread badge
and per-row "New" indicator) despite its plan doc
(docs/plans/team-coupon-redemption-notifications.md) still saying
"Status: Proposed." teamService.test.ts (16), couponService.test.ts (16), and
notificationService.test.ts (24) all pass. This issue is for a fresh,
independent manual QA sign-off against the PRD's requirements — not
implementation tracking.
Instructor Notification Parity (PRD Functional #1)
Team Admin Notification Creation (PRD Functional #2, #7)
/team Unread Count (PRD Functional #3)
Per-Coupon "New" Indicator (PRD Functional #4)
Read State on Page Load (PRD Functional #5)
Access Control (PRD Functional #6)
Non-Functional
Open Questions needing retroactive confirmation (PRD Open Questions — flagged as needed before implementation, but implementation already shipped)
Source PRD: docs/prds/team-coupon-redemption-notifications.md (no GitHub PRD issue exists for this one)
Note: This feature is already implemented (couponRedemptionNotifications table,
notificationService.ts coupon-redemption functions, teamService.getTeamAdmins,
redeemCoupon routed through enrollUser + multi-admin notify, /team unread badge
and per-row "New" indicator) despite its plan doc
(docs/plans/team-coupon-redemption-notifications.md) still saying
"Status: Proposed." teamService.test.ts (16), couponService.test.ts (16), and
notificationService.test.ts (24) all pass. This issue is for a fresh,
independent manual QA sign-off against the PRD's requirements — not
implementation tracking.
Instructor Notification Parity (PRD Functional #1)
enrollUser)Team Admin Notification Creation (PRD Functional #2, #7)
/team Unread Count (PRD Functional #3)
/teamshows an unread-notification count for the signed-in team adminPer-Coupon "New" Indicator (PRD Functional #4)
/teamonceRead State on Page Load (PRD Functional #5)
/teammarks that admin's redemption notifications as readAccess Control (PRD Functional #6)
Non-Functional
/team(redeemer email, course, coupon code)/team's notification data is a single query per admin, not a per-coupon loop (verify via code inspection if not observable in UI)couponRedemptionNotificationstable follows schema conventions: autoincrement integer id, ISO string timestamps, nullableread_attext column (not boolean)Open Questions needing retroactive confirmation (PRD Open Questions — flagged as needed before implementation, but implementation already shipped)
couponRedemptionNotificationstable (vs. generalizing the existingnotificationstable) is acceptableenrollUser's duplicate-enrollment check being a harmless no-op behindredeemCoupon's own earlier check is acceptable (no double-guard issue)