Documentation
¶
Overview ¶
Package service provides business logic services for the subscription plugin.
Index ¶
- type AddOnService
- func (s *AddOnService) Create(ctx context.Context, appID xid.ID, req *core.CreateAddOnRequest) (*core.AddOn, error)
- func (s *AddOnService) Delete(ctx context.Context, id xid.ID) error
- func (s *AddOnService) GetAvailableForPlan(ctx context.Context, planID xid.ID) ([]*core.AddOn, error)
- func (s *AddOnService) GetByID(ctx context.Context, id xid.ID) (*core.AddOn, error)
- func (s *AddOnService) GetBySlug(ctx context.Context, appID xid.ID, slug string) (*core.AddOn, error)
- func (s *AddOnService) List(ctx context.Context, appID xid.ID, activeOnly, publicOnly bool, ...) ([]*core.AddOn, int, error)
- func (s *AddOnService) Update(ctx context.Context, id xid.ID, req *core.UpdateAddOnRequest) (*core.AddOn, error)
- type AddOnServiceInterface
- type AlertService
- func (s *AlertService) AcknowledgeAlert(ctx context.Context, req *core.AcknowledgeAlertRequest) error
- func (s *AlertService) CheckTrialEndings(ctx context.Context, appID xid.ID) error
- func (s *AlertService) CheckUsageThresholds(ctx context.Context, appID xid.ID) error
- func (s *AlertService) CreateAlert(ctx context.Context, alert *core.Alert) error
- func (s *AlertService) CreateAlertConfig(ctx context.Context, appID xid.ID, req *core.CreateAlertConfigRequest) (*core.AlertConfig, error)
- func (s *AlertService) DeleteAlertConfig(ctx context.Context, id xid.ID) error
- func (s *AlertService) GetAlert(ctx context.Context, id xid.ID) (*core.Alert, error)
- func (s *AlertService) GetAlertConfig(ctx context.Context, id xid.ID) (*core.AlertConfig, error)
- func (s *AlertService) GetAlertSummary(ctx context.Context, orgID xid.ID) (*core.AlertSummary, error)
- func (s *AlertService) ListAlertConfigs(ctx context.Context, orgID xid.ID) ([]*core.AlertConfig, error)
- func (s *AlertService) ListAlerts(ctx context.Context, orgID xid.ID, status *core.AlertStatus, ...) ([]*core.Alert, int, error)
- func (s *AlertService) ProcessPendingAlerts(ctx context.Context) error
- func (s *AlertService) ResolveAlert(ctx context.Context, req *core.ResolveAlertRequest) error
- func (s *AlertService) SetupDefaultAlerts(ctx context.Context, appID, orgID xid.ID) error
- func (s *AlertService) SnoozeAlertConfig(ctx context.Context, id xid.ID, until time.Time) error
- func (s *AlertService) TriggerAlert(ctx context.Context, appID xid.ID, req *core.TriggerAlertRequest) (*core.Alert, error)
- func (s *AlertService) UpdateAlertConfig(ctx context.Context, id xid.ID, req *core.UpdateAlertConfigRequest) (*core.AlertConfig, error)
- type AnalyticsService
- func (s *AnalyticsService) GetChurnRate(ctx context.Context, appID xid.ID, startDate, endDate time.Time) (float64, error)
- func (s *AnalyticsService) GetDashboardMetrics(ctx context.Context, appID xid.ID, startDate, endDate time.Time, ...) (*core.DashboardMetrics, error)
- func (s *AnalyticsService) GetMRRHistory(ctx context.Context, appID xid.ID, startDate, endDate time.Time, ...) ([]*core.MRRBreakdown, error)
- func (s *AnalyticsService) GetRevenueByOrg(ctx context.Context, appID xid.ID, startDate, endDate time.Time) ([]*core.OrgRevenue, error)
- func (s *AnalyticsService) GetSubscriptionGrowth(ctx context.Context, appID xid.ID, startDate, endDate time.Time) ([]*core.GrowthPoint, error)
- type CouponService
- func (s *CouponService) ArchiveCoupon(ctx context.Context, id xid.ID) error
- func (s *CouponService) CreateCoupon(ctx context.Context, appID xid.ID, req *core.CreateCouponRequest) (*core.Coupon, error)
- func (s *CouponService) CreatePromotionCode(ctx context.Context, appID xid.ID, req *core.CreatePromotionCodeRequest) (*core.PromotionCode, error)
- func (s *CouponService) GetCoupon(ctx context.Context, id xid.ID) (*core.Coupon, error)
- func (s *CouponService) GetCouponByCode(ctx context.Context, appID xid.ID, code string) (*core.Coupon, error)
- func (s *CouponService) ListCoupons(ctx context.Context, appID xid.ID, status *core.CouponStatus, ...) ([]*core.Coupon, int, error)
- func (s *CouponService) ListOrgRedemptions(ctx context.Context, orgID xid.ID) ([]*core.CouponRedemption, error)
- func (s *CouponService) ListPromotionCodes(ctx context.Context, couponID xid.ID, page, pageSize int) ([]*core.PromotionCode, int, error)
- func (s *CouponService) ListRedemptions(ctx context.Context, couponID xid.ID, page, pageSize int) ([]*core.CouponRedemption, int, error)
- func (s *CouponService) RedeemCoupon(ctx context.Context, appID xid.ID, req *core.RedeemCouponRequest) (*core.CouponRedemption, error)
- func (s *CouponService) UpdateCoupon(ctx context.Context, id xid.ID, req *core.UpdateCouponRequest) (*core.Coupon, error)
- func (s *CouponService) ValidateCoupon(ctx context.Context, appID xid.ID, req *core.ValidateCouponRequest) (*core.ValidateCouponResponse, error)
- type CurrencyService
- func (s *CurrencyService) Convert(ctx context.Context, req *core.ConvertCurrencyRequest) (*core.ConvertCurrencyResponse, error)
- func (s *CurrencyService) CreateCurrency(ctx context.Context, currency *core.SupportedCurrency) error
- func (s *CurrencyService) CreateExchangeRate(ctx context.Context, req *core.CreateExchangeRateRequest, appID xid.ID) (*core.ExchangeRate, error)
- func (s *CurrencyService) FormatAmount(amount int64, currency string) string
- func (s *CurrencyService) GetCurrency(ctx context.Context, code string) (*core.SupportedCurrency, error)
- func (s *CurrencyService) GetExchangeRate(ctx context.Context, fromCurrency, toCurrency string) (*core.ExchangeRate, error)
- func (s *CurrencyService) ListCurrencies(ctx context.Context) ([]*core.SupportedCurrency, error)
- func (s *CurrencyService) ListExchangeRates(ctx context.Context, appID xid.ID) ([]*core.ExchangeRate, error)
- func (s *CurrencyService) SetDefaultCurrency(ctx context.Context, code string) error
- type CustomerService
- func (s *CustomerService) Create(ctx context.Context, req *core.CreateCustomerRequest) (*core.Customer, error)
- func (s *CustomerService) GetByOrganizationID(ctx context.Context, orgID xid.ID) (*core.Customer, error)
- func (s *CustomerService) GetOrCreate(ctx context.Context, orgID xid.ID, email, name string) (*core.Customer, error)
- func (s *CustomerService) SyncToProvider(ctx context.Context, id xid.ID) error
- func (s *CustomerService) Update(ctx context.Context, id xid.ID, req *core.UpdateCustomerRequest) (*core.Customer, error)
- type CustomerServiceInterface
- type EnforcementService
- func (s *EnforcementService) CheckFeatureAccess(ctx context.Context, orgID xid.ID, feature string) (bool, error)
- func (s *EnforcementService) CheckFeatureAccessEnhanced(ctx context.Context, orgID xid.ID, featureKey string) (*core.FeatureAccess, error)
- func (s *EnforcementService) EnforceSeatLimit(ctx context.Context, orgIDStr string, userID xid.ID) error
- func (s *EnforcementService) EnforceSubscriptionRequired(ctx context.Context, req any) error
- func (s *EnforcementService) EnforceTeamLimit(ctx context.Context, orgID xid.ID) error
- func (s *EnforcementService) GetAllLimits(ctx context.Context, orgID xid.ID) (map[string]*core.UsageLimit, error)
- func (s *EnforcementService) GetEffectiveLimitEnhanced(ctx context.Context, orgID xid.ID, featureKey string) (int64, error)
- func (s *EnforcementService) GetFeatureLimit(ctx context.Context, orgID xid.ID, feature string) (int64, error)
- func (s *EnforcementService) GetRemainingSeats(ctx context.Context, orgID xid.ID) (int, error)
- func (s *EnforcementService) SetFeatureRepositories(featureRepo repository.FeatureRepository, ...)
- type EnforcementServiceInterface
- type ExportData
- type ExportFeature
- type ExportFeatureTier
- type ExportImportService
- type ExportPlan
- type ExportPlanFeature
- type ExportPriceTier
- type FeatureService
- func (s *FeatureService) Create(ctx context.Context, appID xid.ID, req *core.CreateFeatureRequest) (*core.Feature, error)
- func (s *FeatureService) Delete(ctx context.Context, id xid.ID) error
- func (s *FeatureService) GetByID(ctx context.Context, id xid.ID) (*core.Feature, error)
- func (s *FeatureService) GetByKey(ctx context.Context, appID xid.ID, key string) (*core.Feature, error)
- func (s *FeatureService) GetPlanFeatures(ctx context.Context, planID xid.ID) ([]*core.PlanFeatureLink, error)
- func (s *FeatureService) GetPublicFeatures(ctx context.Context, appID xid.ID) ([]*core.PublicFeature, error)
- func (s *FeatureService) GetPublicPlanFeatures(ctx context.Context, planID xid.ID) ([]*core.PublicPlanFeature, error)
- func (s *FeatureService) LinkToPlan(ctx context.Context, planID xid.ID, req *core.LinkFeatureRequest) (*core.PlanFeatureLink, error)
- func (s *FeatureService) List(ctx context.Context, appID xid.ID, featureType string, publicOnly bool, ...) ([]*core.Feature, int, error)
- func (s *FeatureService) SyncAllFromProvider(ctx context.Context, productID string) ([]*core.Feature, error)
- func (s *FeatureService) SyncFromProvider(ctx context.Context, providerFeatureID string) (*core.Feature, error)
- func (s *FeatureService) SyncToProvider(ctx context.Context, id xid.ID) error
- func (s *FeatureService) UnlinkFromPlan(ctx context.Context, planID, featureID xid.ID) error
- func (s *FeatureService) Update(ctx context.Context, id xid.ID, req *core.UpdateFeatureRequest) (*core.Feature, error)
- func (s *FeatureService) UpdatePlanLink(ctx context.Context, planID, featureID xid.ID, req *core.UpdateLinkRequest) (*core.PlanFeatureLink, error)
- type FeatureServiceInterface
- type FeatureUsageService
- func (s *FeatureUsageService) CheckAccess(ctx context.Context, orgID xid.ID, featureKey string) (*core.FeatureAccess, error)
- func (s *FeatureUsageService) ConsumeFeature(ctx context.Context, req *core.ConsumeFeatureRequest) (*core.FeatureUsageResponse, error)
- func (s *FeatureUsageService) GetAllUsage(ctx context.Context, orgID xid.ID) ([]*core.FeatureUsageResponse, error)
- func (s *FeatureUsageService) GetEffectiveLimit(ctx context.Context, orgID xid.ID, featureKey string) (int64, error)
- func (s *FeatureUsageService) GetUsage(ctx context.Context, orgID xid.ID, featureKey string) (*core.FeatureUsageResponse, error)
- func (s *FeatureUsageService) GrantFeature(ctx context.Context, req *core.GrantFeatureRequest) (*core.FeatureGrant, error)
- func (s *FeatureUsageService) ListGrants(ctx context.Context, orgID xid.ID) ([]*core.FeatureGrant, error)
- func (s *FeatureUsageService) ProcessResets(ctx context.Context) error
- func (s *FeatureUsageService) ResetUsage(ctx context.Context, orgID xid.ID, featureKey string, actorID *xid.ID, ...) error
- func (s *FeatureUsageService) RevokeGrant(ctx context.Context, grantID xid.ID) error
- type ImportResult
- type InvoiceService
- func (s *InvoiceService) AddItem(ctx context.Context, invoiceID xid.ID, description string, ...) error
- func (s *InvoiceService) Create(ctx context.Context, subID, orgID xid.ID, periodStart, periodEnd time.Time) (*core.Invoice, error)
- func (s *InvoiceService) Finalize(ctx context.Context, id xid.ID) error
- func (s *InvoiceService) GetByID(ctx context.Context, id xid.ID) (*core.Invoice, error)
- func (s *InvoiceService) GetByNumber(ctx context.Context, number string) (*core.Invoice, error)
- func (s *InvoiceService) GetPDFURL(ctx context.Context, id xid.ID) (string, error)
- func (s *InvoiceService) List(ctx context.Context, orgID, subID *xid.ID, status string, page, pageSize int) ([]*core.Invoice, int, error)
- func (s *InvoiceService) MarkPaid(ctx context.Context, id xid.ID) error
- func (s *InvoiceService) SyncFromProvider(ctx context.Context, providerInvoiceID string) (*core.Invoice, error)
- func (s *InvoiceService) Void(ctx context.Context, id xid.ID) error
- type InvoiceServiceInterface
- type PaymentService
- func (s *PaymentService) AddPaymentMethod(ctx context.Context, orgID xid.ID, providerMethodID string, setDefault bool) (*core.PaymentMethod, error)
- func (s *PaymentService) CreateSetupIntent(ctx context.Context, orgID xid.ID) (*core.SetupIntentResult, error)
- func (s *PaymentService) GetDefaultPaymentMethod(ctx context.Context, orgID xid.ID) (*core.PaymentMethod, error)
- func (s *PaymentService) ListPaymentMethods(ctx context.Context, orgID xid.ID) ([]*core.PaymentMethod, error)
- func (s *PaymentService) RemovePaymentMethod(ctx context.Context, id xid.ID) error
- func (s *PaymentService) SetDefaultPaymentMethod(ctx context.Context, orgID, paymentMethodID xid.ID) error
- type PaymentServiceInterface
- type PlanService
- func (s *PlanService) Create(ctx context.Context, appID xid.ID, req *core.CreatePlanRequest) (*core.Plan, error)
- func (s *PlanService) Delete(ctx context.Context, id xid.ID) error
- func (s *PlanService) GetByID(ctx context.Context, id xid.ID) (*core.Plan, error)
- func (s *PlanService) GetBySlug(ctx context.Context, appID xid.ID, slug string) (*core.Plan, error)
- func (s *PlanService) List(ctx context.Context, appID xid.ID, activeOnly, publicOnly bool, ...) ([]*core.Plan, int, error)
- func (s *PlanService) SetActive(ctx context.Context, id xid.ID, active bool) error
- func (s *PlanService) SetAutoSyncPlans(enabled bool)
- func (s *PlanService) SetPublic(ctx context.Context, id xid.ID, public bool) error
- func (s *PlanService) SyncAllFromProvider(ctx context.Context, appID xid.ID) ([]*core.Plan, error)
- func (s *PlanService) SyncFromProvider(ctx context.Context, providerPlanID string) (*core.Plan, error)
- func (s *PlanService) SyncToProvider(ctx context.Context, id xid.ID) error
- func (s *PlanService) Update(ctx context.Context, id xid.ID, req *core.UpdatePlanRequest) (*core.Plan, error)
- type PlanServiceInterface
- type SubscriptionService
- func (s *SubscriptionService) AttachAddOn(ctx context.Context, subID, addOnID xid.ID, quantity int) error
- func (s *SubscriptionService) Cancel(ctx context.Context, id xid.ID, req *core.CancelSubscriptionRequest) error
- func (s *SubscriptionService) ChangePlan(ctx context.Context, id, newPlanID xid.ID) (*core.Subscription, error)
- func (s *SubscriptionService) Create(ctx context.Context, req *core.CreateSubscriptionRequest) (*core.Subscription, error)
- func (s *SubscriptionService) DetachAddOn(ctx context.Context, subID, addOnID xid.ID) error
- func (s *SubscriptionService) GetByID(ctx context.Context, id xid.ID) (*core.Subscription, error)
- func (s *SubscriptionService) GetByOrganizationID(ctx context.Context, orgID xid.ID) (*core.Subscription, error)
- func (s *SubscriptionService) List(ctx context.Context, appID, orgID, planID *xid.ID, status string, ...) ([]*core.Subscription, int, error)
- func (s *SubscriptionService) Pause(ctx context.Context, id xid.ID, req *core.PauseSubscriptionRequest) error
- func (s *SubscriptionService) Resume(ctx context.Context, id xid.ID) error
- func (s *SubscriptionService) SyncFromProvider(ctx context.Context, providerSubID string) (*core.Subscription, error)
- func (s *SubscriptionService) SyncFromProviderByID(ctx context.Context, id xid.ID) (*core.Subscription, error)
- func (s *SubscriptionService) SyncToProvider(ctx context.Context, id xid.ID) error
- func (s *SubscriptionService) Update(ctx context.Context, id xid.ID, req *core.UpdateSubscriptionRequest) (*core.Subscription, error)
- func (s *SubscriptionService) UpdateQuantity(ctx context.Context, id xid.ID, quantity int) (*core.Subscription, error)
- type SubscriptionServiceInterface
- type TaxService
- func (s *TaxService) CalculateTax(ctx context.Context, appID xid.ID, req *core.CalculateTaxRequest) (*core.TaxCalculation, error)
- func (s *TaxService) CreateCustomerTaxID(ctx context.Context, appID xid.ID, req *core.CreateTaxIDRequest) (*core.CustomerTaxID, error)
- func (s *TaxService) CreateTaxExemption(ctx context.Context, appID xid.ID, req *core.CreateTaxExemptionRequest) (*core.TaxExemption, error)
- func (s *TaxService) CreateTaxRate(ctx context.Context, appID xid.ID, req *core.CreateTaxRateRequest) (*core.TaxRate, error)
- func (s *TaxService) DeleteTaxRate(ctx context.Context, id xid.ID) error
- func (s *TaxService) GetTaxRate(ctx context.Context, id xid.ID) (*core.TaxRate, error)
- func (s *TaxService) GetTaxRateForLocation(ctx context.Context, appID xid.ID, country, state string) (*core.TaxRate, error)
- func (s *TaxService) ListCustomerTaxIDs(ctx context.Context, orgID xid.ID) ([]*core.CustomerTaxID, error)
- func (s *TaxService) ListTaxExemptions(ctx context.Context, orgID xid.ID) ([]*core.TaxExemption, error)
- func (s *TaxService) ListTaxRates(ctx context.Context, appID xid.ID, activeOnly bool) ([]*core.TaxRate, error)
- func (s *TaxService) UpdateTaxRate(ctx context.Context, id xid.ID, req *core.UpdateTaxRateRequest) (*core.TaxRate, error)
- func (s *TaxService) ValidateVAT(ctx context.Context, countryCode, vatNumber string) (*core.VATValidationResult, error)
- func (s *TaxService) VerifyTaxExemption(ctx context.Context, id xid.ID) error
- type UsageService
- func (s *UsageService) GetCurrentPeriodUsage(ctx context.Context, subID xid.ID) (map[string]int64, error)
- func (s *UsageService) GetSummary(ctx context.Context, req *core.GetUsageSummaryRequest) (*core.UsageSummary, error)
- func (s *UsageService) GetUsageLimit(ctx context.Context, orgID xid.ID, metricKey string) (*core.UsageLimit, error)
- func (s *UsageService) List(ctx context.Context, subID, orgID *xid.ID, metricKey string, reported *bool, ...) ([]*core.UsageRecord, int, error)
- func (s *UsageService) RecordUsage(ctx context.Context, req *core.RecordUsageRequest) (*core.UsageRecord, error)
- func (s *UsageService) ReportToProvider(ctx context.Context, batchSize int) error
- type UsageServiceInterface
Constants ¶
This section is empty.
Variables ¶
This section is empty.
Functions ¶
This section is empty.
Types ¶
type AddOnService ¶
type AddOnService struct {
// contains filtered or unexported fields
}
AddOnService handles add-on business logic.
func NewAddOnService ¶
func NewAddOnService( repo repository.AddOnRepository, subRepo repository.SubscriptionRepository, provider providers.PaymentProvider, eventRepo repository.EventRepository, ) *AddOnService
NewAddOnService creates a new add-on service.
func (*AddOnService) Create ¶
func (s *AddOnService) Create(ctx context.Context, appID xid.ID, req *core.CreateAddOnRequest) (*core.AddOn, error)
Create creates a new add-on.
func (*AddOnService) GetAvailableForPlan ¶
func (s *AddOnService) GetAvailableForPlan(ctx context.Context, planID xid.ID) ([]*core.AddOn, error)
GetAvailableForPlan retrieves add-ons available for a specific plan.
func (*AddOnService) GetBySlug ¶
func (s *AddOnService) GetBySlug(ctx context.Context, appID xid.ID, slug string) (*core.AddOn, error)
GetBySlug retrieves an add-on by slug.
type AddOnServiceInterface ¶
type AddOnServiceInterface interface {
Create(ctx context.Context, appID xid.ID, req *core.CreateAddOnRequest) (*core.AddOn, error)
Update(ctx context.Context, id xid.ID, req *core.UpdateAddOnRequest) (*core.AddOn, error)
Delete(ctx context.Context, id xid.ID) error
GetByID(ctx context.Context, id xid.ID) (*core.AddOn, error)
GetBySlug(ctx context.Context, appID xid.ID, slug string) (*core.AddOn, error)
List(ctx context.Context, appID xid.ID, activeOnly, publicOnly bool, page, pageSize int) ([]*core.AddOn, int, error)
GetAvailableForPlan(ctx context.Context, planID xid.ID) ([]*core.AddOn, error)
}
AddOnServiceInterface defines the add-on service interface.
type AlertService ¶
type AlertService struct {
// contains filtered or unexported fields
}
AlertService handles usage alerts and notifications.
func NewAlertService ¶
func NewAlertService(repo repository.AlertRepository, usageRepo repository.UsageRepository, subRepo repository.SubscriptionRepository) *AlertService
NewAlertService creates a new alert service.
func (*AlertService) AcknowledgeAlert ¶
func (s *AlertService) AcknowledgeAlert(ctx context.Context, req *core.AcknowledgeAlertRequest) error
AcknowledgeAlert marks an alert as acknowledged.
func (*AlertService) CheckTrialEndings ¶
CheckTrialEndings checks for subscriptions with trials ending soon This would typically be called by a scheduled job.
func (*AlertService) CheckUsageThresholds ¶
CheckUsageThresholds checks all organizations for usage threshold alerts This would typically be called by a scheduled job.
func (*AlertService) CreateAlert ¶
CreateAlert creates a new alert.
func (*AlertService) CreateAlertConfig ¶
func (s *AlertService) CreateAlertConfig(ctx context.Context, appID xid.ID, req *core.CreateAlertConfigRequest) (*core.AlertConfig, error)
CreateAlertConfig creates a new alert configuration.
func (*AlertService) DeleteAlertConfig ¶
DeleteAlertConfig deletes an alert config.
func (*AlertService) GetAlertConfig ¶
func (s *AlertService) GetAlertConfig(ctx context.Context, id xid.ID) (*core.AlertConfig, error)
GetAlertConfig returns an alert config by ID.
func (*AlertService) GetAlertSummary ¶
func (s *AlertService) GetAlertSummary(ctx context.Context, orgID xid.ID) (*core.AlertSummary, error)
GetAlertSummary returns an alert summary for an organization.
func (*AlertService) ListAlertConfigs ¶
func (s *AlertService) ListAlertConfigs(ctx context.Context, orgID xid.ID) ([]*core.AlertConfig, error)
ListAlertConfigs returns all alert configs for an organization.
func (*AlertService) ListAlerts ¶
func (s *AlertService) ListAlerts(ctx context.Context, orgID xid.ID, status *core.AlertStatus, page, pageSize int) ([]*core.Alert, int, error)
ListAlerts returns alerts for an organization.
func (*AlertService) ProcessPendingAlerts ¶
func (s *AlertService) ProcessPendingAlerts(ctx context.Context) error
ProcessPendingAlerts processes and sends pending alerts This would typically be called by a scheduled job.
func (*AlertService) ResolveAlert ¶
func (s *AlertService) ResolveAlert(ctx context.Context, req *core.ResolveAlertRequest) error
ResolveAlert marks an alert as resolved.
func (*AlertService) SetupDefaultAlerts ¶
SetupDefaultAlerts creates default alert configs for a new organization.
func (*AlertService) SnoozeAlertConfig ¶
SnoozeAlertConfig snoozes alerts for a config.
func (*AlertService) TriggerAlert ¶
func (s *AlertService) TriggerAlert(ctx context.Context, appID xid.ID, req *core.TriggerAlertRequest) (*core.Alert, error)
TriggerAlert manually triggers an alert.
func (*AlertService) UpdateAlertConfig ¶
func (s *AlertService) UpdateAlertConfig(ctx context.Context, id xid.ID, req *core.UpdateAlertConfigRequest) (*core.AlertConfig, error)
UpdateAlertConfig updates an alert config.
type AnalyticsService ¶
type AnalyticsService struct {
// contains filtered or unexported fields
}
AnalyticsService handles analytics and metrics calculations.
func NewAnalyticsService ¶
func NewAnalyticsService( analyticsRepo repository.AnalyticsRepository, subRepo repository.SubscriptionRepository, planRepo repository.PlanRepository, ) *AnalyticsService
NewAnalyticsService creates a new analytics service.
func (*AnalyticsService) GetChurnRate ¶ added in v0.0.5
func (s *AnalyticsService) GetChurnRate(ctx context.Context, appID xid.ID, startDate, endDate time.Time) (float64, error)
GetChurnRate calculates churn rate for the period.
func (*AnalyticsService) GetDashboardMetrics ¶
func (s *AnalyticsService) GetDashboardMetrics(ctx context.Context, appID xid.ID, startDate, endDate time.Time, currency string) (*core.DashboardMetrics, error)
GetDashboardMetrics calculates comprehensive dashboard metrics.
func (*AnalyticsService) GetMRRHistory ¶ added in v0.0.5
func (s *AnalyticsService) GetMRRHistory(ctx context.Context, appID xid.ID, startDate, endDate time.Time, currency string) ([]*core.MRRBreakdown, error)
GetMRRHistory returns MRR breakdown over time.
func (*AnalyticsService) GetRevenueByOrg ¶ added in v0.0.5
func (s *AnalyticsService) GetRevenueByOrg(ctx context.Context, appID xid.ID, startDate, endDate time.Time) ([]*core.OrgRevenue, error)
GetRevenueByOrg returns revenue breakdown by organization.
func (*AnalyticsService) GetSubscriptionGrowth ¶ added in v0.0.5
func (s *AnalyticsService) GetSubscriptionGrowth(ctx context.Context, appID xid.ID, startDate, endDate time.Time) ([]*core.GrowthPoint, error)
GetSubscriptionGrowth returns subscription growth data points.
type CouponService ¶
type CouponService struct {
// contains filtered or unexported fields
}
CouponService handles coupon and discount operations.
func NewCouponService ¶
func NewCouponService(repo repository.CouponRepository, subRepo repository.SubscriptionRepository) *CouponService
NewCouponService creates a new coupon service.
func (*CouponService) ArchiveCoupon ¶
ArchiveCoupon archives a coupon.
func (*CouponService) CreateCoupon ¶
func (s *CouponService) CreateCoupon(ctx context.Context, appID xid.ID, req *core.CreateCouponRequest) (*core.Coupon, error)
CreateCoupon creates a new coupon.
func (*CouponService) CreatePromotionCode ¶
func (s *CouponService) CreatePromotionCode(ctx context.Context, appID xid.ID, req *core.CreatePromotionCodeRequest) (*core.PromotionCode, error)
CreatePromotionCode creates a promotion code for a coupon.
func (*CouponService) GetCouponByCode ¶
func (s *CouponService) GetCouponByCode(ctx context.Context, appID xid.ID, code string) (*core.Coupon, error)
GetCouponByCode returns a coupon by code.
func (*CouponService) ListCoupons ¶
func (s *CouponService) ListCoupons(ctx context.Context, appID xid.ID, status *core.CouponStatus, page, pageSize int) ([]*core.Coupon, int, error)
ListCoupons returns all coupons for an app.
func (*CouponService) ListOrgRedemptions ¶
func (s *CouponService) ListOrgRedemptions(ctx context.Context, orgID xid.ID) ([]*core.CouponRedemption, error)
ListOrgRedemptions lists all redemptions for an organization.
func (*CouponService) ListPromotionCodes ¶
func (s *CouponService) ListPromotionCodes(ctx context.Context, couponID xid.ID, page, pageSize int) ([]*core.PromotionCode, int, error)
ListPromotionCodes lists promotion codes for a coupon.
func (*CouponService) ListRedemptions ¶
func (s *CouponService) ListRedemptions(ctx context.Context, couponID xid.ID, page, pageSize int) ([]*core.CouponRedemption, int, error)
ListRedemptions lists redemptions for a coupon.
func (*CouponService) RedeemCoupon ¶
func (s *CouponService) RedeemCoupon(ctx context.Context, appID xid.ID, req *core.RedeemCouponRequest) (*core.CouponRedemption, error)
RedeemCoupon redeems a coupon for a subscription.
func (*CouponService) UpdateCoupon ¶
func (s *CouponService) UpdateCoupon(ctx context.Context, id xid.ID, req *core.UpdateCouponRequest) (*core.Coupon, error)
UpdateCoupon updates a coupon.
func (*CouponService) ValidateCoupon ¶
func (s *CouponService) ValidateCoupon(ctx context.Context, appID xid.ID, req *core.ValidateCouponRequest) (*core.ValidateCouponResponse, error)
ValidateCoupon validates a coupon code.
type CurrencyService ¶
type CurrencyService struct {
// contains filtered or unexported fields
}
CurrencyService handles currency and exchange rate operations.
func NewCurrencyService ¶
func NewCurrencyService(repo repository.CurrencyRepository) *CurrencyService
NewCurrencyService creates a new currency service.
func (*CurrencyService) Convert ¶
func (s *CurrencyService) Convert(ctx context.Context, req *core.ConvertCurrencyRequest) (*core.ConvertCurrencyResponse, error)
Convert converts an amount from one currency to another.
func (*CurrencyService) CreateCurrency ¶
func (s *CurrencyService) CreateCurrency(ctx context.Context, currency *core.SupportedCurrency) error
CreateCurrency creates a new supported currency.
func (*CurrencyService) CreateExchangeRate ¶
func (s *CurrencyService) CreateExchangeRate(ctx context.Context, req *core.CreateExchangeRateRequest, appID xid.ID) (*core.ExchangeRate, error)
CreateExchangeRate creates a new exchange rate.
func (*CurrencyService) FormatAmount ¶
func (s *CurrencyService) FormatAmount(amount int64, currency string) string
FormatAmount formats an amount for display.
func (*CurrencyService) GetCurrency ¶
func (s *CurrencyService) GetCurrency(ctx context.Context, code string) (*core.SupportedCurrency, error)
GetCurrency returns a currency by code.
func (*CurrencyService) GetExchangeRate ¶
func (s *CurrencyService) GetExchangeRate(ctx context.Context, fromCurrency, toCurrency string) (*core.ExchangeRate, error)
GetExchangeRate returns the current exchange rate between two currencies.
func (*CurrencyService) ListCurrencies ¶
func (s *CurrencyService) ListCurrencies(ctx context.Context) ([]*core.SupportedCurrency, error)
ListCurrencies returns all supported currencies.
func (*CurrencyService) ListExchangeRates ¶
func (s *CurrencyService) ListExchangeRates(ctx context.Context, appID xid.ID) ([]*core.ExchangeRate, error)
ListExchangeRates returns all exchange rates for an app.
func (*CurrencyService) SetDefaultCurrency ¶
func (s *CurrencyService) SetDefaultCurrency(ctx context.Context, code string) error
SetDefaultCurrency sets a currency as the default.
type CustomerService ¶
type CustomerService struct {
// contains filtered or unexported fields
}
CustomerService handles billing customer management.
func NewCustomerService ¶
func NewCustomerService( repo repository.CustomerRepository, provider providers.PaymentProvider, eventRepo repository.EventRepository, ) *CustomerService
NewCustomerService creates a new customer service.
func (*CustomerService) Create ¶
func (s *CustomerService) Create(ctx context.Context, req *core.CreateCustomerRequest) (*core.Customer, error)
Create creates a new billing customer.
func (*CustomerService) GetByOrganizationID ¶
func (s *CustomerService) GetByOrganizationID(ctx context.Context, orgID xid.ID) (*core.Customer, error)
GetByOrganizationID retrieves a customer by organization ID.
func (*CustomerService) GetOrCreate ¶
func (s *CustomerService) GetOrCreate(ctx context.Context, orgID xid.ID, email, name string) (*core.Customer, error)
GetOrCreate gets an existing customer or creates a new one.
func (*CustomerService) SyncToProvider ¶
SyncToProvider syncs customer data to the provider.
type CustomerServiceInterface ¶
type CustomerServiceInterface interface {
Create(ctx context.Context, req *core.CreateCustomerRequest) (*core.Customer, error)
Update(ctx context.Context, id xid.ID, req *core.UpdateCustomerRequest) (*core.Customer, error)
GetByOrganizationID(ctx context.Context, orgID xid.ID) (*core.Customer, error)
GetOrCreate(ctx context.Context, orgID xid.ID, email, name string) (*core.Customer, error)
SyncToProvider(ctx context.Context, id xid.ID) error
}
CustomerServiceInterface defines the customer service interface.
type EnforcementService ¶
type EnforcementService struct {
// contains filtered or unexported fields
}
EnforcementService handles subscription limit enforcement.
func NewEnforcementService ¶
func NewEnforcementService( subRepo repository.SubscriptionRepository, planRepo repository.PlanRepository, usageRepo repository.UsageRepository, orgService *organization.Service, config core.Config, ) *EnforcementService
NewEnforcementService creates a new enforcement service.
func (*EnforcementService) CheckFeatureAccess ¶
func (s *EnforcementService) CheckFeatureAccess(ctx context.Context, orgID xid.ID, feature string) (bool, error)
CheckFeatureAccess checks if an organization has access to a feature.
func (*EnforcementService) CheckFeatureAccessEnhanced ¶
func (s *EnforcementService) CheckFeatureAccessEnhanced(ctx context.Context, orgID xid.ID, featureKey string) (*core.FeatureAccess, error)
CheckFeatureAccessEnhanced checks feature access using the new feature system Falls back to legacy system if new system is not configured.
func (*EnforcementService) EnforceSeatLimit ¶
func (s *EnforcementService) EnforceSeatLimit(ctx context.Context, orgIDStr string, userID xid.ID) error
EnforceSeatLimit is a hook to enforce seat limits when adding members.
func (*EnforcementService) EnforceSubscriptionRequired ¶
func (s *EnforcementService) EnforceSubscriptionRequired(ctx context.Context, req any) error
EnforceSubscriptionRequired is a hook to enforce subscription requirement.
func (*EnforcementService) EnforceTeamLimit ¶
EnforceTeamLimit enforces team creation limits.
func (*EnforcementService) GetAllLimits ¶
func (s *EnforcementService) GetAllLimits(ctx context.Context, orgID xid.ID) (map[string]*core.UsageLimit, error)
GetAllLimits returns all limits and current usage for an organization.
func (*EnforcementService) GetEffectiveLimitEnhanced ¶
func (s *EnforcementService) GetEffectiveLimitEnhanced(ctx context.Context, orgID xid.ID, featureKey string) (int64, error)
GetEffectiveLimitEnhanced returns the effective limit for a feature including grants.
func (*EnforcementService) GetFeatureLimit ¶
func (s *EnforcementService) GetFeatureLimit(ctx context.Context, orgID xid.ID, feature string) (int64, error)
GetFeatureLimit returns the limit for a feature.
func (*EnforcementService) GetRemainingSeats ¶
GetRemainingSeats returns the number of available seats.
func (*EnforcementService) SetFeatureRepositories ¶
func (s *EnforcementService) SetFeatureRepositories(featureRepo repository.FeatureRepository, featureUsageRepo repository.FeatureUsageRepository)
SetFeatureRepositories sets the feature repositories for enhanced feature checking.
type EnforcementServiceInterface ¶
type EnforcementServiceInterface interface {
CheckFeatureAccess(ctx context.Context, orgID xid.ID, feature string) (bool, error)
GetRemainingSeats(ctx context.Context, orgID xid.ID) (int, error)
GetFeatureLimit(ctx context.Context, orgID xid.ID, feature string) (int64, error)
GetAllLimits(ctx context.Context, orgID xid.ID) (map[string]*core.UsageLimit, error)
EnforceSubscriptionRequired(ctx context.Context, req any) error
EnforceSeatLimit(ctx context.Context, orgID string, userID xid.ID) error
}
EnforcementServiceInterface defines the enforcement service interface.
type ExportData ¶ added in v0.0.4
type ExportData struct {
Version string `json:"version"`
ExportedAt time.Time `json:"exportedAt"`
AppID string `json:"appId"`
Features []ExportFeature `json:"features"`
Plans []ExportPlan `json:"plans"`
}
ExportData represents the exported data structure.
type ExportFeature ¶ added in v0.0.4
type ExportFeature struct {
Key string `json:"key"`
Name string `json:"name"`
Description string `json:"description"`
Type string `json:"type"`
Unit string `json:"unit"`
ResetPeriod string `json:"resetPeriod"`
IsPublic bool `json:"isPublic"`
DisplayOrder int `json:"displayOrder"`
Icon string `json:"icon,omitempty"`
Metadata map[string]any `json:"metadata,omitempty"`
Tiers []ExportFeatureTier `json:"tiers,omitempty"`
}
ExportFeature represents a feature in export format.
type ExportFeatureTier ¶ added in v0.0.4
type ExportFeatureTier struct {
UpTo int64 `json:"upTo"`
Value string `json:"value"`
Label string `json:"label"`
}
ExportFeatureTier represents a feature tier in export format.
type ExportImportService ¶ added in v0.0.4
type ExportImportService struct {
// contains filtered or unexported fields
}
ExportImportService handles export/import of features and plans.
func NewExportImportService ¶ added in v0.0.4
func NewExportImportService( featureRepo repository.FeatureRepository, planRepo repository.PlanRepository, eventRepo repository.EventRepository, ) *ExportImportService
NewExportImportService creates a new export/import service.
func (*ExportImportService) ExportFeaturesAndPlans ¶ added in v0.0.4
func (s *ExportImportService) ExportFeaturesAndPlans(ctx context.Context, appID xid.ID) (*ExportData, error)
ExportFeaturesAndPlans exports all features and plans for an app.
func (*ExportImportService) ImportFeaturesAndPlans ¶ added in v0.0.4
func (s *ExportImportService) ImportFeaturesAndPlans(ctx context.Context, appID xid.ID, data *ExportData, overwriteExisting bool) (*ImportResult, error)
ImportFeaturesAndPlans imports features and plans from export data.
type ExportPlan ¶ added in v0.0.4
type ExportPlan struct {
Name string `json:"name"`
Slug string `json:"slug"`
Description string `json:"description"`
BillingPattern string `json:"billingPattern"`
BillingInterval string `json:"billingInterval"`
BasePrice int64 `json:"basePrice"`
Currency string `json:"currency"`
TrialDays int `json:"trialDays"`
TierMode string `json:"tierMode"`
IsActive bool `json:"isActive"`
IsPublic bool `json:"isPublic"`
DisplayOrder int `json:"displayOrder"`
Metadata map[string]any `json:"metadata,omitempty"`
Features []ExportPlanFeature `json:"features,omitempty"`
PriceTiers []ExportPriceTier `json:"priceTiers,omitempty"`
}
ExportPlan represents a plan in export format.
type ExportPlanFeature ¶ added in v0.0.4
type ExportPlanFeature struct {
FeatureKey string `json:"featureKey"`
Value any `json:"value"`
IsHighlighted bool `json:"isHighlighted,omitempty"`
IsBlocked bool `json:"isBlocked,omitempty"`
}
ExportPlanFeature represents a plan feature link in export format.
type ExportPriceTier ¶ added in v0.0.4
type ExportPriceTier struct {
UpTo int64 `json:"upTo"`
UnitAmount int64 `json:"unitAmount"`
FlatAmount int64 `json:"flatAmount"`
}
ExportPriceTier represents a price tier in export format.
type FeatureService ¶
type FeatureService struct {
// contains filtered or unexported fields
}
FeatureService handles feature business logic.
func NewFeatureService ¶
func NewFeatureService( featureRepo repository.FeatureRepository, planRepo repository.PlanRepository, eventRepo repository.EventRepository, provider types.PaymentProvider, ) *FeatureService
NewFeatureService creates a new feature service.
func (*FeatureService) Create ¶
func (s *FeatureService) Create(ctx context.Context, appID xid.ID, req *core.CreateFeatureRequest) (*core.Feature, error)
Create creates a new feature.
func (*FeatureService) GetByKey ¶
func (s *FeatureService) GetByKey(ctx context.Context, appID xid.ID, key string) (*core.Feature, error)
GetByKey retrieves a feature by key.
func (*FeatureService) GetPlanFeatures ¶
func (s *FeatureService) GetPlanFeatures(ctx context.Context, planID xid.ID) ([]*core.PlanFeatureLink, error)
GetPlanFeatures retrieves all features linked to a plan.
func (*FeatureService) GetPublicFeatures ¶
func (s *FeatureService) GetPublicFeatures(ctx context.Context, appID xid.ID) ([]*core.PublicFeature, error)
GetPublicFeatures retrieves public features for pricing pages.
func (*FeatureService) GetPublicPlanFeatures ¶
func (s *FeatureService) GetPublicPlanFeatures(ctx context.Context, planID xid.ID) ([]*core.PublicPlanFeature, error)
GetPublicPlanFeatures retrieves features for a plan formatted for public API.
func (*FeatureService) LinkToPlan ¶
func (s *FeatureService) LinkToPlan(ctx context.Context, planID xid.ID, req *core.LinkFeatureRequest) (*core.PlanFeatureLink, error)
LinkToPlan links a feature to a plan.
func (*FeatureService) List ¶
func (s *FeatureService) List(ctx context.Context, appID xid.ID, featureType string, publicOnly bool, page, pageSize int) ([]*core.Feature, int, error)
List retrieves features with filtering.
func (*FeatureService) SyncAllFromProvider ¶ added in v0.0.5
func (s *FeatureService) SyncAllFromProvider(ctx context.Context, productID string) ([]*core.Feature, error)
SyncAllFromProvider syncs all features from the provider for a product.
func (*FeatureService) SyncFromProvider ¶ added in v0.0.5
func (s *FeatureService) SyncFromProvider(ctx context.Context, providerFeatureID string) (*core.Feature, error)
SyncFromProvider syncs a feature from the payment provider.
func (*FeatureService) SyncToProvider ¶ added in v0.0.5
SyncToProvider manually syncs a feature to the payment provider.
func (*FeatureService) UnlinkFromPlan ¶
UnlinkFromPlan removes a feature from a plan.
func (*FeatureService) Update ¶
func (s *FeatureService) Update(ctx context.Context, id xid.ID, req *core.UpdateFeatureRequest) (*core.Feature, error)
Update updates an existing feature.
func (*FeatureService) UpdatePlanLink ¶
func (s *FeatureService) UpdatePlanLink(ctx context.Context, planID, featureID xid.ID, req *core.UpdateLinkRequest) (*core.PlanFeatureLink, error)
UpdatePlanLink updates a feature-plan link.
type FeatureServiceInterface ¶ added in v0.0.5
type FeatureServiceInterface interface {
Create(ctx context.Context, appID xid.ID, req *core.CreateFeatureRequest) (*core.Feature, error)
Update(ctx context.Context, id xid.ID, req *core.UpdateFeatureRequest) (*core.Feature, error)
Delete(ctx context.Context, id xid.ID) error
GetByID(ctx context.Context, id xid.ID) (*core.Feature, error)
GetByKey(ctx context.Context, appID xid.ID, key string) (*core.Feature, error)
List(ctx context.Context, appID xid.ID, featureType string, publicOnly bool, page, pageSize int) ([]*core.Feature, int, error)
LinkToPlan(ctx context.Context, planID xid.ID, req *core.LinkFeatureRequest) (*core.PlanFeatureLink, error)
UpdatePlanLink(ctx context.Context, planID, featureID xid.ID, req *core.UpdateLinkRequest) (*core.PlanFeatureLink, error)
UnlinkFromPlan(ctx context.Context, planID, featureID xid.ID) error
GetPlanFeatures(ctx context.Context, planID xid.ID) ([]*core.PlanFeatureLink, error)
GetPublicFeatures(ctx context.Context, appID xid.ID) ([]*core.PublicFeature, error)
GetPublicPlanFeatures(ctx context.Context, planID xid.ID) ([]*core.PublicPlanFeature, error)
SyncToProvider(ctx context.Context, id xid.ID) error
SyncFromProvider(ctx context.Context, providerFeatureID string) (*core.Feature, error)
SyncAllFromProvider(ctx context.Context, productID string) ([]*core.Feature, error)
}
FeatureServiceInterface defines the feature service interface.
type FeatureUsageService ¶
type FeatureUsageService struct {
// contains filtered or unexported fields
}
FeatureUsageService handles feature usage tracking and enforcement.
func NewFeatureUsageService ¶
func NewFeatureUsageService( usageRepo repository.FeatureUsageRepository, featureRepo repository.FeatureRepository, subRepo repository.SubscriptionRepository, planRepo repository.PlanRepository, eventRepo repository.EventRepository, ) *FeatureUsageService
NewFeatureUsageService creates a new feature usage service.
func (*FeatureUsageService) CheckAccess ¶
func (s *FeatureUsageService) CheckAccess(ctx context.Context, orgID xid.ID, featureKey string) (*core.FeatureAccess, error)
CheckAccess checks if an organization has access to a feature.
func (*FeatureUsageService) ConsumeFeature ¶
func (s *FeatureUsageService) ConsumeFeature(ctx context.Context, req *core.ConsumeFeatureRequest) (*core.FeatureUsageResponse, error)
ConsumeFeature consumes feature quota for an organization.
func (*FeatureUsageService) GetAllUsage ¶
func (s *FeatureUsageService) GetAllUsage(ctx context.Context, orgID xid.ID) ([]*core.FeatureUsageResponse, error)
GetAllUsage retrieves all feature usage for an organization.
func (*FeatureUsageService) GetEffectiveLimit ¶
func (s *FeatureUsageService) GetEffectiveLimit(ctx context.Context, orgID xid.ID, featureKey string) (int64, error)
GetEffectiveLimit returns the total limit for a feature (plan limit + grants).
func (*FeatureUsageService) GetUsage ¶
func (s *FeatureUsageService) GetUsage(ctx context.Context, orgID xid.ID, featureKey string) (*core.FeatureUsageResponse, error)
GetUsage retrieves current usage for a feature.
func (*FeatureUsageService) GrantFeature ¶
func (s *FeatureUsageService) GrantFeature(ctx context.Context, req *core.GrantFeatureRequest) (*core.FeatureGrant, error)
GrantFeature grants additional feature quota to an organization.
func (*FeatureUsageService) ListGrants ¶
func (s *FeatureUsageService) ListGrants(ctx context.Context, orgID xid.ID) ([]*core.FeatureGrant, error)
ListGrants lists all active grants for an organization.
func (*FeatureUsageService) ProcessResets ¶
func (s *FeatureUsageService) ProcessResets(ctx context.Context) error
ProcessResets processes usage resets for features that need it.
func (*FeatureUsageService) ResetUsage ¶
func (s *FeatureUsageService) ResetUsage(ctx context.Context, orgID xid.ID, featureKey string, actorID *xid.ID, reason string) error
ResetUsage resets usage for a feature.
func (*FeatureUsageService) RevokeGrant ¶
RevokeGrant revokes a feature grant.
type ImportResult ¶ added in v0.0.4
type ImportResult struct {
FeaturesCreated int `json:"featuresCreated"`
FeaturesSkipped int `json:"featuresSkipped"`
PlansCreated int `json:"plansCreated"`
PlansSkipped int `json:"plansSkipped"`
Errors []string `json:"errors,omitempty"`
}
ImportResult contains the results of an import operation.
type InvoiceService ¶
type InvoiceService struct {
// contains filtered or unexported fields
}
InvoiceService handles invoice business logic.
func NewInvoiceService ¶
func NewInvoiceService( repo repository.InvoiceRepository, subRepo repository.SubscriptionRepository, provider providers.PaymentProvider, eventRepo repository.EventRepository, ) *InvoiceService
NewInvoiceService creates a new invoice service.
func (*InvoiceService) AddItem ¶
func (s *InvoiceService) AddItem(ctx context.Context, invoiceID xid.ID, description string, quantity, unitAmount int64) error
AddItem adds a line item to an invoice.
func (*InvoiceService) Create ¶
func (s *InvoiceService) Create(ctx context.Context, subID, orgID xid.ID, periodStart, periodEnd time.Time) (*core.Invoice, error)
Create creates a new invoice.
func (*InvoiceService) GetByNumber ¶
GetByNumber retrieves an invoice by number.
func (*InvoiceService) List ¶
func (s *InvoiceService) List(ctx context.Context, orgID, subID *xid.ID, status string, page, pageSize int) ([]*core.Invoice, int, error)
List retrieves invoices with filtering.
func (*InvoiceService) SyncFromProvider ¶
func (s *InvoiceService) SyncFromProvider(ctx context.Context, providerInvoiceID string) (*core.Invoice, error)
SyncFromProvider syncs an invoice from the provider.
type InvoiceServiceInterface ¶
type InvoiceServiceInterface interface {
GetByID(ctx context.Context, id xid.ID) (*core.Invoice, error)
GetByNumber(ctx context.Context, number string) (*core.Invoice, error)
List(ctx context.Context, orgID, subID *xid.ID, status string, page, pageSize int) ([]*core.Invoice, int, error)
GetPDFURL(ctx context.Context, id xid.ID) (string, error)
Void(ctx context.Context, id xid.ID) error
SyncFromProvider(ctx context.Context, providerInvoiceID string) (*core.Invoice, error)
}
InvoiceServiceInterface defines the invoice service interface.
type PaymentService ¶
type PaymentService struct {
// contains filtered or unexported fields
}
PaymentService handles payment method management.
func NewPaymentService ¶
func NewPaymentService( repo repository.PaymentMethodRepository, customerRepo repository.CustomerRepository, provider providers.PaymentProvider, eventRepo repository.EventRepository, ) *PaymentService
NewPaymentService creates a new payment service.
func (*PaymentService) AddPaymentMethod ¶
func (s *PaymentService) AddPaymentMethod(ctx context.Context, orgID xid.ID, providerMethodID string, setDefault bool) (*core.PaymentMethod, error)
AddPaymentMethod adds a payment method from provider.
func (*PaymentService) CreateSetupIntent ¶
func (s *PaymentService) CreateSetupIntent(ctx context.Context, orgID xid.ID) (*core.SetupIntentResult, error)
CreateSetupIntent creates a setup intent for adding a payment method.
func (*PaymentService) GetDefaultPaymentMethod ¶
func (s *PaymentService) GetDefaultPaymentMethod(ctx context.Context, orgID xid.ID) (*core.PaymentMethod, error)
GetDefaultPaymentMethod gets the default payment method.
func (*PaymentService) ListPaymentMethods ¶
func (s *PaymentService) ListPaymentMethods(ctx context.Context, orgID xid.ID) ([]*core.PaymentMethod, error)
ListPaymentMethods lists all payment methods for an organization.
func (*PaymentService) RemovePaymentMethod ¶
RemovePaymentMethod removes a payment method.
func (*PaymentService) SetDefaultPaymentMethod ¶
func (s *PaymentService) SetDefaultPaymentMethod(ctx context.Context, orgID, paymentMethodID xid.ID) error
SetDefaultPaymentMethod sets a payment method as default.
type PaymentServiceInterface ¶
type PaymentServiceInterface interface {
CreateSetupIntent(ctx context.Context, orgID xid.ID) (*core.SetupIntentResult, error)
AddPaymentMethod(ctx context.Context, req *core.AddPaymentMethodRequest) (*core.PaymentMethod, error)
RemovePaymentMethod(ctx context.Context, id xid.ID) error
SetDefaultPaymentMethod(ctx context.Context, orgID, paymentMethodID xid.ID) error
ListPaymentMethods(ctx context.Context, orgID xid.ID) ([]*core.PaymentMethod, error)
GetDefaultPaymentMethod(ctx context.Context, orgID xid.ID) (*core.PaymentMethod, error)
}
PaymentServiceInterface defines the payment service interface.
type PlanService ¶
type PlanService struct {
// contains filtered or unexported fields
}
PlanService handles plan business logic.
func NewPlanService ¶
func NewPlanService( repo repository.PlanRepository, provider providers.PaymentProvider, eventRepo repository.EventRepository, ) *PlanService
NewPlanService creates a new plan service.
func (*PlanService) Create ¶
func (s *PlanService) Create(ctx context.Context, appID xid.ID, req *core.CreatePlanRequest) (*core.Plan, error)
Create creates a new plan.
func (*PlanService) List ¶
func (s *PlanService) List(ctx context.Context, appID xid.ID, activeOnly, publicOnly bool, page, pageSize int) ([]*core.Plan, int, error)
List retrieves plans with filtering.
func (*PlanService) SetAutoSyncPlans ¶
func (s *PlanService) SetAutoSyncPlans(enabled bool)
SetAutoSyncPlans enables or disables automatic plan sync to provider.
func (*PlanService) SyncAllFromProvider ¶
SyncAllFromProvider syncs all plans from the payment provider for a given app. It fetches all products from the provider that have AuthSome metadata, creates new local records for products that don't exist locally, and updates existing local records with data from the provider.
func (*PlanService) SyncFromProvider ¶
func (s *PlanService) SyncFromProvider(ctx context.Context, providerPlanID string) (*core.Plan, error)
SyncFromProvider syncs a single plan from the payment provider using the provider plan ID. If the plan exists locally, it updates the local record with data from the provider. If the plan doesn't exist locally but has AuthSome metadata, it creates a new local record.
func (*PlanService) SyncToProvider ¶
SyncToProvider syncs the plan to the payment provider.
type PlanServiceInterface ¶
type PlanServiceInterface interface {
Create(ctx context.Context, appID xid.ID, req *core.CreatePlanRequest) (*core.Plan, error)
Update(ctx context.Context, id xid.ID, req *core.UpdatePlanRequest) (*core.Plan, error)
Delete(ctx context.Context, id xid.ID) error
GetByID(ctx context.Context, id xid.ID) (*core.Plan, error)
GetBySlug(ctx context.Context, appID xid.ID, slug string) (*core.Plan, error)
List(ctx context.Context, appID xid.ID, activeOnly, publicOnly bool, page, pageSize int) ([]*core.Plan, int, error)
SetActive(ctx context.Context, id xid.ID, active bool) error
SetPublic(ctx context.Context, id xid.ID, public bool) error
SyncToProvider(ctx context.Context, id xid.ID) error
SyncFromProvider(ctx context.Context, providerPlanID string) (*core.Plan, error)
SyncAllFromProvider(ctx context.Context, appID xid.ID) ([]*core.Plan, error)
}
PlanServiceInterface defines the plan service interface.
type SubscriptionService ¶
type SubscriptionService struct {
// contains filtered or unexported fields
}
SubscriptionService handles subscription business logic.
func NewSubscriptionService ¶
func NewSubscriptionService( repo repository.SubscriptionRepository, planRepo repository.PlanRepository, customerRepo repository.CustomerRepository, customerSvc *CustomerService, addOnRepo repository.AddOnRepository, provider providers.PaymentProvider, eventRepo repository.EventRepository, hookRegistry *subhooks.SubscriptionHookRegistry, config core.Config, ) *SubscriptionService
NewSubscriptionService creates a new subscription service.
func (*SubscriptionService) AttachAddOn ¶
func (s *SubscriptionService) AttachAddOn(ctx context.Context, subID, addOnID xid.ID, quantity int) error
AttachAddOn attaches an add-on to a subscription.
func (*SubscriptionService) Cancel ¶
func (s *SubscriptionService) Cancel(ctx context.Context, id xid.ID, req *core.CancelSubscriptionRequest) error
Cancel cancels a subscription.
func (*SubscriptionService) ChangePlan ¶
func (s *SubscriptionService) ChangePlan(ctx context.Context, id, newPlanID xid.ID) (*core.Subscription, error)
ChangePlan changes the subscription plan.
func (*SubscriptionService) Create ¶
func (s *SubscriptionService) Create(ctx context.Context, req *core.CreateSubscriptionRequest) (*core.Subscription, error)
Create creates a new subscription.
func (*SubscriptionService) DetachAddOn ¶
DetachAddOn detaches an add-on from a subscription.
func (*SubscriptionService) GetByID ¶
func (s *SubscriptionService) GetByID(ctx context.Context, id xid.ID) (*core.Subscription, error)
GetByID retrieves a subscription by ID.
func (*SubscriptionService) GetByOrganizationID ¶
func (s *SubscriptionService) GetByOrganizationID(ctx context.Context, orgID xid.ID) (*core.Subscription, error)
GetByOrganizationID retrieves the active subscription for an organization.
func (*SubscriptionService) List ¶
func (s *SubscriptionService) List(ctx context.Context, appID, orgID, planID *xid.ID, status string, page, pageSize int) ([]*core.Subscription, int, error)
List retrieves subscriptions with filtering.
func (*SubscriptionService) Pause ¶
func (s *SubscriptionService) Pause(ctx context.Context, id xid.ID, req *core.PauseSubscriptionRequest) error
Pause pauses a subscription.
func (*SubscriptionService) SyncFromProvider ¶
func (s *SubscriptionService) SyncFromProvider(ctx context.Context, providerSubID string) (*core.Subscription, error)
SyncFromProvider syncs subscription data from the provider.
func (*SubscriptionService) SyncFromProviderByID ¶ added in v0.0.5
func (s *SubscriptionService) SyncFromProviderByID(ctx context.Context, id xid.ID) (*core.Subscription, error)
SyncFromProviderByID syncs subscription data from provider using local subscription ID.
func (*SubscriptionService) SyncToProvider ¶ added in v0.0.5
SyncToProvider syncs a subscription to the payment provider.
func (*SubscriptionService) Update ¶
func (s *SubscriptionService) Update(ctx context.Context, id xid.ID, req *core.UpdateSubscriptionRequest) (*core.Subscription, error)
Update updates a subscription.
func (*SubscriptionService) UpdateQuantity ¶
func (s *SubscriptionService) UpdateQuantity(ctx context.Context, id xid.ID, quantity int) (*core.Subscription, error)
UpdateQuantity updates the subscription quantity.
type SubscriptionServiceInterface ¶
type SubscriptionServiceInterface interface {
Create(ctx context.Context, req *core.CreateSubscriptionRequest) (*core.Subscription, error)
Update(ctx context.Context, id xid.ID, req *core.UpdateSubscriptionRequest) (*core.Subscription, error)
Cancel(ctx context.Context, id xid.ID, req *core.CancelSubscriptionRequest) error
Pause(ctx context.Context, id xid.ID, req *core.PauseSubscriptionRequest) error
Resume(ctx context.Context, id xid.ID) error
GetByID(ctx context.Context, id xid.ID) (*core.Subscription, error)
GetByOrganizationID(ctx context.Context, orgID xid.ID) (*core.Subscription, error)
List(ctx context.Context, appID, orgID, planID *xid.ID, status string, page, pageSize int) ([]*core.Subscription, int, error)
ChangePlan(ctx context.Context, id, newPlanID xid.ID) (*core.Subscription, error)
UpdateQuantity(ctx context.Context, id xid.ID, quantity int) (*core.Subscription, error)
AttachAddOn(ctx context.Context, subID, addOnID xid.ID, quantity int) error
DetachAddOn(ctx context.Context, subID, addOnID xid.ID) error
SyncFromProvider(ctx context.Context, providerSubID string) (*core.Subscription, error)
SyncFromProviderByID(ctx context.Context, id xid.ID) (*core.Subscription, error)
SyncToProvider(ctx context.Context, id xid.ID) error
}
SubscriptionServiceInterface defines the subscription service interface.
type TaxService ¶
type TaxService struct {
// contains filtered or unexported fields
}
TaxService handles tax rate and calculation operations.
func NewTaxService ¶
func NewTaxService(repo repository.TaxRepository) *TaxService
NewTaxService creates a new tax service.
func (*TaxService) CalculateTax ¶
func (s *TaxService) CalculateTax(ctx context.Context, appID xid.ID, req *core.CalculateTaxRequest) (*core.TaxCalculation, error)
CalculateTax calculates tax for an amount.
func (*TaxService) CreateCustomerTaxID ¶
func (s *TaxService) CreateCustomerTaxID(ctx context.Context, appID xid.ID, req *core.CreateTaxIDRequest) (*core.CustomerTaxID, error)
CreateCustomerTaxID creates a tax ID for an organization.
func (*TaxService) CreateTaxExemption ¶
func (s *TaxService) CreateTaxExemption(ctx context.Context, appID xid.ID, req *core.CreateTaxExemptionRequest) (*core.TaxExemption, error)
CreateTaxExemption creates a tax exemption for an organization.
func (*TaxService) CreateTaxRate ¶
func (s *TaxService) CreateTaxRate(ctx context.Context, appID xid.ID, req *core.CreateTaxRateRequest) (*core.TaxRate, error)
CreateTaxRate creates a new tax rate.
func (*TaxService) DeleteTaxRate ¶
DeleteTaxRate deletes a tax rate.
func (*TaxService) GetTaxRate ¶
GetTaxRate returns a tax rate by ID.
func (*TaxService) GetTaxRateForLocation ¶
func (s *TaxService) GetTaxRateForLocation(ctx context.Context, appID xid.ID, country, state string) (*core.TaxRate, error)
GetTaxRateForLocation returns the applicable tax rate for a location.
func (*TaxService) ListCustomerTaxIDs ¶
func (s *TaxService) ListCustomerTaxIDs(ctx context.Context, orgID xid.ID) ([]*core.CustomerTaxID, error)
ListCustomerTaxIDs lists tax IDs for an organization.
func (*TaxService) ListTaxExemptions ¶
func (s *TaxService) ListTaxExemptions(ctx context.Context, orgID xid.ID) ([]*core.TaxExemption, error)
ListTaxExemptions lists tax exemptions for an organization.
func (*TaxService) ListTaxRates ¶
func (s *TaxService) ListTaxRates(ctx context.Context, appID xid.ID, activeOnly bool) ([]*core.TaxRate, error)
ListTaxRates returns all tax rates for an app.
func (*TaxService) UpdateTaxRate ¶
func (s *TaxService) UpdateTaxRate(ctx context.Context, id xid.ID, req *core.UpdateTaxRateRequest) (*core.TaxRate, error)
UpdateTaxRate updates a tax rate.
func (*TaxService) ValidateVAT ¶
func (s *TaxService) ValidateVAT(ctx context.Context, countryCode, vatNumber string) (*core.VATValidationResult, error)
ValidateVAT validates a VAT number (stub - would call VIES or similar).
func (*TaxService) VerifyTaxExemption ¶
VerifyTaxExemption marks an exemption as verified.
type UsageService ¶
type UsageService struct {
// contains filtered or unexported fields
}
UsageService handles usage tracking and metering.
func NewUsageService ¶
func NewUsageService( repo repository.UsageRepository, subRepo repository.SubscriptionRepository, provider providers.PaymentProvider, eventRepo repository.EventRepository, ) *UsageService
NewUsageService creates a new usage service.
func (*UsageService) GetCurrentPeriodUsage ¶
func (s *UsageService) GetCurrentPeriodUsage(ctx context.Context, subID xid.ID) (map[string]int64, error)
GetCurrentPeriodUsage gets all usage for the current billing period.
func (*UsageService) GetSummary ¶
func (s *UsageService) GetSummary(ctx context.Context, req *core.GetUsageSummaryRequest) (*core.UsageSummary, error)
GetSummary retrieves usage summary for a subscription and metric.
func (*UsageService) GetUsageLimit ¶
func (s *UsageService) GetUsageLimit(ctx context.Context, orgID xid.ID, metricKey string) (*core.UsageLimit, error)
GetUsageLimit retrieves current usage against limit for a metric.
func (*UsageService) List ¶
func (s *UsageService) List(ctx context.Context, subID, orgID *xid.ID, metricKey string, reported *bool, page, pageSize int) ([]*core.UsageRecord, int, error)
List retrieves usage records with filtering.
func (*UsageService) RecordUsage ¶
func (s *UsageService) RecordUsage(ctx context.Context, req *core.RecordUsageRequest) (*core.UsageRecord, error)
RecordUsage records a usage event.
func (*UsageService) ReportToProvider ¶
func (s *UsageService) ReportToProvider(ctx context.Context, batchSize int) error
ReportToProvider reports unreported usage to the payment provider.
type UsageServiceInterface ¶
type UsageServiceInterface interface {
RecordUsage(ctx context.Context, req *core.RecordUsageRequest) (*core.UsageRecord, error)
GetSummary(ctx context.Context, req *core.GetUsageSummaryRequest) (*core.UsageSummary, error)
GetUsageLimit(ctx context.Context, orgID xid.ID, metricKey string) (*core.UsageLimit, error)
ReportToProvider(ctx context.Context, batchSize int) error
}
UsageServiceInterface defines the usage service interface.
Source Files
¶
- addon_service.go
- alert_service.go
- analytics_service.go
- coupon_service.go
- currency_service.go
- customer_service.go
- enforcement_service.go
- export_import_service.go
- feature_service.go
- feature_usage_service.go
- interfaces.go
- invoice_service.go
- payment_service.go
- plan_service.go
- subscription_service.go
- tax_service.go
- usage_service.go