diff --git a/pkg/coredata/membership_profile.go b/pkg/coredata/membership_profile.go index f2b62eb76..f5e6920e3 100644 --- a/pkg/coredata/membership_profile.go +++ b/pkg/coredata/membership_profile.go @@ -31,21 +31,21 @@ import ( type ( MembershipProfile struct { - ID gid.GID `db:"id"` - IdentityID gid.GID `db:"identity_id"` - OrganizationID gid.GID `db:"organization_id"` - EmailAddress mail.Addr `db:"email_address"` - Source ProfileSource `db:"source"` - State ProfileState `db:"state"` - FullName string `db:"full_name"` - Kind MembershipProfileKind `db:"kind"` - AdditionalEmailAddresses mail.Addrs `db:"additional_email_addresses"` - Position *string `db:"position"` - ContractStartDate *time.Time `db:"contract_start_date"` - ContractEndDate *time.Time `db:"contract_end_date"` - OrganizationName string `db:"organization_name"` - CreatedAt time.Time `db:"created_at"` - UpdatedAt time.Time `db:"updated_at"` + ID gid.GID `db:"id"` + IdentityID gid.GID `db:"identity_id"` + OrganizationID gid.GID `db:"organization_id"` + EmailAddress mail.Addr `db:"email_address"` + Source ProfileSource `db:"source"` + State ProfileState `db:"state"` + FullName string `db:"full_name"` + Kind *MembershipProfileKind `db:"kind"` + AdditionalEmailAddresses mail.Addrs `db:"additional_email_addresses"` + Position *string `db:"position"` + ContractStartDate *time.Time `db:"contract_start_date"` + ContractEndDate *time.Time `db:"contract_end_date"` + OrganizationName string `db:"organization_name"` + CreatedAt time.Time `db:"created_at"` + UpdatedAt time.Time `db:"updated_at"` } MembershipProfiles []*MembershipProfile diff --git a/pkg/coredata/migrations/20260304T151104Z.sql b/pkg/coredata/migrations/20260304T151104Z.sql new file mode 100644 index 000000000..49f0e17b7 --- /dev/null +++ b/pkg/coredata/migrations/20260304T151104Z.sql @@ -0,0 +1,111 @@ +ALTER TABLE + iam_membership_profiles +ALTER COLUMN + kind DROP NOT NULL; + +ALTER TABLE + trust_center_accesses +ADD + COLUMN identity_id TEXT REFERENCES identities(id); + +-- Create missing identities +WITH tca AS ( + SELECT + DISTINCT ON (email) name, + email + FROM + trust_center_accesses +) +INSERT INTO + identities ( + id, + created_at, + updated_at, + email_address, + email_address_verified, + full_name + ) +SELECT + generate_gid('\x0000000000000000' :: bytea, 11), + NOW(), + NOW(), + tca.email, + FALSE, + tca.name +FROM + tca ON CONFLICT (email_address) DO NOTHING; + +-- Update trust_center_accesses with identity_id +WITH tca_identities AS ( + SELECT + tca.id, + tca.tenant_id, + tca.name AS full_name, + tca.organization_id, + tca.state, + i.id AS identity_id + FROM + trust_center_accesses tca + JOIN identities i ON i.email_address = tca.email +) +UPDATE + trust_center_accesses tca +SET + identity_id = tcai.identity_id +FROM + tca_identities tcai +WHERE + tca.id = tcai.id; + +ALTER TABLE + trust_center_accesses +ALTER COLUMN + identity_id +SET + NOT NULL; + +CREATE UNIQUE INDEX idx_trust_center_accesses_identity_id_organization_id ON trust_center_accesses(identity_id, organization_id); + +-- Create missing profiles +WITH tca_identities AS ( + SELECT + tca.tenant_id, + tca.name AS full_name, + tca.organization_id, + tca.state, + i.id AS identity_id + FROM + trust_center_accesses tca + JOIN identities i ON i.email_address = tca.email +) +INSERT INTO + iam_membership_profiles ( + id, + tenant_id, + identity_id, + organization_id, + full_name, + kind, + additional_email_addresses, + source, + state, + created_at, + updated_at + ) +SELECT + generate_gid(decode_base64_unpadded(tcai.tenant_id), 51), + tcai.tenant_id, + tcai.identity_id, + tcai.organization_id, + tcai.full_name, + NULL, + '{}' :: CITEXT [], + 'MANUAL', + CASE + WHEN tcai.state = 'ACTIVE' THEN 'ACTIVE' :: membership_state + ELSE 'INACTIVE' :: membership_state + END, + NOW(), + NOW() +FROM + tca_identities tcai ON CONFLICT DO NOTHING; \ No newline at end of file diff --git a/pkg/iam/organization_service.go b/pkg/iam/organization_service.go index 0e629b755..c4b8c326a 100644 --- a/pkg/iam/organization_service.go +++ b/pkg/iam/organization_service.go @@ -105,7 +105,7 @@ type ( Role coredata.MembershipRole FullName string AdditionalEmailAddresses mail.Addrs - Kind coredata.MembershipProfileKind + Kind *coredata.MembershipProfileKind Position *string ContractStartDate **time.Time ContractEndDate **time.Time @@ -115,7 +115,7 @@ type ( ID gid.GID FullName string AdditionalEmailAddresses mail.Addrs - Kind coredata.MembershipProfileKind + Kind *coredata.MembershipProfileKind Position *string ContractStartDate **time.Time ContractEndDate **time.Time diff --git a/pkg/server/api/connect/v1/schema.graphql b/pkg/server/api/connect/v1/schema.graphql index d32161d87..49e0e3c88 100644 --- a/pkg/server/api/connect/v1/schema.graphql +++ b/pkg/server/api/connect/v1/schema.graphql @@ -176,7 +176,7 @@ type Profile implements Node { source: String! state: ProfileState! additionalEmailAddresses: [EmailAddr!]! - kind: ProfileKind! + kind: ProfileKind position: String contractStartDate: Datetime contractEndDate: Datetime @@ -709,7 +709,7 @@ input CreateUserInput { emailAddress: EmailAddr! role: MembershipRole! additionalEmailAddresses: [EmailAddr!] - kind: ProfileKind! + kind: ProfileKind position: String contractStartDate: Datetime @goField(omittable: true) contractEndDate: Datetime @goField(omittable: true) @@ -734,7 +734,7 @@ input UpdateUserInput { id: ID! fullName: String! additionalEmailAddresses: [EmailAddr!] - kind: ProfileKind! + kind: ProfileKind position: String contractStartDate: Datetime @goField(omittable: true) contractEndDate: Datetime @goField(omittable: true) diff --git a/pkg/server/api/connect/v1/schema/schema.go b/pkg/server/api/connect/v1/schema/schema.go index 1ec49c784..feba62563 100644 --- a/pkg/server/api/connect/v1/schema/schema.go +++ b/pkg/server/api/connect/v1/schema/schema.go @@ -2594,7 +2594,7 @@ type Profile implements Node { source: String! state: ProfileState! additionalEmailAddresses: [EmailAddr!]! - kind: ProfileKind! + kind: ProfileKind position: String contractStartDate: Datetime contractEndDate: Datetime @@ -3127,7 +3127,7 @@ input CreateUserInput { emailAddress: EmailAddr! role: MembershipRole! additionalEmailAddresses: [EmailAddr!] - kind: ProfileKind! + kind: ProfileKind position: String contractStartDate: Datetime @goField(omittable: true) contractEndDate: Datetime @goField(omittable: true) @@ -3152,7 +3152,7 @@ input UpdateUserInput { id: ID! fullName: String! additionalEmailAddresses: [EmailAddr!] - kind: ProfileKind! + kind: ProfileKind position: String contractStartDate: Datetime @goField(omittable: true) contractEndDate: Datetime @goField(omittable: true) @@ -9404,9 +9404,9 @@ func (ec *executionContext) _Profile_kind(ctx context.Context, field graphql.Col return obj.Kind, nil }, nil, - ec.marshalNProfileKind2goᚗproboᚗincᚋproboᚋpkgᚋcoredataᚐMembershipProfileKind, - true, + ec.marshalOProfileKind2ᚖgoᚗproboᚗincᚋproboᚋpkgᚋcoredataᚐMembershipProfileKind, true, + false, ) } @@ -15295,7 +15295,7 @@ func (ec *executionContext) unmarshalInputCreateUserInput(ctx context.Context, o it.AdditionalEmailAddresses = data case "kind": ctx := graphql.WithPathContext(ctx, graphql.NewPathWithField("kind")) - data, err := ec.unmarshalNProfileKind2goᚗproboᚗincᚋproboᚋpkgᚋcoredataᚐMembershipProfileKind(ctx, v) + data, err := ec.unmarshalOProfileKind2ᚖgoᚗproboᚗincᚋproboᚋpkgᚋcoredataᚐMembershipProfileKind(ctx, v) if err != nil { return it, err } @@ -16246,7 +16246,7 @@ func (ec *executionContext) unmarshalInputUpdateUserInput(ctx context.Context, o it.AdditionalEmailAddresses = data case "kind": ctx := graphql.WithPathContext(ctx, graphql.NewPathWithField("kind")) - data, err := ec.unmarshalNProfileKind2goᚗproboᚗincᚋproboᚋpkgᚋcoredataᚐMembershipProfileKind(ctx, v) + data, err := ec.unmarshalOProfileKind2ᚖgoᚗproboᚗincᚋproboᚋpkgᚋcoredataᚐMembershipProfileKind(ctx, v) if err != nil { return it, err } @@ -18590,9 +18590,6 @@ func (ec *executionContext) _Profile(ctx context.Context, sel ast.SelectionSet, } case "kind": out.Values[i] = ec._Profile_kind(ctx, field, obj) - if out.Values[i] == graphql.Null { - atomic.AddUint32(&out.Invalids, 1) - } case "position": out.Values[i] = ec._Profile_position(ctx, field, obj) case "contractStartDate": @@ -21683,36 +21680,6 @@ func (ec *executionContext) marshalNProfileEdge2ᚖgoᚗproboᚗincᚋproboᚋpk return ec._ProfileEdge(ctx, sel, v) } -func (ec *executionContext) unmarshalNProfileKind2goᚗproboᚗincᚋproboᚋpkgᚋcoredataᚐMembershipProfileKind(ctx context.Context, v any) (coredata.MembershipProfileKind, error) { - tmp, err := graphql.UnmarshalString(v) - res := unmarshalNProfileKind2goᚗproboᚗincᚋproboᚋpkgᚋcoredataᚐMembershipProfileKind[tmp] - return res, graphql.ErrorOnPath(ctx, err) -} - -func (ec *executionContext) marshalNProfileKind2goᚗproboᚗincᚋproboᚋpkgᚋcoredataᚐMembershipProfileKind(ctx context.Context, sel ast.SelectionSet, v coredata.MembershipProfileKind) graphql.Marshaler { - _ = sel - res := graphql.MarshalString(marshalNProfileKind2goᚗproboᚗincᚋproboᚋpkgᚋcoredataᚐMembershipProfileKind[v]) - if res == graphql.Null { - if !graphql.HasFieldError(ctx, graphql.GetFieldContext(ctx)) { - graphql.AddErrorf(ctx, "the requested element is null which the schema does not allow") - } - } - return res -} - -var ( - unmarshalNProfileKind2goᚗproboᚗincᚋproboᚋpkgᚋcoredataᚐMembershipProfileKind = map[string]coredata.MembershipProfileKind{ - "EMPLOYEE": coredata.MembershipProfileKindEmployee, - "CONTRACTOR": coredata.MembershipProfileKindContractor, - "SERVICE_ACCOUNT": coredata.MembershipProfileKindServiceAccount, - } - marshalNProfileKind2goᚗproboᚗincᚋproboᚋpkgᚋcoredataᚐMembershipProfileKind = map[coredata.MembershipProfileKind]string{ - coredata.MembershipProfileKindEmployee: "EMPLOYEE", - coredata.MembershipProfileKindContractor: "CONTRACTOR", - coredata.MembershipProfileKindServiceAccount: "SERVICE_ACCOUNT", - } -) - func (ec *executionContext) unmarshalNProfileOrderField2goᚗproboᚗincᚋproboᚋpkgᚋcoredataᚐMembershipProfileOrderField(ctx context.Context, v any) (coredata.MembershipProfileOrderField, error) { tmp, err := graphql.UnmarshalString(v) res := unmarshalNProfileOrderField2goᚗproboᚗincᚋproboᚋpkgᚋcoredataᚐMembershipProfileOrderField[tmp] @@ -22718,6 +22685,38 @@ func (ec *executionContext) unmarshalOProfileFilter2ᚖgoᚗproboᚗincᚋprobo return &res, graphql.ErrorOnPath(ctx, err) } +func (ec *executionContext) unmarshalOProfileKind2ᚖgoᚗproboᚗincᚋproboᚋpkgᚋcoredataᚐMembershipProfileKind(ctx context.Context, v any) (*coredata.MembershipProfileKind, error) { + if v == nil { + return nil, nil + } + tmp, err := graphql.UnmarshalString(v) + res := unmarshalOProfileKind2ᚖgoᚗproboᚗincᚋproboᚋpkgᚋcoredataᚐMembershipProfileKind[tmp] + return &res, graphql.ErrorOnPath(ctx, err) +} + +func (ec *executionContext) marshalOProfileKind2ᚖgoᚗproboᚗincᚋproboᚋpkgᚋcoredataᚐMembershipProfileKind(ctx context.Context, sel ast.SelectionSet, v *coredata.MembershipProfileKind) graphql.Marshaler { + if v == nil { + return graphql.Null + } + _ = sel + _ = ctx + res := graphql.MarshalString(marshalOProfileKind2ᚖgoᚗproboᚗincᚋproboᚋpkgᚋcoredataᚐMembershipProfileKind[*v]) + return res +} + +var ( + unmarshalOProfileKind2ᚖgoᚗproboᚗincᚋproboᚋpkgᚋcoredataᚐMembershipProfileKind = map[string]coredata.MembershipProfileKind{ + "EMPLOYEE": coredata.MembershipProfileKindEmployee, + "CONTRACTOR": coredata.MembershipProfileKindContractor, + "SERVICE_ACCOUNT": coredata.MembershipProfileKindServiceAccount, + } + marshalOProfileKind2ᚖgoᚗproboᚗincᚋproboᚋpkgᚋcoredataᚐMembershipProfileKind = map[coredata.MembershipProfileKind]string{ + coredata.MembershipProfileKindEmployee: "EMPLOYEE", + coredata.MembershipProfileKindContractor: "CONTRACTOR", + coredata.MembershipProfileKindServiceAccount: "SERVICE_ACCOUNT", + } +) + func (ec *executionContext) unmarshalOProfileOrder2ᚖgoᚗproboᚗincᚋproboᚋpkgᚋserverᚋapiᚋconnectᚋv1ᚋtypesᚐProfileOrderBy(ctx context.Context, v any) (*types.ProfileOrderBy, error) { if v == nil { return nil, nil diff --git a/pkg/server/api/connect/v1/types/types.go b/pkg/server/api/connect/v1/types/types.go index c16f08f03..bb19266bf 100644 --- a/pkg/server/api/connect/v1/types/types.go +++ b/pkg/server/api/connect/v1/types/types.go @@ -124,15 +124,15 @@ type CreateSCIMConfigurationPayload struct { } type CreateUserInput struct { - OrganizationID gid.GID `json:"organizationId"` - FullName string `json:"fullName"` - EmailAddress mail.Addr `json:"emailAddress"` - Role coredata.MembershipRole `json:"role"` - AdditionalEmailAddresses []mail.Addr `json:"additionalEmailAddresses,omitempty"` - Kind coredata.MembershipProfileKind `json:"kind"` - Position *string `json:"position,omitempty"` - ContractStartDate graphql.Omittable[*time.Time] `json:"contractStartDate,omitempty"` - ContractEndDate graphql.Omittable[*time.Time] `json:"contractEndDate,omitempty"` + OrganizationID gid.GID `json:"organizationId"` + FullName string `json:"fullName"` + EmailAddress mail.Addr `json:"emailAddress"` + Role coredata.MembershipRole `json:"role"` + AdditionalEmailAddresses []mail.Addr `json:"additionalEmailAddresses,omitempty"` + Kind *coredata.MembershipProfileKind `json:"kind,omitempty"` + Position *string `json:"position,omitempty"` + ContractStartDate graphql.Omittable[*time.Time] `json:"contractStartDate,omitempty"` + ContractEndDate graphql.Omittable[*time.Time] `json:"contractEndDate,omitempty"` } type CreateUserPayload struct { @@ -307,23 +307,23 @@ type PersonalAPIKeyEdge struct { } type Profile struct { - ID gid.GID `json:"id"` - FullName string `json:"fullName"` - EmailAddress mail.Addr `json:"emailAddress"` - Source string `json:"source"` - State coredata.ProfileState `json:"state"` - AdditionalEmailAddresses []mail.Addr `json:"additionalEmailAddresses"` - Kind coredata.MembershipProfileKind `json:"kind"` - Position *string `json:"position,omitempty"` - ContractStartDate *time.Time `json:"contractStartDate,omitempty"` - ContractEndDate *time.Time `json:"contractEndDate,omitempty"` - CreatedAt time.Time `json:"createdAt"` - UpdatedAt time.Time `json:"updatedAt"` - Identity *Identity `json:"identity,omitempty"` - Organization *Organization `json:"organization,omitempty"` - Membership *Membership `json:"membership,omitempty"` - PendingInvitations *InvitationConnection `json:"pendingInvitations,omitempty"` - Permission bool `json:"permission"` + ID gid.GID `json:"id"` + FullName string `json:"fullName"` + EmailAddress mail.Addr `json:"emailAddress"` + Source string `json:"source"` + State coredata.ProfileState `json:"state"` + AdditionalEmailAddresses []mail.Addr `json:"additionalEmailAddresses"` + Kind *coredata.MembershipProfileKind `json:"kind,omitempty"` + Position *string `json:"position,omitempty"` + ContractStartDate *time.Time `json:"contractStartDate,omitempty"` + ContractEndDate *time.Time `json:"contractEndDate,omitempty"` + CreatedAt time.Time `json:"createdAt"` + UpdatedAt time.Time `json:"updatedAt"` + Identity *Identity `json:"identity,omitempty"` + Organization *Organization `json:"organization,omitempty"` + Membership *Membership `json:"membership,omitempty"` + PendingInvitations *InvitationConnection `json:"pendingInvitations,omitempty"` + Permission bool `json:"permission"` } func (Profile) IsNode() {} @@ -586,13 +586,13 @@ type UpdateSCIMBridgePayload struct { } type UpdateUserInput struct { - ID gid.GID `json:"id"` - FullName string `json:"fullName"` - AdditionalEmailAddresses []mail.Addr `json:"additionalEmailAddresses,omitempty"` - Kind coredata.MembershipProfileKind `json:"kind"` - Position *string `json:"position,omitempty"` - ContractStartDate graphql.Omittable[*time.Time] `json:"contractStartDate,omitempty"` - ContractEndDate graphql.Omittable[*time.Time] `json:"contractEndDate,omitempty"` + ID gid.GID `json:"id"` + FullName string `json:"fullName"` + AdditionalEmailAddresses []mail.Addr `json:"additionalEmailAddresses,omitempty"` + Kind *coredata.MembershipProfileKind `json:"kind,omitempty"` + Position *string `json:"position,omitempty"` + ContractStartDate graphql.Omittable[*time.Time] `json:"contractStartDate,omitempty"` + ContractEndDate graphql.Omittable[*time.Time] `json:"contractEndDate,omitempty"` } type UpdateUserPayload struct { diff --git a/pkg/server/api/console/v1/schema.graphql b/pkg/server/api/console/v1/schema.graphql index 3333edf33..1380d95df 100644 --- a/pkg/server/api/console/v1/schema.graphql +++ b/pkg/server/api/console/v1/schema.graphql @@ -1912,7 +1912,7 @@ type Profile implements Node { fullName: String! emailAddress: EmailAddr! additionalEmailAddresses: [EmailAddr!]! - kind: ProfileKind! + kind: ProfileKind position: String contractStartDate: Datetime contractEndDate: Datetime diff --git a/pkg/server/api/console/v1/schema/schema.go b/pkg/server/api/console/v1/schema/schema.go index b4a5416b1..592e0e4ad 100644 --- a/pkg/server/api/console/v1/schema/schema.go +++ b/pkg/server/api/console/v1/schema/schema.go @@ -12755,7 +12755,7 @@ type Profile implements Node { fullName: String! emailAddress: EmailAddr! additionalEmailAddresses: [EmailAddr!]! - kind: ProfileKind! + kind: ProfileKind position: String contractStartDate: Datetime contractEndDate: Datetime @@ -46590,9 +46590,9 @@ func (ec *executionContext) _Profile_kind(ctx context.Context, field graphql.Col return obj.Kind, nil }, nil, - ec.marshalNProfileKind2goᚗproboᚗincᚋproboᚋpkgᚋcoredataᚐMembershipProfileKind, - true, + ec.marshalOProfileKind2ᚖgoᚗproboᚗincᚋproboᚋpkgᚋcoredataᚐMembershipProfileKind, true, + false, ) } @@ -85393,9 +85393,6 @@ func (ec *executionContext) _Profile(ctx context.Context, sel ast.SelectionSet, } case "kind": out.Values[i] = ec._Profile_kind(ctx, field, obj) - if out.Values[i] == graphql.Null { - atomic.AddUint32(&out.Invalids, 1) - } case "position": out.Values[i] = ec._Profile_position(ctx, field, obj) case "contractStartDate": @@ -99383,36 +99380,6 @@ func (ec *executionContext) marshalNProfileEdge2ᚖgoᚗproboᚗincᚋproboᚋpk return ec._ProfileEdge(ctx, sel, v) } -func (ec *executionContext) unmarshalNProfileKind2goᚗproboᚗincᚋproboᚋpkgᚋcoredataᚐMembershipProfileKind(ctx context.Context, v any) (coredata.MembershipProfileKind, error) { - tmp, err := graphql.UnmarshalString(v) - res := unmarshalNProfileKind2goᚗproboᚗincᚋproboᚋpkgᚋcoredataᚐMembershipProfileKind[tmp] - return res, graphql.ErrorOnPath(ctx, err) -} - -func (ec *executionContext) marshalNProfileKind2goᚗproboᚗincᚋproboᚋpkgᚋcoredataᚐMembershipProfileKind(ctx context.Context, sel ast.SelectionSet, v coredata.MembershipProfileKind) graphql.Marshaler { - _ = sel - res := graphql.MarshalString(marshalNProfileKind2goᚗproboᚗincᚋproboᚋpkgᚋcoredataᚐMembershipProfileKind[v]) - if res == graphql.Null { - if !graphql.HasFieldError(ctx, graphql.GetFieldContext(ctx)) { - graphql.AddErrorf(ctx, "the requested element is null which the schema does not allow") - } - } - return res -} - -var ( - unmarshalNProfileKind2goᚗproboᚗincᚋproboᚋpkgᚋcoredataᚐMembershipProfileKind = map[string]coredata.MembershipProfileKind{ - "EMPLOYEE": coredata.MembershipProfileKindEmployee, - "CONTRACTOR": coredata.MembershipProfileKindContractor, - "SERVICE_ACCOUNT": coredata.MembershipProfileKindServiceAccount, - } - marshalNProfileKind2goᚗproboᚗincᚋproboᚋpkgᚋcoredataᚐMembershipProfileKind = map[coredata.MembershipProfileKind]string{ - coredata.MembershipProfileKindEmployee: "EMPLOYEE", - coredata.MembershipProfileKindContractor: "CONTRACTOR", - coredata.MembershipProfileKindServiceAccount: "SERVICE_ACCOUNT", - } -) - func (ec *executionContext) unmarshalNProfileOrderField2goᚗproboᚗincᚋproboᚋpkgᚋcoredataᚐMembershipProfileOrderField(ctx context.Context, v any) (coredata.MembershipProfileOrderField, error) { tmp, err := graphql.UnmarshalString(v) res := unmarshalNProfileOrderField2goᚗproboᚗincᚋproboᚋpkgᚋcoredataᚐMembershipProfileOrderField[tmp] @@ -103630,6 +103597,38 @@ func (ec *executionContext) unmarshalOProfileFilter2ᚖgoᚗproboᚗincᚋprobo return &res, graphql.ErrorOnPath(ctx, err) } +func (ec *executionContext) unmarshalOProfileKind2ᚖgoᚗproboᚗincᚋproboᚋpkgᚋcoredataᚐMembershipProfileKind(ctx context.Context, v any) (*coredata.MembershipProfileKind, error) { + if v == nil { + return nil, nil + } + tmp, err := graphql.UnmarshalString(v) + res := unmarshalOProfileKind2ᚖgoᚗproboᚗincᚋproboᚋpkgᚋcoredataᚐMembershipProfileKind[tmp] + return &res, graphql.ErrorOnPath(ctx, err) +} + +func (ec *executionContext) marshalOProfileKind2ᚖgoᚗproboᚗincᚋproboᚋpkgᚋcoredataᚐMembershipProfileKind(ctx context.Context, sel ast.SelectionSet, v *coredata.MembershipProfileKind) graphql.Marshaler { + if v == nil { + return graphql.Null + } + _ = sel + _ = ctx + res := graphql.MarshalString(marshalOProfileKind2ᚖgoᚗproboᚗincᚋproboᚋpkgᚋcoredataᚐMembershipProfileKind[*v]) + return res +} + +var ( + unmarshalOProfileKind2ᚖgoᚗproboᚗincᚋproboᚋpkgᚋcoredataᚐMembershipProfileKind = map[string]coredata.MembershipProfileKind{ + "EMPLOYEE": coredata.MembershipProfileKindEmployee, + "CONTRACTOR": coredata.MembershipProfileKindContractor, + "SERVICE_ACCOUNT": coredata.MembershipProfileKindServiceAccount, + } + marshalOProfileKind2ᚖgoᚗproboᚗincᚋproboᚋpkgᚋcoredataᚐMembershipProfileKind = map[coredata.MembershipProfileKind]string{ + coredata.MembershipProfileKindEmployee: "EMPLOYEE", + coredata.MembershipProfileKindContractor: "CONTRACTOR", + coredata.MembershipProfileKindServiceAccount: "SERVICE_ACCOUNT", + } +) + func (ec *executionContext) unmarshalOProfileOrder2ᚖgoᚗproboᚗincᚋproboᚋpkgᚋserverᚋapiᚋconsoleᚋv1ᚋtypesᚐProfileOrderBy(ctx context.Context, v any) (*types.ProfileOrderBy, error) { if v == nil { return nil, nil diff --git a/pkg/server/api/console/v1/types/types.go b/pkg/server/api/console/v1/types/types.go index 2be555ec3..5091f76d3 100644 --- a/pkg/server/api/console/v1/types/types.go +++ b/pkg/server/api/console/v1/types/types.go @@ -1620,17 +1620,17 @@ type ProcessingActivityFilter struct { } type Profile struct { - ID gid.GID `json:"id"` - FullName string `json:"fullName"` - EmailAddress mail.Addr `json:"emailAddress"` - AdditionalEmailAddresses []mail.Addr `json:"additionalEmailAddresses"` - Kind coredata.MembershipProfileKind `json:"kind"` - Position *string `json:"position,omitempty"` - ContractStartDate *time.Time `json:"contractStartDate,omitempty"` - ContractEndDate *time.Time `json:"contractEndDate,omitempty"` - CreatedAt time.Time `json:"createdAt"` - UpdatedAt time.Time `json:"updatedAt"` - Permission bool `json:"permission"` + ID gid.GID `json:"id"` + FullName string `json:"fullName"` + EmailAddress mail.Addr `json:"emailAddress"` + AdditionalEmailAddresses []mail.Addr `json:"additionalEmailAddresses"` + Kind *coredata.MembershipProfileKind `json:"kind,omitempty"` + Position *string `json:"position,omitempty"` + ContractStartDate *time.Time `json:"contractStartDate,omitempty"` + ContractEndDate *time.Time `json:"contractEndDate,omitempty"` + CreatedAt time.Time `json:"createdAt"` + UpdatedAt time.Time `json:"updatedAt"` + Permission bool `json:"permission"` } func (Profile) IsNode() {} diff --git a/pkg/server/api/mcp/v1/specification.yaml b/pkg/server/api/mcp/v1/specification.yaml index 2b099c3d0..e2c0ae1a6 100644 --- a/pkg/server/api/mcp/v1/specification.yaml +++ b/pkg/server/api/mcp/v1/specification.yaml @@ -151,7 +151,9 @@ components: $ref: "#/components/schemas/EmailAddress" description: Additional email addresses kind: - $ref: "#/components/schemas/ProfileKind" + anyOf: + - $ref: "#/components/schemas/ProfileKind" + - type: "null" description: Profile kind position: type: @@ -828,7 +830,9 @@ components: $ref: "#/components/schemas/EmailAddress" description: Additional email addresses kind: - $ref: "#/components/schemas/ProfileKind" + anyOf: + - $ref: "#/components/schemas/ProfileKind" + - type: "null" description: User kind position: type: ["string", "null"] @@ -893,7 +897,9 @@ components: - type: "null" description: Additional email addresses kind: - $ref: "#/components/schemas/ProfileKind" + anyOf: + - $ref: "#/components/schemas/ProfileKind" + - type: "null" description: User kind position: type: ["string", "null"] diff --git a/pkg/server/api/mcp/v1/types/types.go b/pkg/server/api/mcp/v1/types/types.go index 9f5a2702d..5be62dd15 100644 --- a/pkg/server/api/mcp/v1/types/types.go +++ b/pkg/server/api/mcp/v1/types/types.go @@ -61,8 +61,8 @@ var ( CancelSignatureRequestToolOutputSchema = mcp.MustUnmarshalSchema(`{"type":"object","properties":{"deleted_document_version_signature_id":{"type":"string","format":"string"}},"required":["deleted_document_version_signature_id"]}`) CreateDraftDocumentVersionToolInputSchema = mcp.MustUnmarshalSchema(`{"type":"object","properties":{"document_id":{"type":"string","format":"string"}},"required":["document_id"]}`) CreateDraftDocumentVersionToolOutputSchema = mcp.MustUnmarshalSchema(`{"type":"object","properties":{"document_version":{"type":"object","properties":{"approver_ids":{"type":"array","items":{"type":"string","format":"string"},"description":"Approver IDs"},"changelog":{"type":"string","description":"Changelog"},"classification":{"type":"string","enum":["PUBLIC","INTERNAL","CONFIDENTIAL","SECRET"]},"content":{"type":"string","description":"Document content"},"created_at":{"type":"string","description":"Creation timestamp","format":"date-time"},"document_id":{"type":"string","format":"string"},"id":{"type":"string","format":"string"},"organization_id":{"type":"string","format":"string"},"published_at":{"type":["string","null"],"description":"Published timestamp","format":"date-time"},"status":{"type":"string","enum":["DRAFT","PUBLISHED"]},"title":{"type":"string","description":"Document version title"},"updated_at":{"type":"string","description":"Update timestamp","format":"date-time"},"version_number":{"type":"integer","description":"Version number"}},"required":["id","organization_id","document_id","title","approver_ids","version_number","classification","content","changelog","status","created_at","updated_at"]}},"required":["document_version"]}`) - CreateUserToolInputSchema = mcp.MustUnmarshalSchema(`{"type":"object","properties":{"additional_email_addresses":{"type":"array","items":{"type":"string","format":"string"},"description":"Additional email addresses"},"contract_end_date":{"type":["string","null"],"description":"Contract end date","format":"date-time"},"contract_start_date":{"type":["string","null"],"description":"Contract start date","format":"date-time"},"email_address":{"type":"string","format":"string"},"full_name":{"type":"string","description":"Full name"},"kind":{"type":"string","enum":["EMPLOYEE","CONTRACTOR","SERVICE_ACCOUNT"]},"organization_id":{"type":"string","format":"string"},"position":{"type":["string","null"],"description":"Position"},"role":{"type":"string","enum":["OWNER","ADMIN","EMPLOYEE","VIEWER","AUDITOR"]}},"required":["organization_id","full_name","email_address","role","kind"]}`) - CreateUserToolOutputSchema = mcp.MustUnmarshalSchema(`{"type":"object","properties":{"user":{"type":"object","properties":{"additional_email_addresses":{"type":"array","items":{"type":"string","format":"string"},"description":"Additional email addresses"},"contract_end_date":{"type":["string","null"],"description":"Contract end date","format":"date-time"},"contract_start_date":{"type":["string","null"],"description":"Contract start date","format":"date-time"},"created_at":{"type":"string","description":"Creation timestamp","format":"date-time"},"email_address":{"type":"string","format":"string"},"full_name":{"type":"string","description":"Full name"},"id":{"type":"string","format":"string"},"kind":{"type":"string","enum":["EMPLOYEE","CONTRACTOR","SERVICE_ACCOUNT"]},"organization_id":{"type":"string","format":"string"},"position":{"type":["string","null"],"description":"Position"},"updated_at":{"type":"string","description":"Update timestamp","format":"date-time"}},"required":["id","organization_id","full_name","email_address","additional_email_addresses","kind","created_at","updated_at"]}},"required":["user"]}`) + CreateUserToolInputSchema = mcp.MustUnmarshalSchema(`{"type":"object","properties":{"additional_email_addresses":{"type":"array","items":{"type":"string","format":"string"},"description":"Additional email addresses"},"contract_end_date":{"type":["string","null"],"description":"Contract end date","format":"date-time"},"contract_start_date":{"type":["string","null"],"description":"Contract start date","format":"date-time"},"email_address":{"type":"string","format":"string"},"full_name":{"type":"string","description":"Full name"},"kind":{"description":"User kind","anyOf":[{"type":"string","enum":["EMPLOYEE","CONTRACTOR","SERVICE_ACCOUNT"]},{"type":"null"}]},"organization_id":{"type":"string","format":"string"},"position":{"type":["string","null"],"description":"Position"},"role":{"type":"string","enum":["OWNER","ADMIN","EMPLOYEE","VIEWER","AUDITOR"]}},"required":["organization_id","full_name","email_address","role","kind"]}`) + CreateUserToolOutputSchema = mcp.MustUnmarshalSchema(`{"type":"object","properties":{"user":{"type":"object","properties":{"additional_email_addresses":{"type":"array","items":{"type":"string","format":"string"},"description":"Additional email addresses"},"contract_end_date":{"type":["string","null"],"description":"Contract end date","format":"date-time"},"contract_start_date":{"type":["string","null"],"description":"Contract start date","format":"date-time"},"created_at":{"type":"string","description":"Creation timestamp","format":"date-time"},"email_address":{"type":"string","format":"string"},"full_name":{"type":"string","description":"Full name"},"id":{"type":"string","format":"string"},"kind":{"description":"Profile kind","anyOf":[{"type":"string","enum":["EMPLOYEE","CONTRACTOR","SERVICE_ACCOUNT"]},{"type":"null"}]},"organization_id":{"type":"string","format":"string"},"position":{"type":["string","null"],"description":"Position"},"updated_at":{"type":"string","description":"Update timestamp","format":"date-time"}},"required":["id","organization_id","full_name","email_address","additional_email_addresses","kind","created_at","updated_at"]}},"required":["user"]}`) DeleteApplicabilityStatementToolInputSchema = mcp.MustUnmarshalSchema(`{"type":"object","properties":{"id":{"type":"string","format":"string"}},"required":["id"]}`) DeleteApplicabilityStatementToolOutputSchema = mcp.MustUnmarshalSchema(`{"type":"object","properties":{"deleted_applicability_statement_id":{"type":"string","format":"string"}},"required":["deleted_applicability_statement_id"]}`) DeleteDataProtectionImpactAssessmentToolInputSchema = mcp.MustUnmarshalSchema(`{"type":"object","properties":{"id":{"type":"string","format":"string"}},"required":["id"]}`) @@ -132,7 +132,7 @@ var ( GetTransferImpactAssessmentToolInputSchema = mcp.MustUnmarshalSchema(`{"type":"object","properties":{"id":{"type":"string","format":"string"}},"required":["id"]}`) GetTransferImpactAssessmentToolOutputSchema = mcp.MustUnmarshalSchema(`{"type":"object","properties":{"transfer_impact_assessment":{"type":"object","properties":{"created_at":{"type":"string","format":"date-time"},"data_subjects":{"type":["string","null"]},"id":{"type":"string","format":"string"},"legal_mechanism":{"type":["string","null"]},"local_law_risk":{"type":["string","null"]},"organization_id":{"type":"string","format":"string"},"processing_activity_id":{"type":"string","format":"string"},"supplementary_measures":{"type":["string","null"]},"transfer":{"type":["string","null"]},"updated_at":{"type":"string","format":"date-time"}},"required":["id","organization_id","processing_activity_id","created_at","updated_at"]}},"required":["transfer_impact_assessment"]}`) GetUserToolInputSchema = mcp.MustUnmarshalSchema(`{"type":"object","properties":{"id":{"type":"string","format":"string"}},"required":["id"]}`) - GetUserToolOutputSchema = mcp.MustUnmarshalSchema(`{"type":"object","properties":{"user":{"type":"object","properties":{"additional_email_addresses":{"type":"array","items":{"type":"string","format":"string"},"description":"Additional email addresses"},"contract_end_date":{"type":["string","null"],"description":"Contract end date","format":"date-time"},"contract_start_date":{"type":["string","null"],"description":"Contract start date","format":"date-time"},"created_at":{"type":"string","description":"Creation timestamp","format":"date-time"},"email_address":{"type":"string","format":"string"},"full_name":{"type":"string","description":"Full name"},"id":{"type":"string","format":"string"},"kind":{"type":"string","enum":["EMPLOYEE","CONTRACTOR","SERVICE_ACCOUNT"]},"organization_id":{"type":"string","format":"string"},"position":{"type":["string","null"],"description":"Position"},"updated_at":{"type":"string","description":"Update timestamp","format":"date-time"}},"required":["id","organization_id","full_name","email_address","additional_email_addresses","kind","created_at","updated_at"]}},"required":["user"]}`) + GetUserToolOutputSchema = mcp.MustUnmarshalSchema(`{"type":"object","properties":{"user":{"type":"object","properties":{"additional_email_addresses":{"type":"array","items":{"type":"string","format":"string"},"description":"Additional email addresses"},"contract_end_date":{"type":["string","null"],"description":"Contract end date","format":"date-time"},"contract_start_date":{"type":["string","null"],"description":"Contract start date","format":"date-time"},"created_at":{"type":"string","description":"Creation timestamp","format":"date-time"},"email_address":{"type":"string","format":"string"},"full_name":{"type":"string","description":"Full name"},"id":{"type":"string","format":"string"},"kind":{"description":"Profile kind","anyOf":[{"type":"string","enum":["EMPLOYEE","CONTRACTOR","SERVICE_ACCOUNT"]},{"type":"null"}]},"organization_id":{"type":"string","format":"string"},"position":{"type":["string","null"],"description":"Position"},"updated_at":{"type":"string","description":"Update timestamp","format":"date-time"}},"required":["id","organization_id","full_name","email_address","additional_email_addresses","kind","created_at","updated_at"]}},"required":["user"]}`) InviteUserToolInputSchema = mcp.MustUnmarshalSchema(`{"type":"object","properties":{"organization_id":{"type":"string","format":"string"},"profile_id":{"type":"string","format":"string"}},"required":["organization_id","profile_id"]}`) InviteUserToolOutputSchema = mcp.MustUnmarshalSchema(`{"type":"object","properties":{"invitation_id":{"type":"string","format":"string"}},"required":["invitation_id"]}`) LinkControlToolInputSchema = mcp.MustUnmarshalSchema(`{"type":"object","properties":{"control_id":{"type":"string","format":"string"},"resource_id":{"type":"string","format":"string"}},"required":["control_id","resource_id"]}`) @@ -184,7 +184,7 @@ var ( ListMeasuresToolInputSchema = mcp.MustUnmarshalSchema(`{"type":"object","properties":{"cursor":{"type":"string","format":"string"},"filter":{"type":"object","properties":{"query":{"type":"string","description":"Search query"},"state":{"type":"string","enum":["NOT_STARTED","IN_PROGRESS","NOT_APPLICABLE","IMPLEMENTED"]}}},"order_by":{"type":"object","properties":{"direction":{"type":"string","enum":["ASC","DESC"]},"field":{"type":"string","enum":["CREATED_AT","NAME"]}},"required":["field","direction"]},"organization_id":{"type":"string","format":"string"},"size":{"type":"integer","description":"Page size"}},"required":["organization_id"]}`) ListMeasuresToolOutputSchema = mcp.MustUnmarshalSchema(`{"type":"object","properties":{"measures":{"type":"array","items":{"type":"object","properties":{"category":{"type":"string","description":"Measure category"},"created_at":{"type":"string","description":"Creation timestamp","format":"date-time"},"description":{"type":["string","null"],"description":"Measure description"},"id":{"type":"string","format":"string"},"name":{"type":"string","description":"Measure name"},"state":{"type":"string","enum":["NOT_STARTED","IN_PROGRESS","NOT_APPLICABLE","IMPLEMENTED"]},"updated_at":{"type":"string","description":"Update timestamp","format":"date-time"}},"required":["id","category","name","state","created_at","updated_at"]}},"next_cursor":{"type":"string","format":"string"}},"required":["measures"]}`) ListMeetingAttendeesToolInputSchema = mcp.MustUnmarshalSchema(`{"type":"object","properties":{"meeting_id":{"type":"string","format":"string"}},"required":["meeting_id"]}`) - ListMeetingAttendeesToolOutputSchema = mcp.MustUnmarshalSchema(`{"type":"object","properties":{"attendees":{"type":"array","items":{"type":"object","properties":{"additional_email_addresses":{"type":"array","items":{"type":"string","format":"string"},"description":"Additional email addresses"},"contract_end_date":{"type":["string","null"],"description":"Contract end date","format":"date-time"},"contract_start_date":{"type":["string","null"],"description":"Contract start date","format":"date-time"},"created_at":{"type":"string","description":"Creation timestamp","format":"date-time"},"email_address":{"type":"string","format":"string"},"full_name":{"type":"string","description":"Full name"},"id":{"type":"string","format":"string"},"kind":{"type":"string","enum":["EMPLOYEE","CONTRACTOR","SERVICE_ACCOUNT"]},"organization_id":{"type":"string","format":"string"},"position":{"type":["string","null"],"description":"Position"},"updated_at":{"type":"string","description":"Update timestamp","format":"date-time"}},"required":["id","organization_id","full_name","email_address","additional_email_addresses","kind","created_at","updated_at"]},"description":"List of attendee profiles"}},"required":["attendees"]}`) + ListMeetingAttendeesToolOutputSchema = mcp.MustUnmarshalSchema(`{"type":"object","properties":{"attendees":{"type":"array","items":{"type":"object","properties":{"additional_email_addresses":{"type":"array","items":{"type":"string","format":"string"},"description":"Additional email addresses"},"contract_end_date":{"type":["string","null"],"description":"Contract end date","format":"date-time"},"contract_start_date":{"type":["string","null"],"description":"Contract start date","format":"date-time"},"created_at":{"type":"string","description":"Creation timestamp","format":"date-time"},"email_address":{"type":"string","format":"string"},"full_name":{"type":"string","description":"Full name"},"id":{"type":"string","format":"string"},"kind":{"description":"Profile kind","anyOf":[{"type":"string","enum":["EMPLOYEE","CONTRACTOR","SERVICE_ACCOUNT"]},{"type":"null"}]},"organization_id":{"type":"string","format":"string"},"position":{"type":["string","null"],"description":"Position"},"updated_at":{"type":"string","description":"Update timestamp","format":"date-time"}},"required":["id","organization_id","full_name","email_address","additional_email_addresses","kind","created_at","updated_at"]},"description":"List of attendee profiles"}},"required":["attendees"]}`) ListMeetingsToolInputSchema = mcp.MustUnmarshalSchema(`{"type":"object","properties":{"cursor":{"type":"string","format":"string"},"order_by":{"type":"object","properties":{"direction":{"type":"string","enum":["ASC","DESC"]},"field":{"type":"string","enum":["CREATED_AT","DATE","NAME"]}},"required":["field","direction"]},"organization_id":{"type":"string","format":"string"},"size":{"type":"integer","description":"Page size"}},"required":["organization_id"]}`) ListMeetingsToolOutputSchema = mcp.MustUnmarshalSchema(`{"type":"object","properties":{"meetings":{"type":"array","items":{"type":"object","properties":{"created_at":{"type":"string","description":"Creation timestamp","format":"date-time"},"date":{"type":"string","description":"Meeting date","format":"date-time"},"id":{"type":"string","format":"string"},"minutes":{"description":"Meeting minutes","anyOf":[{"type":"string","description":"Meeting minutes"},{"type":"null","description":"No minutes"}]},"name":{"type":"string","description":"Meeting name"},"updated_at":{"type":"string","description":"Update timestamp","format":"date-time"}},"required":["id","name","date","created_at","updated_at"]},"description":"List of meetings"},"next_cursor":{"description":"Next page cursor","anyOf":[{"type":"string","format":"string"},{"type":"null"}]}},"required":["meetings"]}`) ListNonconformitiesToolInputSchema = mcp.MustUnmarshalSchema(`{"type":"object","properties":{"cursor":{"type":"string","format":"string"},"filter":{"type":"object","properties":{"snapshot_id":{"description":"Filter by snapshot ID. Defaults to null, which returns only nonconformities with no snapshot (current live data). Pass a specific snapshot ID to retrieve nonconformities as they were at that snapshot.","default":null,"anyOf":[{"type":"string","format":"string"},{"type":"null"}]}}},"order_by":{"type":"object","properties":{"direction":{"type":"string","enum":["ASC","DESC"]},"field":{"type":"string","enum":["CREATED_AT","REFERENCE_ID","DATE_IDENTIFIED","DUE_DATE","STATUS"]}},"required":["field","direction"]},"organization_id":{"type":"string","format":"string"},"size":{"type":"integer","description":"Page size"}},"required":["organization_id"]}`) @@ -208,7 +208,7 @@ var ( ListTransferImpactAssessmentsToolInputSchema = mcp.MustUnmarshalSchema(`{"type":"object","properties":{"cursor":{"type":"string","format":"string"},"filter":{"type":"object","properties":{"snapshot_id":{"description":"Filter by snapshot ID. Defaults to null, which returns only TIAs with no snapshot (current live data). Pass a specific snapshot ID to retrieve TIAs as they were at that snapshot.","default":null,"anyOf":[{"type":"string","format":"string"},{"type":"null"}]}}},"order_by":{"type":"object","properties":{"direction":{"type":"string","enum":["ASC","DESC"]},"field":{"type":"string","enum":["CREATED_AT"]}},"required":["field","direction"]},"organization_id":{"type":"string","format":"string"},"size":{"type":"integer"}},"required":["organization_id"]}`) ListTransferImpactAssessmentsToolOutputSchema = mcp.MustUnmarshalSchema(`{"type":"object","properties":{"next_cursor":{"type":"string","format":"string"},"transfer_impact_assessments":{"type":"array","items":{"type":"object","properties":{"created_at":{"type":"string","format":"date-time"},"data_subjects":{"type":["string","null"]},"id":{"type":"string","format":"string"},"legal_mechanism":{"type":["string","null"]},"local_law_risk":{"type":["string","null"]},"organization_id":{"type":"string","format":"string"},"processing_activity_id":{"type":"string","format":"string"},"supplementary_measures":{"type":["string","null"]},"transfer":{"type":["string","null"]},"updated_at":{"type":"string","format":"date-time"}},"required":["id","organization_id","processing_activity_id","created_at","updated_at"]}}},"required":["transfer_impact_assessments"]}`) ListUsersToolInputSchema = mcp.MustUnmarshalSchema(`{"type":"object","properties":{"cursor":{"type":"string","format":"string"},"filter":{"type":"object","properties":{"exclude_contract_ended":{"type":"boolean","description":"Exclude users with ended contracts"}}},"order_by":{"type":"object","properties":{"direction":{"type":"string","enum":["ASC","DESC"]},"field":{"type":"string","enum":["CREATED_AT","FULL_NAME","KIND"]}},"required":["field","direction"]},"organization_id":{"type":"string","format":"string"},"size":{"type":"integer","description":"Page size"}},"required":["organization_id"]}`) - ListUsersToolOutputSchema = mcp.MustUnmarshalSchema(`{"type":"object","properties":{"next_cursor":{"type":"string","format":"string"},"users":{"type":"array","items":{"type":"object","properties":{"additional_email_addresses":{"type":"array","items":{"type":"string","format":"string"},"description":"Additional email addresses"},"contract_end_date":{"type":["string","null"],"description":"Contract end date","format":"date-time"},"contract_start_date":{"type":["string","null"],"description":"Contract start date","format":"date-time"},"created_at":{"type":"string","description":"Creation timestamp","format":"date-time"},"email_address":{"type":"string","format":"string"},"full_name":{"type":"string","description":"Full name"},"id":{"type":"string","format":"string"},"kind":{"type":"string","enum":["EMPLOYEE","CONTRACTOR","SERVICE_ACCOUNT"]},"organization_id":{"type":"string","format":"string"},"position":{"type":["string","null"],"description":"Position"},"updated_at":{"type":"string","description":"Update timestamp","format":"date-time"}},"required":["id","organization_id","full_name","email_address","additional_email_addresses","kind","created_at","updated_at"]}}},"required":["users"]}`) + ListUsersToolOutputSchema = mcp.MustUnmarshalSchema(`{"type":"object","properties":{"next_cursor":{"type":"string","format":"string"},"users":{"type":"array","items":{"type":"object","properties":{"additional_email_addresses":{"type":"array","items":{"type":"string","format":"string"},"description":"Additional email addresses"},"contract_end_date":{"type":["string","null"],"description":"Contract end date","format":"date-time"},"contract_start_date":{"type":["string","null"],"description":"Contract start date","format":"date-time"},"created_at":{"type":"string","description":"Creation timestamp","format":"date-time"},"email_address":{"type":"string","format":"string"},"full_name":{"type":"string","description":"Full name"},"id":{"type":"string","format":"string"},"kind":{"description":"Profile kind","anyOf":[{"type":"string","enum":["EMPLOYEE","CONTRACTOR","SERVICE_ACCOUNT"]},{"type":"null"}]},"organization_id":{"type":"string","format":"string"},"position":{"type":["string","null"],"description":"Position"},"updated_at":{"type":"string","description":"Update timestamp","format":"date-time"}},"required":["id","organization_id","full_name","email_address","additional_email_addresses","kind","created_at","updated_at"]}}},"required":["users"]}`) ListVendorRiskAssessmentsToolInputSchema = mcp.MustUnmarshalSchema(`{"type":"object","properties":{"cursor":{"type":"string","format":"string"},"order_by":{"type":"object","properties":{"direction":{"type":"string","enum":["ASC","DESC"]},"field":{"type":"string","enum":["CREATED_AT","EXPIRES_AT"]}},"required":["field","direction"]},"size":{"type":"integer","description":"Page size"},"vendor_id":{"type":"string","format":"string"}},"required":["vendor_id"]}`) ListVendorRiskAssessmentsToolOutputSchema = mcp.MustUnmarshalSchema(`{"type":"object","properties":{"next_cursor":{"type":"string","format":"string"},"vendor_risk_assessments":{"type":"array","items":{"type":"object","properties":{"business_impact":{"type":"string","enum":["LOW","MEDIUM","HIGH","CRITICAL"]},"created_at":{"type":"string","description":"Creation timestamp","format":"date-time"},"data_sensitivity":{"type":"string","enum":["NONE","LOW","MEDIUM","HIGH","CRITICAL"]},"expires_at":{"type":"string","description":"Expiration timestamp","format":"date-time"},"id":{"type":"string","format":"string"},"notes":{"type":["string","null"],"description":"Notes"},"organization_id":{"type":"string","format":"string"},"snapshot_id":{"description":"Snapshot ID","anyOf":[{"type":"string","format":"string"},{"type":"null"}]},"updated_at":{"type":"string","description":"Update timestamp","format":"date-time"},"vendor_id":{"type":"string","format":"string"}},"required":["id","organization_id","vendor_id","expires_at","data_sensitivity","business_impact","created_at","updated_at"]}}},"required":["vendor_risk_assessments"]}`) ListVendorsToolInputSchema = mcp.MustUnmarshalSchema(`{"type":"object","properties":{"cursor":{"type":"string","format":"string"},"filter":{"type":"object","properties":{"snapshot_id":{"description":"Filter by snapshot ID. Defaults to null, which returns only vendors with no snapshot (current live data). Pass a specific snapshot ID to retrieve vendors as they were at that snapshot.","default":null,"anyOf":[{"type":"string","format":"string"},{"type":"null"}]}}},"order_by":{"type":"object","properties":{"direction":{"type":"string","enum":["ASC","DESC"]},"field":{"type":"string","enum":["CREATED_AT","UPDATED_AT","NAME"]}},"required":["field","direction"]},"organization_id":{"type":"string","format":"string"},"size":{"type":"integer","description":"Page size"}},"required":["organization_id"]}`) @@ -269,8 +269,8 @@ var ( UpdateTaskToolOutputSchema = mcp.MustUnmarshalSchema(`{"type":"object","properties":{"task":{"type":"object","properties":{"assigned_to_id":{"description":"Assigned to person ID","anyOf":[{"type":"string","format":"string"},{"type":"null","description":"Not assigned"}]},"created_at":{"type":"string","description":"Creation timestamp","format":"date-time"},"deadline":{"description":"Deadline","anyOf":[{"type":"string","description":"Deadline","format":"date-time"},{"type":"null","description":"No deadline"}]},"description":{"description":"Task description","anyOf":[{"type":"string","description":"Task description"},{"type":"null","description":"No description"}]},"id":{"type":"string","format":"string"},"measure_id":{"description":"Measure ID","anyOf":[{"type":"string","format":"string"},{"type":"null","description":"No measure"}]},"name":{"type":"string","description":"Task name"},"organization_id":{"type":"string","format":"string"},"state":{"type":"string","enum":["TODO","DONE"]},"time_estimate":{"description":"Time estimate","anyOf":[{"type":"string","description":"A duration"},{"type":"null","description":"No time estimate"}]},"updated_at":{"type":"string","description":"Update timestamp","format":"date-time"}},"required":["id","organization_id","name","state","created_at","updated_at"]}},"required":["task"]}`) UpdateTransferImpactAssessmentToolInputSchema = mcp.MustUnmarshalSchema(`{"type":"object","properties":{"data_subjects":{"type":["string","null"]},"id":{"type":"string","format":"string"},"legal_mechanism":{"type":["string","null"]},"local_law_risk":{"type":["string","null"]},"supplementary_measures":{"type":["string","null"]},"transfer":{"type":["string","null"]}},"required":["id"]}`) UpdateTransferImpactAssessmentToolOutputSchema = mcp.MustUnmarshalSchema(`{"type":"object","properties":{"transfer_impact_assessment":{"type":"object","properties":{"created_at":{"type":"string","format":"date-time"},"data_subjects":{"type":["string","null"]},"id":{"type":"string","format":"string"},"legal_mechanism":{"type":["string","null"]},"local_law_risk":{"type":["string","null"]},"organization_id":{"type":"string","format":"string"},"processing_activity_id":{"type":"string","format":"string"},"supplementary_measures":{"type":["string","null"]},"transfer":{"type":["string","null"]},"updated_at":{"type":"string","format":"date-time"}},"required":["id","organization_id","processing_activity_id","created_at","updated_at"]}},"required":["transfer_impact_assessment"]}`) - UpdateUserToolInputSchema = mcp.MustUnmarshalSchema(`{"type":"object","properties":{"additional_email_addresses":{"description":"Additional email addresses","anyOf":[{"type":"array","items":{"type":"string","format":"string"}},{"type":"null"}]},"contract_end_date":{"type":["string","null"],"description":"Contract end date","format":"date-time"},"contract_start_date":{"type":["string","null"],"description":"Contract start date","format":"date-time"},"full_name":{"type":"string","description":"Full name"},"id":{"type":"string","format":"string"},"kind":{"type":"string","enum":["EMPLOYEE","CONTRACTOR","SERVICE_ACCOUNT"]},"position":{"type":["string","null"],"description":"Position"}},"required":["id","full_name","kind"]}`) - UpdateUserToolOutputSchema = mcp.MustUnmarshalSchema(`{"type":"object","properties":{"user":{"type":"object","properties":{"additional_email_addresses":{"type":"array","items":{"type":"string","format":"string"},"description":"Additional email addresses"},"contract_end_date":{"type":["string","null"],"description":"Contract end date","format":"date-time"},"contract_start_date":{"type":["string","null"],"description":"Contract start date","format":"date-time"},"created_at":{"type":"string","description":"Creation timestamp","format":"date-time"},"email_address":{"type":"string","format":"string"},"full_name":{"type":"string","description":"Full name"},"id":{"type":"string","format":"string"},"kind":{"type":"string","enum":["EMPLOYEE","CONTRACTOR","SERVICE_ACCOUNT"]},"organization_id":{"type":"string","format":"string"},"position":{"type":["string","null"],"description":"Position"},"updated_at":{"type":"string","description":"Update timestamp","format":"date-time"}},"required":["id","organization_id","full_name","email_address","additional_email_addresses","kind","created_at","updated_at"]}},"required":["user"]}`) + UpdateUserToolInputSchema = mcp.MustUnmarshalSchema(`{"type":"object","properties":{"additional_email_addresses":{"description":"Additional email addresses","anyOf":[{"type":"array","items":{"type":"string","format":"string"}},{"type":"null"}]},"contract_end_date":{"type":["string","null"],"description":"Contract end date","format":"date-time"},"contract_start_date":{"type":["string","null"],"description":"Contract start date","format":"date-time"},"full_name":{"type":"string","description":"Full name"},"id":{"type":"string","format":"string"},"kind":{"description":"User kind","anyOf":[{"type":"string","enum":["EMPLOYEE","CONTRACTOR","SERVICE_ACCOUNT"]},{"type":"null"}]},"position":{"type":["string","null"],"description":"Position"}},"required":["id","full_name","kind"]}`) + UpdateUserToolOutputSchema = mcp.MustUnmarshalSchema(`{"type":"object","properties":{"user":{"type":"object","properties":{"additional_email_addresses":{"type":"array","items":{"type":"string","format":"string"},"description":"Additional email addresses"},"contract_end_date":{"type":["string","null"],"description":"Contract end date","format":"date-time"},"contract_start_date":{"type":["string","null"],"description":"Contract start date","format":"date-time"},"created_at":{"type":"string","description":"Creation timestamp","format":"date-time"},"email_address":{"type":"string","format":"string"},"full_name":{"type":"string","description":"Full name"},"id":{"type":"string","format":"string"},"kind":{"description":"Profile kind","anyOf":[{"type":"string","enum":["EMPLOYEE","CONTRACTOR","SERVICE_ACCOUNT"]},{"type":"null"}]},"organization_id":{"type":"string","format":"string"},"position":{"type":["string","null"],"description":"Position"},"updated_at":{"type":"string","description":"Update timestamp","format":"date-time"}},"required":["id","organization_id","full_name","email_address","additional_email_addresses","kind","created_at","updated_at"]}},"required":["user"]}`) UpdateVendorToolInputSchema = mcp.MustUnmarshalSchema(`{"type":"object","properties":{"business_associate_agreement_url":{"type":"string","description":"Business associate agreement URL"},"business_owner_id":{"type":"string","format":"string"},"category":{"type":"string","description":"Vendor category","enum":["ANALYTICS","CLOUD_MONITORING","CLOUD_PROVIDER","COLLABORATION","CUSTOMER_SUPPORT","DATA_STORAGE_AND_PROCESSING","DOCUMENT_MANAGEMENT","EMPLOYEE_MANAGEMENT","ENGINEERING","FINANCE","IDENTITY_PROVIDER","IT","MARKETING","OFFICE_OPERATIONS","OTHER","PASSWORD_MANAGEMENT","PRODUCT_AND_DESIGN","PROFESSIONAL_SERVICES","RECRUITING","SALES","SECURITY","VERSION_CONTROL"]},"certifications":{"type":"array","items":{"type":"string"},"description":"Certifications"},"countries":{"type":"array","items":{"type":"string"},"description":"Countries (ISO 3166-1 alpha-2 country codes)"},"data_processing_agreement_url":{"type":"string","description":"Data processing agreement URL"},"description":{"type":"string","description":"Vendor description"},"headquarter_address":{"type":"string","description":"Headquarter address"},"id":{"type":"string","format":"string"},"legal_name":{"type":"string","description":"Legal name"},"name":{"type":"string","description":"Vendor name"},"privacy_policy_url":{"type":"string","description":"Privacy policy URL"},"security_owner_id":{"type":"string","format":"string"},"security_page_url":{"type":"string","description":"Security page URL"},"service_level_agreement_url":{"type":"string","description":"Service level agreement URL"},"status_page_url":{"type":"string","description":"Status page URL"},"subprocessors_list_url":{"type":"string","description":"Subprocessors list URL"},"terms_of_service_url":{"type":"string","description":"Terms of service URL"},"trust_page_url":{"type":"string","description":"Trust page URL"},"website_url":{"type":"string","description":"Website URL"}},"required":["id"]}`) UpdateVendorToolOutputSchema = mcp.MustUnmarshalSchema(`{"type":"object","properties":{"vendor":{"type":"object","properties":{"business_associate_agreement_url":{"type":["string","null"],"description":"Business associate agreement URL"},"business_owner_id":{"description":"Business owner ID","anyOf":[{"type":"string","format":"string"},{"type":"null"}]},"category":{"type":"string","description":"Vendor category","enum":["ANALYTICS","CLOUD_MONITORING","CLOUD_PROVIDER","COLLABORATION","CUSTOMER_SUPPORT","DATA_STORAGE_AND_PROCESSING","DOCUMENT_MANAGEMENT","EMPLOYEE_MANAGEMENT","ENGINEERING","FINANCE","IDENTITY_PROVIDER","IT","MARKETING","OFFICE_OPERATIONS","OTHER","PASSWORD_MANAGEMENT","PRODUCT_AND_DESIGN","PROFESSIONAL_SERVICES","RECRUITING","SALES","SECURITY","VERSION_CONTROL"]},"certifications":{"type":"array","items":{"type":"string"},"description":"Certifications"},"countries":{"type":"array","items":{"type":"string"},"description":"Countries (ISO 3166-1 alpha-2 country codes)"},"created_at":{"type":"string","description":"Creation timestamp","format":"date-time"},"data_processing_agreement_url":{"type":["string","null"],"description":"Data processing agreement URL"},"description":{"type":["string","null"],"description":"Vendor description"},"headquarter_address":{"type":["string","null"],"description":"Headquarter address"},"id":{"type":"string","format":"string"},"legal_name":{"type":["string","null"],"description":"Legal name"},"name":{"type":"string","description":"Vendor name"},"organization_id":{"type":"string","format":"string"},"privacy_policy_url":{"type":["string","null"],"description":"Privacy policy URL"},"security_owner_id":{"description":"Security owner ID","anyOf":[{"type":"string","format":"string"},{"type":"null"}]},"security_page_url":{"type":["string","null"],"description":"Security page URL"},"service_level_agreement_url":{"type":["string","null"],"description":"Service level agreement URL"},"status_page_url":{"type":["string","null"],"description":"Status page URL"},"subprocessors_list_url":{"type":["string","null"],"description":"Subprocessors list URL"},"terms_of_service_url":{"type":["string","null"],"description":"Terms of service URL"},"trust_page_url":{"type":["string","null"],"description":"Trust page URL"},"updated_at":{"type":"string","description":"Update timestamp","format":"date-time"},"website_url":{"type":["string","null"],"description":"Website URL"}},"required":["id","name","organization_id","category","created_at","updated_at"]}},"required":["vendor"]}`) ) @@ -1343,7 +1343,7 @@ type CreateUserInput struct { // Full name FullName string `json:"full_name"` // User kind - Kind coredata.MembershipProfileKind `json:"kind"` + Kind *coredata.MembershipProfileKind `json:"kind"` // Organization ID OrganizationID gid.GID `json:"organization_id"` // Position @@ -2919,7 +2919,7 @@ type Profile struct { // Profile ID ID gid.GID `json:"id"` // Profile kind - Kind coredata.MembershipProfileKind `json:"kind"` + Kind *coredata.MembershipProfileKind `json:"kind"` // Organization ID OrganizationID gid.GID `json:"organization_id"` // Position @@ -3642,7 +3642,7 @@ type UpdateUserInput struct { // User (profile) ID ID gid.GID `json:"id"` // User kind - Kind coredata.MembershipProfileKind `json:"kind"` + Kind *coredata.MembershipProfileKind `json:"kind"` // Position Position mcp.Omittable[*string] `json:"position,omitempty"` } diff --git a/pkg/webhook/types/user.go b/pkg/webhook/types/user.go index d5ca80d31..3e62e5545 100644 --- a/pkg/webhook/types/user.go +++ b/pkg/webhook/types/user.go @@ -23,19 +23,19 @@ import ( ) type User struct { - ID gid.GID `json:"id"` - OrganizationID gid.GID `json:"organizationId"` - EmailAddress mail.Addr `json:"emailAddress"` - FullName string `json:"fullName"` - Kind coredata.MembershipProfileKind `json:"kind"` - Source coredata.ProfileSource `json:"source"` - State coredata.ProfileState `json:"state"` - AdditionalEmailAddresses mail.Addrs `json:"additionalEmailAddresses"` - Position *string `json:"position"` - ContractStartDate *time.Time `json:"contractStartDate"` - ContractEndDate *time.Time `json:"contractEndDate"` - CreatedAt time.Time `json:"createdAt"` - UpdatedAt time.Time `json:"updatedAt"` + ID gid.GID `json:"id"` + OrganizationID gid.GID `json:"organizationId"` + EmailAddress mail.Addr `json:"emailAddress"` + FullName string `json:"fullName"` + Kind *coredata.MembershipProfileKind `json:"kind"` + Source coredata.ProfileSource `json:"source"` + State coredata.ProfileState `json:"state"` + AdditionalEmailAddresses mail.Addrs `json:"additionalEmailAddresses"` + Position *string `json:"position"` + ContractStartDate *time.Time `json:"contractStartDate"` + ContractEndDate *time.Time `json:"contractEndDate"` + CreatedAt time.Time `json:"createdAt"` + UpdatedAt time.Time `json:"updatedAt"` } func NewUser(p *coredata.MembershipProfile) *User {