Select Git revision
system.go 2.76 KiB
package system
import (
"context"
"reflect"
"git.perx.ru/perxis/perxis-go/id"
"git.perx.ru/perxis/perxis-go/pkg/auth"
"git.perx.ru/perxis/perxis-go/pkg/collections"
"git.perx.ru/perxis/perxis-go/pkg/environments"
"git.perx.ru/perxis/perxis-go/pkg/items"
"git.perx.ru/perxis/perxis-go/pkg/organizations"
"git.perx.ru/perxis/perxis-go/pkg/roles"
"git.perx.ru/perxis/perxis-go/pkg/spaces"
"git.perx.ru/perxis/perxis-go/pkg/users"
)
func Handler(obj any) *id.ObjectId {
switch val := obj.(type) {
case *spaces.Space:
var i id.SpaceId
i.SpaceID = val.ID
return id.MustObjectId(&i)
case *environments.Environment:
var i id.EnvironmentId
i.SpaceID = val.SpaceID
i.EnvironmentID = val.ID
return id.MustObjectId(&i)
case *collections.Collection:
var i id.CollectionId
i.SpaceID = val.SpaceID
i.EnvironmentID = val.EnvID
i.CollectionID = val.ID
return id.MustObjectId(&i)
case *items.Item:
var i id.ItemId
i.SpaceID = val.SpaceID
i.EnvironmentID = val.EnvID
i.CollectionID = val.CollectionID
i.ItemID = val.ID
return id.MustObjectId(&i)
case *users.User:
var i id.UserId
i.UserID = val.ID
return id.MustObjectId(&i)
case *organizations.Organization:
var i id.OrganizationId
i.OrganizationID = val.ID
return id.MustObjectId(&i)
case *roles.Role:
var i id.RoleId
i.SpaceID = val.SpaceID
i.RoleID = val.ID
return id.MustObjectId(&i)
case *auth.UserPrincipal:
var i id.UserId
i.UserID = val.GetID(context.TODO())
return id.MustObjectId(&i)
case *auth.ClientPrincipal:
var i id.ClientId
i.ClientID = val.GetID(context.TODO())
return id.MustObjectId(&i)
case *auth.SystemPrincipal:
return id.MustObjectId(&id.SystemId{})
case *auth.Anonymous:
var i id.UserId
i.UserID = val.GetID(context.TODO())
return id.MustObjectId(&i)
}
return nil
}
// Register registers object handler for system types into the provided Registry.
func Register(r *id.Registry) {
r.RegisterObjectHandler(reflect.TypeOf(&organizations.Organization{}), Handler)
r.RegisterObjectHandler(reflect.TypeOf(&spaces.Space{}), Handler)
r.RegisterObjectHandler(reflect.TypeOf(&environments.Environment{}), Handler)
r.RegisterObjectHandler(reflect.TypeOf(&collections.Collection{}), Handler)
r.RegisterObjectHandler(reflect.TypeOf(&items.Item{}), Handler)
r.RegisterObjectHandler(reflect.TypeOf(&roles.Role{}), Handler)
r.RegisterObjectHandler(reflect.TypeOf(&auth.UserPrincipal{}), Handler)
r.RegisterObjectHandler(reflect.TypeOf(&auth.ClientPrincipal{}), Handler)
r.RegisterObjectHandler(reflect.TypeOf(&auth.SystemPrincipal{}), Handler)
r.RegisterObjectHandler(reflect.TypeOf(&auth.Anonymous{}), Handler)
// TODO: Добавить регистрацию schema, revision, service непонятно как делать
}
func init() {
Register(id.GetRegistry())
}