[MokoJoomMembership] [FEATURE] SubscriptionService -- lifecycle management #53

Open
opened 2026-06-02 19:35:56 +00:00 by jmiller · 1 comment
Owner

Migrated from MokoJoomMembership#57

Summary

Core business logic for subscription lifecycle. Referenced in CLAUDE.md but not implemented.

Responsibilities

  • Create new subscription from plan + user
  • Apply coupon discounts
  • Handle trial periods
  • Renew subscriptions (manual and automatic)
  • Expire subscriptions (cron/CLI triggered)
  • Cancel subscriptions (immediate vs end-of-period)
  • Grace period handling

Location

admin/src/Service/SubscriptionService.php

Key Methods

  • create(int $userId, int $planId, ?string $couponCode): Subscription
  • renew(int $subscriptionId): Subscription
  • cancel(int $subscriptionId, bool $immediate): void
  • expire(): int (batch expire, returns count)
  • isActive(int $userId, ?int $planId): bool

Integration Points

  • Triggers AccessService for user group changes
  • Triggers EmailService for notifications
  • Called by SubscribeController (frontend) and SubscriptionController (admin)
> Migrated from MokoJoomMembership#57 ## Summary Core business logic for subscription lifecycle. Referenced in CLAUDE.md but not implemented. ## Responsibilities - Create new subscription from plan + user - Apply coupon discounts - Handle trial periods - Renew subscriptions (manual and automatic) - Expire subscriptions (cron/CLI triggered) - Cancel subscriptions (immediate vs end-of-period) - Grace period handling ## Location `admin/src/Service/SubscriptionService.php` ## Key Methods - `create(int $userId, int $planId, ?string $couponCode): Subscription` - `renew(int $subscriptionId): Subscription` - `cancel(int $subscriptionId, bool $immediate): void` - `expire(): int` (batch expire, returns count) - `isActive(int $userId, ?int $planId): bool` ## Integration Points - Triggers AccessService for user group changes - Triggers EmailService for notifications - Called by SubscribeController (frontend) and SubscriptionController (admin)
jmiller added the membership label 2026-06-02 19:52:09 +00:00
Author
Owner

Built: SubscriptionService already fully implemented (280 lines) — create, renew, cancel, processExpirations.

Built: SubscriptionService already fully implemented (280 lines) — create, renew, cancel, processExpirations.
jmiller added the pending: testing label 2026-06-02 20:31:42 +00:00
Sign in to join this conversation.
1 Participants
Notifications
Due Date
No due date set.
Dependencies

No dependencies set.

Reference: MokoConsulting/MokoJoomCommunity#53