mirror of
https://github.com/andwati/zitadel.git
synced 2026-11-09 07:35:13 +00:00
feat: instance domain APIs with relational tables (#11051)
# Which Problems Are Solved This PR implements the endpoints listed in https://github.com/zitadel/zitadel/issues/10444 . # How the Problems Are Solved The implementation follows the same pattern as the Instance one. The `Add` and `Remove` are implementing the `Commander` interface, while `List` Domains endpoints are implementing the `Querier` interace. The PR adds also some forgotten calls to the relational logic for the Instance API. The commits are identifiable by the label `instance:` prepended to them. This is the complete list: bafce01b0 , 6fe7257ab , e27bc9c34 , 8133ede73 , fde667953 , a3e1135ed , ee1a6f9c1 # Additional Context - Closes #10444 --------- Co-authored-by: Elio Bischof <[email protected]> Co-authored-by: Lebogang Phoshoko <[email protected]> Co-authored-by: Wim Van Laer <[email protected]> Co-authored-by: Max Peintner <[email protected]> Co-authored-by: Gayathri Vijayan <[email protected]>
This commit is contained in:
co-authored by
Elio Bischof
Lebogang Phoshoko
Wim Van Laer
Max Peintner
Gayathri Vijayan
parent
d79bfe6eba
commit
b339a3e696
@@ -5,15 +5,42 @@ import (
|
||||
|
||||
"github.com/zitadel/zitadel/backend/v3/domain"
|
||||
"github.com/zitadel/zitadel/cmd/build"
|
||||
instance "github.com/zitadel/zitadel/pkg/grpc/instance/v2beta"
|
||||
"github.com/zitadel/zitadel/pkg/grpc/filter/v2"
|
||||
instance_v2 "github.com/zitadel/zitadel/pkg/grpc/instance/v2"
|
||||
instance_v2beta "github.com/zitadel/zitadel/pkg/grpc/instance/v2beta"
|
||||
)
|
||||
|
||||
/*
|
||||
* Domain Model to GRPC v2Beta
|
||||
*/
|
||||
|
||||
func DomainInstanceListModelToGRPCBetaResponse(instances []*domain.Instance) []*instance_v2beta.Instance {
|
||||
toReturn := make([]*instance_v2beta.Instance, len(instances))
|
||||
|
||||
for i, inst := range instances {
|
||||
toReturn[i] = DomainInstanceModelToGRPCBetaResponse(inst)
|
||||
}
|
||||
|
||||
return toReturn
|
||||
}
|
||||
|
||||
func DomainInstanceModelToGRPCBetaResponse(inst *domain.Instance) *instance_v2beta.Instance {
|
||||
return &instance_v2beta.Instance{
|
||||
Id: inst.ID,
|
||||
ChangeDate: timestamppb.New(inst.UpdatedAt),
|
||||
CreationDate: timestamppb.New(inst.CreatedAt),
|
||||
Name: inst.Name,
|
||||
Version: build.Version(),
|
||||
Domains: DomainInstanceDomainListModelToGRPCBetaResponse(inst.Domains),
|
||||
}
|
||||
}
|
||||
|
||||
/*
|
||||
* Domain Model to GRPC v2
|
||||
*/
|
||||
|
||||
func DomainInstanceListModelToGRPCResponse(instances []*domain.Instance) []*instance.Instance {
|
||||
toReturn := make([]*instance.Instance, len(instances))
|
||||
func DomainInstanceListModelToGRPCResponse(instances []*domain.Instance) []*instance_v2.Instance {
|
||||
toReturn := make([]*instance_v2.Instance, len(instances))
|
||||
|
||||
for i, inst := range instances {
|
||||
toReturn[i] = DomainInstanceModelToGRPCResponse(inst)
|
||||
@@ -22,31 +49,72 @@ func DomainInstanceListModelToGRPCResponse(instances []*domain.Instance) []*inst
|
||||
return toReturn
|
||||
}
|
||||
|
||||
func DomainInstanceModelToGRPCResponse(inst *domain.Instance) *instance.Instance {
|
||||
return &instance.Instance{
|
||||
Id: inst.ID,
|
||||
ChangeDate: timestamppb.New(inst.UpdatedAt),
|
||||
CreationDate: timestamppb.New(inst.CreatedAt),
|
||||
State: instance.State_STATE_RUNNING, // TODO(IAM-Marco): Not sure what to put here
|
||||
Name: inst.Name,
|
||||
Version: build.Version(),
|
||||
Domains: domainInstanceDomainListModelToGRPCResponse(inst.Domains),
|
||||
func DomainInstanceModelToGRPCResponse(inst *domain.Instance) *instance_v2.Instance {
|
||||
return &instance_v2.Instance{
|
||||
Id: inst.ID,
|
||||
ChangeDate: timestamppb.New(inst.UpdatedAt),
|
||||
CreationDate: timestamppb.New(inst.CreatedAt),
|
||||
State: instance_v2.State_STATE_RUNNING, // TODO(IAM-Marco): Not sure what to put here
|
||||
Name: inst.Name,
|
||||
Version: build.Version(),
|
||||
CustomDomains: DomainInstanceDomainListModelToGRPCResponse(inst.Domains),
|
||||
}
|
||||
}
|
||||
|
||||
func domainInstanceDomainListModelToGRPCResponse(dms []*domain.InstanceDomain) []*instance.Domain {
|
||||
toReturn := make([]*instance.Domain, len(dms))
|
||||
for i, domain := range dms {
|
||||
isGenerated := domain.IsGenerated != nil && *domain.IsGenerated
|
||||
isPrimary := domain.IsPrimary != nil && *domain.IsPrimary
|
||||
toReturn[i] = &instance.Domain{
|
||||
InstanceId: domain.InstanceID,
|
||||
CreationDate: timestamppb.New(domain.CreatedAt),
|
||||
Domain: domain.Domain,
|
||||
Primary: isPrimary,
|
||||
Generated: isGenerated,
|
||||
/*
|
||||
* GRPC v2Beta Requests to GRPC v2
|
||||
*/
|
||||
|
||||
func ListInstancesBetaRequestToV2Request(in *instance_v2beta.ListInstancesRequest) *instance_v2.ListInstancesRequest {
|
||||
return &instance_v2.ListInstancesRequest{
|
||||
Pagination: &filter.PaginationRequest{
|
||||
Offset: in.GetPagination().GetOffset(),
|
||||
Limit: in.GetPagination().GetLimit(),
|
||||
Asc: in.GetPagination().GetAsc(),
|
||||
},
|
||||
SortingColumn: listInstancesBetaSortingColToV2Request(in.SortingColumn),
|
||||
Filters: listInstancesQueriesToV2Request(in.GetQueries()),
|
||||
}
|
||||
}
|
||||
|
||||
func listInstancesQueriesToV2Request(queries []*instance_v2beta.Query) []*instance_v2.Filter {
|
||||
toReturn := make([]*instance_v2.Filter, len(queries))
|
||||
for i, query := range queries {
|
||||
switch assertedQuery := query.GetQuery().(type) {
|
||||
case *instance_v2beta.Query_DomainQuery:
|
||||
filter := &instance_v2.Filter_CustomDomainsFilter{
|
||||
CustomDomainsFilter: &instance_v2.CustomDomainsFilter{
|
||||
Domains: assertedQuery.DomainQuery.GetDomains(),
|
||||
},
|
||||
}
|
||||
toReturn[i] = &instance_v2.Filter{Filter: filter}
|
||||
case *instance_v2beta.Query_IdQuery:
|
||||
filter := &instance_v2.Filter_InIdsFilter{
|
||||
InIdsFilter: &filter.InIDsFilter{
|
||||
Ids: assertedQuery.IdQuery.GetIds(),
|
||||
},
|
||||
}
|
||||
toReturn[i] = &instance_v2.Filter{Filter: filter}
|
||||
}
|
||||
}
|
||||
|
||||
return toReturn
|
||||
}
|
||||
|
||||
func listInstancesBetaSortingColToV2Request(fieldName *instance_v2beta.FieldName) instance_v2.FieldName {
|
||||
if fieldName == nil {
|
||||
return instance_v2.FieldName_FIELD_NAME_UNSPECIFIED
|
||||
}
|
||||
|
||||
switch *fieldName {
|
||||
case instance_v2beta.FieldName_FIELD_NAME_CREATION_DATE:
|
||||
return instance_v2.FieldName_FIELD_NAME_CREATION_DATE
|
||||
case instance_v2beta.FieldName_FIELD_NAME_ID:
|
||||
return instance_v2.FieldName_FIELD_NAME_ID
|
||||
case instance_v2beta.FieldName_FIELD_NAME_NAME:
|
||||
return instance_v2.FieldName_FIELD_NAME_NAME
|
||||
case instance_v2beta.FieldName_FIELD_NAME_UNSPECIFIED:
|
||||
fallthrough
|
||||
default:
|
||||
return instance_v2.FieldName_FIELD_NAME_UNSPECIFIED
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user