package domain import "time" type Principal struct { Subject string `json:"subject"` Email string `json:"email,omitempty"` Name string `json:"name,omitempty"` Role string `json:"role"` } type DashboardKPI struct { Code string `json:"code"` Label string `json:"label"` Value string `json:"value"` } type DashboardSummary struct { TenantName string `json:"tenantName"` Locale string `json:"locale"` Timezone string `json:"timezone"` PlanCode string `json:"planCode"` KPIs []DashboardKPI `json:"kpis"` } type TenantBootstrap struct { TenantID string `json:"tenantId"` TenantName string `json:"tenantName"` Preset string `json:"preset"` Locale string `json:"locale"` Timezone string `json:"timezone"` PlanCode string `json:"planCode,omitempty"` CurrentUser Principal `json:"currentUser"` } type OnboardTenantRequest struct { Name string `json:"name"` Slug string `json:"slug"` Preset string `json:"preset"` Locale string `json:"locale"` Timezone string `json:"timezone"` } type TimeSlot struct { ServiceID *string `json:"serviceId,omitempty"` ClassSessionID *string `json:"classSessionId,omitempty"` StaffID *string `json:"staffId,omitempty"` LocationID *string `json:"locationId,omitempty"` StartsAt string `json:"startsAt"` EndsAt string `json:"endsAt"` Mode string `json:"mode"` Label string `json:"label"` RemainingCapacity *int32 `json:"remainingCapacity,omitempty"` } type PublicAvailability struct { TenantSlug string `json:"tenantSlug"` Timezone string `json:"timezone"` Locale string `json:"locale"` Slots []TimeSlot `json:"slots"` } type CreateBookingRequest struct { TenantSlug string `json:"tenantSlug"` BookingMode string `json:"bookingMode"` ServiceID *string `json:"serviceId,omitempty"` ClassSessionID *string `json:"classSessionId,omitempty"` StaffID *string `json:"staffId,omitempty"` LocationID *string `json:"locationId,omitempty"` CustomerName string `json:"customerName"` CustomerEmail string `json:"customerEmail"` Notes string `json:"notes"` StartsAt string `json:"startsAt"` EndsAt string `json:"endsAt"` } type CreateBookingResponse struct { BookingID string `json:"bookingId"` Reference string `json:"reference"` Status string `json:"status"` } type PlanEntitlements struct { MaxLocations int `json:"maxLocations"` MaxStaff int `json:"maxStaff"` SMSAddonAvailable bool `json:"smsAddonAvailable"` AdvancedReporting bool `json:"advancedReporting"` } type SubscriptionSnapshot struct { TenantID string `json:"tenantId"` CustomerID string `json:"customerId"` SubscriptionID string `json:"subscriptionId"` Status string `json:"status"` PlanCode string `json:"planCode"` PriceID string `json:"priceId"` CancelAtPeriodEnd bool `json:"cancelAtPeriodEnd"` CurrentPeriodStart *time.Time `json:"currentPeriodStart,omitempty"` CurrentPeriodEnd *time.Time `json:"currentPeriodEnd,omitempty"` PaymentMethodBrand string `json:"paymentMethodBrand,omitempty"` PaymentMethodLast4 string `json:"paymentMethodLast4,omitempty"` Entitlements PlanEntitlements `json:"entitlements"` LastSyncedAt *time.Time `json:"lastSyncedAt,omitempty"` CheckoutURLAvailable bool `json:"checkoutUrlAvailable,omitempty"` } type CheckoutSessionRequest struct { PlanCode string `json:"planCode"` } type CheckoutSessionResponse struct { URL string `json:"url"` } type DispatchReminderJobsRequest struct { Limit int `json:"limit,omitempty"` } type DispatchReminderJobsResponse struct { ProcessedCount int `json:"processedCount"` SentCount int `json:"sentCount"` FailedCount int `json:"failedCount"` }