Files
telecom-platform/apps/api-server/internal/graphql/resolvers_alerts.go
T
nutcas3 85ed3e1598 feat: Refactor GraphQL resolvers to extract domain methods into separate files and retain only shared helpers
- 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
2026-04-24 08:55:28 +03:00

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)
}