2022-10-09 15:23:52 +02:00
|
|
|
package graph
|
|
|
|
|
|
|
|
|
|
// This file will be automatically regenerated based on the schema, any resolver implementations
|
|
|
|
|
// will be copied through when generating and any unknown code will be moved to the end.
|
2023-03-21 06:24:25 +00:00
|
|
|
// Code generated by github.com/99designs/gqlgen version v0.17.27
|
2022-10-09 15:23:52 +02:00
|
|
|
|
|
|
|
|
import (
|
|
|
|
|
"context"
|
2022-10-14 22:41:56 +02:00
|
|
|
"fmt"
|
|
|
|
|
"strings"
|
2022-10-09 15:23:52 +02:00
|
|
|
|
|
|
|
|
"github.com/wundergraph/graphql-go-tools/pkg/federation/sdlmerge"
|
|
|
|
|
"gitlab.com/unboundsoftware/eventsourced/eventsourced"
|
|
|
|
|
|
|
|
|
|
"gitlab.com/unboundsoftware/schemas/domain"
|
|
|
|
|
"gitlab.com/unboundsoftware/schemas/graph/generated"
|
|
|
|
|
"gitlab.com/unboundsoftware/schemas/graph/model"
|
|
|
|
|
)
|
|
|
|
|
|
|
|
|
|
// UpdateSubGraph is the resolver for the updateSubGraph field.
|
|
|
|
|
func (r *mutationResolver) UpdateSubGraph(ctx context.Context, input model.InputSubGraph) (*model.SubGraph, error) {
|
|
|
|
|
subGraphId := r.Cache.SubGraphId(input.Ref, input.Service)
|
|
|
|
|
subGraph := &domain.SubGraph{}
|
|
|
|
|
if subGraphId != "" {
|
|
|
|
|
subGraph.BaseAggregate = eventsourced.BaseAggregateFromString(subGraphId)
|
|
|
|
|
}
|
2022-12-17 14:36:42 +01:00
|
|
|
handler, err := r.handler(ctx, subGraph)
|
2022-10-09 15:23:52 +02:00
|
|
|
if err != nil {
|
|
|
|
|
return nil, err
|
|
|
|
|
}
|
2022-10-17 14:30:48 +02:00
|
|
|
if strings.TrimSpace(input.Sdl) == strings.TrimSpace(subGraph.Sdl) &&
|
|
|
|
|
r.stringEqual(input.URL, subGraph.Url) &&
|
|
|
|
|
r.stringEqual(input.WsURL, subGraph.WSUrl) {
|
2022-10-14 22:41:56 +02:00
|
|
|
return r.toGqlSubGraph(subGraph), nil
|
|
|
|
|
}
|
2022-10-09 15:23:52 +02:00
|
|
|
serviceSDLs := []string{input.Sdl}
|
2022-10-14 22:41:56 +02:00
|
|
|
services, _ := r.Cache.Services(input.Ref, "")
|
|
|
|
|
for _, id := range services {
|
2022-12-17 14:36:42 +01:00
|
|
|
sg, err := r.fetchSubGraph(ctx, id)
|
2022-10-09 15:23:52 +02:00
|
|
|
if err != nil {
|
|
|
|
|
return nil, err
|
|
|
|
|
}
|
|
|
|
|
if sg.Service != input.Service {
|
|
|
|
|
serviceSDLs = append(serviceSDLs, sg.Sdl)
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
_, err = sdlmerge.MergeSDLs(serviceSDLs...)
|
|
|
|
|
if err != nil {
|
|
|
|
|
return nil, err
|
|
|
|
|
}
|
2022-12-17 14:36:42 +01:00
|
|
|
_, err = handler.Handle(ctx, domain.UpdateSubGraph{
|
2022-10-09 15:23:52 +02:00
|
|
|
Ref: input.Ref,
|
|
|
|
|
Service: input.Service,
|
|
|
|
|
Url: input.URL,
|
|
|
|
|
WSUrl: input.WsURL,
|
|
|
|
|
Sdl: input.Sdl,
|
|
|
|
|
Initiator: "Fetch name from API-key?",
|
|
|
|
|
})
|
|
|
|
|
if err != nil {
|
|
|
|
|
return nil, err
|
|
|
|
|
}
|
2022-10-14 22:41:56 +02:00
|
|
|
return r.toGqlSubGraph(subGraph), nil
|
2022-10-09 15:23:52 +02:00
|
|
|
}
|
|
|
|
|
|
|
|
|
|
// SubGraphs is the resolver for the subGraphs field.
|
|
|
|
|
func (r *queryResolver) SubGraphs(ctx context.Context, ref string) ([]*model.SubGraph, error) {
|
2022-10-14 22:41:56 +02:00
|
|
|
res, err := r.Supergraph(ctx, ref, nil)
|
|
|
|
|
if err != nil {
|
|
|
|
|
return nil, err
|
|
|
|
|
}
|
|
|
|
|
if s, ok := res.(*model.SubGraphs); ok {
|
|
|
|
|
return s.SubGraphs, nil
|
|
|
|
|
}
|
|
|
|
|
return nil, fmt.Errorf("unexpected response")
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
// Supergraph is the resolver for the supergraph field.
|
|
|
|
|
func (r *queryResolver) Supergraph(ctx context.Context, ref string, isAfter *string) (model.Supergraph, error) {
|
|
|
|
|
after := ""
|
|
|
|
|
if isAfter != nil {
|
|
|
|
|
after = *isAfter
|
|
|
|
|
}
|
|
|
|
|
services, lastUpdate := r.Cache.Services(ref, after)
|
|
|
|
|
if after == lastUpdate {
|
|
|
|
|
return &model.Unchanged{
|
|
|
|
|
ID: lastUpdate,
|
|
|
|
|
MinDelaySeconds: 10,
|
|
|
|
|
}, nil
|
|
|
|
|
}
|
2022-10-09 15:23:52 +02:00
|
|
|
subGraphs := make([]*model.SubGraph, len(services))
|
|
|
|
|
for i, id := range services {
|
2022-12-17 14:36:42 +01:00
|
|
|
sg, err := r.fetchSubGraph(ctx, id)
|
2022-10-09 15:23:52 +02:00
|
|
|
if err != nil {
|
|
|
|
|
return nil, err
|
|
|
|
|
}
|
|
|
|
|
subGraphs[i] = &model.SubGraph{
|
|
|
|
|
ID: sg.ID.String(),
|
|
|
|
|
Service: sg.Service,
|
|
|
|
|
URL: sg.Url,
|
|
|
|
|
WsURL: sg.WSUrl,
|
|
|
|
|
Sdl: sg.Sdl,
|
|
|
|
|
ChangedBy: sg.ChangedBy,
|
|
|
|
|
ChangedAt: sg.ChangedAt,
|
|
|
|
|
}
|
|
|
|
|
}
|
2022-10-14 22:41:56 +02:00
|
|
|
return &model.SubGraphs{
|
|
|
|
|
ID: lastUpdate,
|
|
|
|
|
SubGraphs: subGraphs,
|
|
|
|
|
MinDelaySeconds: 10,
|
|
|
|
|
}, nil
|
2022-10-09 15:23:52 +02:00
|
|
|
}
|
|
|
|
|
|
|
|
|
|
// Mutation returns generated.MutationResolver implementation.
|
|
|
|
|
func (r *Resolver) Mutation() generated.MutationResolver { return &mutationResolver{r} }
|
|
|
|
|
|
|
|
|
|
// Query returns generated.QueryResolver implementation.
|
|
|
|
|
func (r *Resolver) Query() generated.QueryResolver { return &queryResolver{r} }
|
|
|
|
|
|
|
|
|
|
type (
|
|
|
|
|
mutationResolver struct{ *Resolver }
|
|
|
|
|
queryResolver struct{ *Resolver }
|
|
|
|
|
)
|