feat: organizations and API keys
This commit is contained in:
+74
-12
@@ -6,17 +6,78 @@ import (
|
||||
"strings"
|
||||
|
||||
"gitlab.com/unboundsoftware/eventsourced/eventsourced"
|
||||
|
||||
"gitlab.com/unboundsoftware/schemas/hash"
|
||||
)
|
||||
|
||||
type UpdateSubGraph struct {
|
||||
Ref string
|
||||
Service string
|
||||
Url *string
|
||||
WSUrl *string
|
||||
Sdl string
|
||||
type AddOrganization struct {
|
||||
Name string
|
||||
Initiator string
|
||||
}
|
||||
|
||||
func (a AddOrganization) Validate(_ context.Context, aggregate eventsourced.Aggregate) error {
|
||||
if aggregate.Identity() != nil {
|
||||
return fmt.Errorf("organization already exists")
|
||||
}
|
||||
if len(a.Name) == 0 {
|
||||
return fmt.Errorf("name is required")
|
||||
}
|
||||
return nil
|
||||
}
|
||||
|
||||
func (a AddOrganization) Event(context.Context) eventsourced.Event {
|
||||
return &OrganizationAdded{
|
||||
Name: a.Name,
|
||||
Initiator: a.Initiator,
|
||||
}
|
||||
}
|
||||
|
||||
var _ eventsourced.Command = AddOrganization{}
|
||||
|
||||
type AddAPIKey struct {
|
||||
Name string
|
||||
Key string
|
||||
Refs []string
|
||||
Read bool
|
||||
Publish bool
|
||||
Initiator string
|
||||
}
|
||||
|
||||
func (a AddAPIKey) Validate(_ context.Context, aggregate eventsourced.Aggregate) error {
|
||||
if aggregate.Identity() == nil {
|
||||
return fmt.Errorf("organization does not exist")
|
||||
}
|
||||
for _, k := range aggregate.(*Organization).APIKeys {
|
||||
if k.Name == a.Name {
|
||||
return fmt.Errorf("a key named '%s' already exist", a.Name)
|
||||
}
|
||||
}
|
||||
return nil
|
||||
}
|
||||
|
||||
func (a AddAPIKey) Event(context.Context) eventsourced.Event {
|
||||
return &APIKeyAdded{
|
||||
Name: a.Name,
|
||||
Key: hash.String(a.Key),
|
||||
Refs: a.Refs,
|
||||
Read: a.Read,
|
||||
Publish: a.Publish,
|
||||
Initiator: a.Initiator,
|
||||
}
|
||||
}
|
||||
|
||||
var _ eventsourced.Command = AddAPIKey{}
|
||||
|
||||
type UpdateSubGraph struct {
|
||||
OrganizationId string
|
||||
Ref string
|
||||
Service string
|
||||
Url *string
|
||||
WSUrl *string
|
||||
Sdl string
|
||||
Initiator string
|
||||
}
|
||||
|
||||
func (u UpdateSubGraph) Validate(_ context.Context, aggregate eventsourced.Aggregate) error {
|
||||
switch a := aggregate.(type) {
|
||||
case *SubGraph:
|
||||
@@ -40,12 +101,13 @@ func (u UpdateSubGraph) Validate(_ context.Context, aggregate eventsourced.Aggre
|
||||
|
||||
func (u UpdateSubGraph) Event(context.Context) eventsourced.Event {
|
||||
return &SubGraphUpdated{
|
||||
Ref: u.Ref,
|
||||
Service: u.Service,
|
||||
Url: u.Url,
|
||||
WSUrl: u.WSUrl,
|
||||
Sdl: u.Sdl,
|
||||
Initiator: u.Initiator,
|
||||
OrganizationId: u.OrganizationId,
|
||||
Ref: u.Ref,
|
||||
Service: u.Service,
|
||||
Url: u.Url,
|
||||
WSUrl: u.WSUrl,
|
||||
Sdl: u.Sdl,
|
||||
Initiator: u.Initiator,
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user