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 interface{}) 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 interface{}) 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 interface{}) 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]interface{} `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]interface{} `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 interface{} `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