mirror of
https://github.com/andwati/telecom-platform.git
synced 2026-10-20 03:44:25 +00:00
- Add package documentation mapping resolver files to domains (subscriber/usage/billing/mutations/esim/alerts/subscriptions) - Remove models package import and add blank imports for context/base64 to preserve helper function dependencies - Remove all resolver method implementations (Subscriber/SubscriberByImsi/Subscribers/SubscriberAccount/UsageEvents/UsageStats/RealTimeUsage/Invoices/Invoice
75 lines
2.2 KiB
Go
75 lines
2.2 KiB
Go
package graphql
|
|
|
|
import (
|
|
"context"
|
|
"encoding/base64"
|
|
"fmt"
|
|
|
|
"github.com/nutcas3/telecom-platform/apps/api-server/internal/models"
|
|
)
|
|
|
|
// Alerts resolves a paginated connection of alerts.
|
|
func (r *Resolver) Alerts(ctx context.Context, first *int, after *string, subscriberId *int, severity *models.AlertSeverity, resolved *bool) (*AlertConnection, error) {
|
|
limit := 50
|
|
if first != nil {
|
|
limit = *first
|
|
}
|
|
offset := 0
|
|
if after != nil {
|
|
cursor, err := base64.StdEncoding.DecodeString(*after)
|
|
if err != nil {
|
|
return nil, fmt.Errorf("invalid cursor")
|
|
}
|
|
offset = parseCursorOffset(string(cursor))
|
|
}
|
|
|
|
alerts, total, err := r.subscriber.ListAlerts(ctx, limit, offset, subscriberId, severity, resolved)
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
|
|
edges := make([]*AlertEdge, len(alerts))
|
|
for i, alert := range alerts {
|
|
edges[i] = &AlertEdge{
|
|
Node: alert,
|
|
Cursor: base64.StdEncoding.EncodeToString(fmt.Appendf(nil, "%d", offset+i+1)),
|
|
}
|
|
}
|
|
|
|
return &AlertConnection{
|
|
Edges: edges,
|
|
PageInfo: buildConnectionPageInfo(offset, len(alerts), total),
|
|
TotalCount: int(total),
|
|
}, nil
|
|
}
|
|
|
|
// SystemStats resolves system-wide stats.
|
|
func (r *Resolver) SystemStats(ctx context.Context) (*models.SystemStats, error) {
|
|
return r.charging.GetSystemStats(ctx)
|
|
}
|
|
|
|
// HealthStatus resolves the platform health status.
|
|
func (r *Resolver) HealthStatus(ctx context.Context) (*models.HealthStatus, error) {
|
|
return r.charging.GetHealthStatus(ctx)
|
|
}
|
|
|
|
// ResolveAlert marks an alert as resolved.
|
|
func (r *Resolver) ResolveAlert(ctx context.Context, alertId string) (*models.Alert, error) {
|
|
return r.subscriber.ResolveAlert(ctx, alertId)
|
|
}
|
|
|
|
// CreateAlert creates a new alert from GraphQL input.
|
|
func (r *Resolver) CreateAlert(ctx context.Context, input CreateAlertInput) (*models.Alert, error) {
|
|
return r.subscriber.CreateAlert(ctx, &models.CreateAlertRequest{
|
|
Type: models.AlertType(input.Type),
|
|
Severity: models.AlertSeverity(input.Severity),
|
|
Message: input.Message,
|
|
SubscriberID: input.SubscriberID,
|
|
})
|
|
}
|
|
|
|
// TriggerSystemMaintenance triggers a maintenance cycle.
|
|
func (r *Resolver) TriggerSystemMaintenance(ctx context.Context) (bool, error) {
|
|
return r.charging.TriggerMaintenance(ctx)
|
|
}
|