Move UnwrapOmittable in a dedicated helper

Signed-off-by: Bryan Frimin <bryan@getprobo.com>
This commit is contained in:
Bryan Frimin
2025-12-22 14:02:12 +01:00
parent d4016186c2
commit dccac5c088
5 changed files with 118 additions and 109 deletions

View File

@@ -19,7 +19,6 @@ package connect_v1
import ( import (
"time" "time"
"github.com/99designs/gqlgen/graphql"
"github.com/go-chi/chi/v5" "github.com/go-chi/chi/v5"
"go.gearno.de/kit/log" "go.gearno.de/kit/log"
"go.probo.inc/probo/pkg/baseurl" "go.probo.inc/probo/pkg/baseurl"
@@ -66,11 +65,3 @@ func NewMux(logger *log.Logger, svc *iam.Service, cookieConfig securecookie.Conf
return r return r
} }
func UnwrapOmittable[T any](field graphql.Omittable[T]) *T {
if !field.IsSet() {
return nil
}
value := field.Value()
return &value
}

View File

@@ -699,10 +699,10 @@ func (r *mutationResolver) CreateOrganization(ctx context.Context, input types.C
func (r *mutationResolver) UpdateOrganization(ctx context.Context, input types.UpdateOrganizationInput) (*types.UpdateOrganizationPayload, error) { func (r *mutationResolver) UpdateOrganization(ctx context.Context, input types.UpdateOrganizationInput) (*types.UpdateOrganizationPayload, error) {
req := &iam.UpdateOrganizationRequest{ req := &iam.UpdateOrganizationRequest{
Name: input.Name, Name: input.Name,
Description: UnwrapOmittable(input.Description), Description: gqlutils.UnwrapOmittable(input.Description),
WebsiteURL: UnwrapOmittable(input.WebsiteURL), WebsiteURL: gqlutils.UnwrapOmittable(input.WebsiteURL),
Email: UnwrapOmittable(input.Email), Email: gqlutils.UnwrapOmittable(input.Email),
HeadquarterAddress: UnwrapOmittable(input.HeadquarterAddress), HeadquarterAddress: gqlutils.UnwrapOmittable(input.HeadquarterAddress),
} }
if input.LogoFile != nil { if input.LogoFile != nil {

View File

@@ -81,11 +81,8 @@ func NewMux(
safeRedirect := &saferedirect.SafeRedirect{AllowedHost: baseURL.Host()} safeRedirect := &saferedirect.SafeRedirect{AllowedHost: baseURL.Host()}
sessionMiddleware := connect_v1.NewSessionMiddleware(iamSvc, cookieConfig) r.Use(connect_v1.NewSessionMiddleware(iamSvc, cookieConfig))
apiKeyMiddleware := connect_v1.NewAPIKeyMiddleware(iamSvc) r.Use(connect_v1.NewAPIKeyMiddleware(iamSvc))
r.Use(sessionMiddleware)
r.Use(apiKeyMiddleware)
config := schema.Config{ config := schema.Config{
Resolvers: &Resolver{ Resolvers: &Resolver{
@@ -315,14 +312,6 @@ func (r *Resolver) ProboService(ctx context.Context, tenantID gid.TenantID) *pro
return GetTenantService(ctx, r.probo, tenantID) return GetTenantService(ctx, r.probo, tenantID)
} }
func UnwrapOmittable[T any](field graphql.Omittable[T]) *T {
if !field.IsSet() {
return nil
}
value := field.Value()
return &value
}
func GetTenantService(ctx context.Context, proboSvc *probo.Service, tenantID gid.TenantID) *probo.TenantService { func GetTenantService(ctx context.Context, proboSvc *probo.Service, tenantID gid.TenantID) *probo.TenantService {
return proboSvc.WithTenant(tenantID) return proboSvc.WithTenant(tenantID)
} }

View File

@@ -1449,7 +1449,7 @@ func (r *mutationResolver) UpdateOrganizationContext(ctx context.Context, input
req := probo.UpdateOrganizationContextRequest{ req := probo.UpdateOrganizationContextRequest{
OrganizationID: input.OrganizationID, OrganizationID: input.OrganizationID,
Summary: UnwrapOmittable(input.Summary), Summary: gqlutils.UnwrapOmittable(input.Summary),
} }
organizationContext, err := prb.Organizations.UpdateContext(ctx, req) organizationContext, err := prb.Organizations.UpdateContext(ctx, req)
@@ -1637,7 +1637,7 @@ func (r *mutationResolver) UpdateTrustCenterReference(ctx context.Context, input
req := &probo.UpdateTrustCenterReferenceRequest{ req := &probo.UpdateTrustCenterReferenceRequest{
ID: input.ID, ID: input.ID,
Name: input.Name, Name: input.Name,
Description: UnwrapOmittable(input.Description), Description: gqlutils.UnwrapOmittable(input.Description),
WebsiteURL: input.WebsiteURL, WebsiteURL: input.WebsiteURL,
Rank: input.Rank, Rank: input.Rank,
} }
@@ -1804,11 +1804,11 @@ func (r *mutationResolver) UpdatePeople(ctx context.Context, input types.UpdateP
ID: input.ID, ID: input.ID,
FullName: input.FullName, FullName: input.FullName,
PrimaryEmailAddress: input.PrimaryEmailAddress, PrimaryEmailAddress: input.PrimaryEmailAddress,
AdditionalEmailAddresses: UnwrapOmittable(input.AdditionalEmailAddresses), AdditionalEmailAddresses: gqlutils.UnwrapOmittable(input.AdditionalEmailAddresses),
Kind: input.Kind, Kind: input.Kind,
Position: UnwrapOmittable(input.Position), Position: gqlutils.UnwrapOmittable(input.Position),
ContractStartDate: UnwrapOmittable(input.ContractStartDate), ContractStartDate: gqlutils.UnwrapOmittable(input.ContractStartDate),
ContractEndDate: UnwrapOmittable(input.ContractEndDate), ContractEndDate: gqlutils.UnwrapOmittable(input.ContractEndDate),
}, },
) )
if err != nil { if err != nil {
@@ -1892,23 +1892,23 @@ func (r *mutationResolver) UpdateVendor(ctx context.Context, input types.UpdateV
vendor, err := prb.Vendors.Update(ctx, probo.UpdateVendorRequest{ vendor, err := prb.Vendors.Update(ctx, probo.UpdateVendorRequest{
ID: input.ID, ID: input.ID,
Name: input.Name, Name: input.Name,
Description: UnwrapOmittable(input.Description), Description: gqlutils.UnwrapOmittable(input.Description),
StatusPageURL: UnwrapOmittable(input.StatusPageURL), StatusPageURL: gqlutils.UnwrapOmittable(input.StatusPageURL),
TermsOfServiceURL: UnwrapOmittable(input.TermsOfServiceURL), TermsOfServiceURL: gqlutils.UnwrapOmittable(input.TermsOfServiceURL),
PrivacyPolicyURL: UnwrapOmittable(input.PrivacyPolicyURL), PrivacyPolicyURL: gqlutils.UnwrapOmittable(input.PrivacyPolicyURL),
ServiceLevelAgreementURL: UnwrapOmittable(input.ServiceLevelAgreementURL), ServiceLevelAgreementURL: gqlutils.UnwrapOmittable(input.ServiceLevelAgreementURL),
DataProcessingAgreementURL: UnwrapOmittable(input.DataProcessingAgreementURL), DataProcessingAgreementURL: gqlutils.UnwrapOmittable(input.DataProcessingAgreementURL),
BusinessAssociateAgreementURL: UnwrapOmittable(input.BusinessAssociateAgreementURL), BusinessAssociateAgreementURL: gqlutils.UnwrapOmittable(input.BusinessAssociateAgreementURL),
SubprocessorsListURL: UnwrapOmittable(input.SubprocessorsListURL), SubprocessorsListURL: gqlutils.UnwrapOmittable(input.SubprocessorsListURL),
SecurityPageURL: UnwrapOmittable(input.SecurityPageURL), SecurityPageURL: gqlutils.UnwrapOmittable(input.SecurityPageURL),
TrustPageURL: UnwrapOmittable(input.TrustPageURL), TrustPageURL: gqlutils.UnwrapOmittable(input.TrustPageURL),
HeadquarterAddress: UnwrapOmittable(input.HeadquarterAddress), HeadquarterAddress: gqlutils.UnwrapOmittable(input.HeadquarterAddress),
LegalName: UnwrapOmittable(input.LegalName), LegalName: gqlutils.UnwrapOmittable(input.LegalName),
WebsiteURL: UnwrapOmittable(input.WebsiteURL), WebsiteURL: gqlutils.UnwrapOmittable(input.WebsiteURL),
Category: input.Category, Category: input.Category,
Certifications: input.Certifications, Certifications: input.Certifications,
BusinessOwnerID: UnwrapOmittable(input.BusinessOwnerID), BusinessOwnerID: gqlutils.UnwrapOmittable(input.BusinessOwnerID),
SecurityOwnerID: UnwrapOmittable(input.SecurityOwnerID), SecurityOwnerID: gqlutils.UnwrapOmittable(input.SecurityOwnerID),
ShowOnTrustCenter: input.ShowOnTrustCenter, ShowOnTrustCenter: input.ShowOnTrustCenter,
Countries: input.Countries, Countries: input.Countries,
}) })
@@ -1969,10 +1969,10 @@ func (r *mutationResolver) UpdateVendorContact(ctx context.Context, input types.
req := probo.UpdateVendorContactRequest{ req := probo.UpdateVendorContactRequest{
ID: input.ID, ID: input.ID,
FullName: UnwrapOmittable(input.FullName), FullName: gqlutils.UnwrapOmittable(input.FullName),
Email: UnwrapOmittable(input.Email), Email: gqlutils.UnwrapOmittable(input.Email),
Phone: UnwrapOmittable(input.Phone), Phone: gqlutils.UnwrapOmittable(input.Phone),
Role: UnwrapOmittable(input.Role), Role: gqlutils.UnwrapOmittable(input.Role),
} }
vendorContact, err := prb.VendorContacts.Update(ctx, req) vendorContact, err := prb.VendorContacts.Update(ctx, req)
@@ -2032,7 +2032,7 @@ func (r *mutationResolver) UpdateVendorService(ctx context.Context, input types.
req := probo.UpdateVendorServiceRequest{ req := probo.UpdateVendorServiceRequest{
ID: input.ID, ID: input.ID,
Name: input.Name, Name: input.Name,
Description: UnwrapOmittable(input.Description), Description: gqlutils.UnwrapOmittable(input.Description),
} }
vendorService, err := prb.VendorServices.Update(ctx, req) vendorService, err := prb.VendorServices.Update(ctx, req)
@@ -2089,7 +2089,7 @@ func (r *mutationResolver) UpdateFramework(ctx context.Context, input types.Upda
framework, err := prb.Frameworks.Update(ctx, probo.UpdateFrameworkRequest{ framework, err := prb.Frameworks.Update(ctx, probo.UpdateFrameworkRequest{
ID: input.ID, ID: input.ID,
Name: input.Name, Name: input.Name,
Description: UnwrapOmittable(input.Description), Description: gqlutils.UnwrapOmittable(input.Description),
}) })
if err != nil { if err != nil {
return nil, fmt.Errorf("cannot update framework: %w", err) return nil, fmt.Errorf("cannot update framework: %w", err)
@@ -2219,7 +2219,7 @@ func (r *mutationResolver) UpdateControl(ctx context.Context, input types.Update
control, err := prb.Controls.Update(ctx, probo.UpdateControlRequest{ control, err := prb.Controls.Update(ctx, probo.UpdateControlRequest{
ID: input.ID, ID: input.ID,
Name: input.Name, Name: input.Name,
Description: UnwrapOmittable(input.Description), Description: gqlutils.UnwrapOmittable(input.Description),
SectionTitle: input.SectionTitle, SectionTitle: input.SectionTitle,
Status: input.Status, Status: input.Status,
ExclusionJustification: input.ExclusionJustification, ExclusionJustification: input.ExclusionJustification,
@@ -2286,7 +2286,7 @@ func (r *mutationResolver) UpdateMeasure(ctx context.Context, input types.Update
measure, err := prb.Measures.Update(ctx, probo.UpdateMeasureRequest{ measure, err := prb.Measures.Update(ctx, probo.UpdateMeasureRequest{
ID: input.ID, ID: input.ID,
Name: input.Name, Name: input.Name,
Description: UnwrapOmittable(input.Description), Description: gqlutils.UnwrapOmittable(input.Description),
Category: input.Category, Category: input.Category,
State: input.State, State: input.State,
}) })
@@ -2586,12 +2586,12 @@ func (r *mutationResolver) UpdateTask(ctx context.Context, input types.UpdateTas
task, err := prb.Tasks.Update(ctx, probo.UpdateTaskRequest{ task, err := prb.Tasks.Update(ctx, probo.UpdateTaskRequest{
TaskID: input.TaskID, TaskID: input.TaskID,
Name: input.Name, Name: input.Name,
Description: UnwrapOmittable(input.Description), Description: gqlutils.UnwrapOmittable(input.Description),
State: input.State, State: input.State,
TimeEstimate: UnwrapOmittable(input.TimeEstimate), TimeEstimate: gqlutils.UnwrapOmittable(input.TimeEstimate),
Deadline: UnwrapOmittable(input.Deadline), Deadline: gqlutils.UnwrapOmittable(input.Deadline),
AssignedToID: UnwrapOmittable(input.AssignedToID), AssignedToID: gqlutils.UnwrapOmittable(input.AssignedToID),
MeasureID: UnwrapOmittable(input.MeasureID), MeasureID: gqlutils.UnwrapOmittable(input.MeasureID),
}) })
if err != nil { if err != nil {
panic(fmt.Errorf("cannot update task: %w", err)) panic(fmt.Errorf("cannot update task: %w", err))
@@ -2664,10 +2664,10 @@ func (r *mutationResolver) UpdateRisk(ctx context.Context, input types.UpdateRis
probo.UpdateRiskRequest{ probo.UpdateRiskRequest{
ID: input.ID, ID: input.ID,
Name: input.Name, Name: input.Name,
Description: UnwrapOmittable(input.Description), Description: gqlutils.UnwrapOmittable(input.Description),
Category: input.Category, Category: input.Category,
Treatment: input.Treatment, Treatment: input.Treatment,
OwnerID: UnwrapOmittable(input.OwnerID), OwnerID: gqlutils.UnwrapOmittable(input.OwnerID),
InherentLikelihood: input.InherentLikelihood, InherentLikelihood: input.InherentLikelihood,
InherentImpact: input.InherentImpact, InherentImpact: input.InherentImpact,
ResidualLikelihood: input.ResidualLikelihood, ResidualLikelihood: input.ResidualLikelihood,
@@ -2921,8 +2921,8 @@ func (r *mutationResolver) UpdateVendorBusinessAssociateAgreement(ctx context.Co
ctx, ctx,
input.VendorID, input.VendorID,
&probo.VendorBusinessAssociateAgreementUpdateRequest{ &probo.VendorBusinessAssociateAgreementUpdateRequest{
ValidFrom: UnwrapOmittable(input.ValidFrom), ValidFrom: gqlutils.UnwrapOmittable(input.ValidFrom),
ValidUntil: UnwrapOmittable(input.ValidUntil), ValidUntil: gqlutils.UnwrapOmittable(input.ValidUntil),
}, },
) )
if err != nil { if err != nil {
@@ -2985,8 +2985,8 @@ func (r *mutationResolver) UpdateVendorDataPrivacyAgreement(ctx context.Context,
ctx, ctx,
input.VendorID, input.VendorID,
&probo.VendorDataPrivacyAgreementUpdateRequest{ &probo.VendorDataPrivacyAgreementUpdateRequest{
ValidFrom: UnwrapOmittable(input.ValidFrom), ValidFrom: gqlutils.UnwrapOmittable(input.ValidFrom),
ValidUntil: UnwrapOmittable(input.ValidUntil), ValidUntil: gqlutils.UnwrapOmittable(input.ValidUntil),
}, },
) )
if err != nil { if err != nil {
@@ -3131,7 +3131,7 @@ func (r *mutationResolver) UpdateMeeting(ctx context.Context, input types.Update
Name: input.Name, Name: input.Name,
Date: input.Date, Date: input.Date,
AttendeeIDs: attendeeIDs, AttendeeIDs: attendeeIDs,
Minutes: UnwrapOmittable(input.Minutes), Minutes: gqlutils.UnwrapOmittable(input.Minutes),
}, },
) )
if err != nil { if err != nil {
@@ -3874,7 +3874,7 @@ func (r *mutationResolver) UpdateAudit(ctx context.Context, input types.UpdateAu
req := probo.UpdateAuditRequest{ req := probo.UpdateAuditRequest{
ID: input.ID, ID: input.ID,
Name: UnwrapOmittable(input.Name), Name: gqlutils.UnwrapOmittable(input.Name),
ValidFrom: input.ValidFrom, ValidFrom: input.ValidFrom,
ValidUntil: input.ValidUntil, ValidUntil: input.ValidUntil,
State: input.State, State: input.State,
@@ -3988,15 +3988,15 @@ func (r *mutationResolver) UpdateNonconformity(ctx context.Context, input types.
req := probo.UpdateNonconformityRequest{ req := probo.UpdateNonconformityRequest{
ID: input.ID, ID: input.ID,
ReferenceID: input.ReferenceID, ReferenceID: input.ReferenceID,
Description: UnwrapOmittable(input.Description), Description: gqlutils.UnwrapOmittable(input.Description),
DateIdentified: UnwrapOmittable(input.DateIdentified), DateIdentified: gqlutils.UnwrapOmittable(input.DateIdentified),
RootCause: input.RootCause, RootCause: input.RootCause,
CorrectiveAction: UnwrapOmittable(input.CorrectiveAction), CorrectiveAction: gqlutils.UnwrapOmittable(input.CorrectiveAction),
OwnerID: input.OwnerID, OwnerID: input.OwnerID,
AuditID: UnwrapOmittable(input.AuditID), AuditID: gqlutils.UnwrapOmittable(input.AuditID),
DueDate: UnwrapOmittable(input.DueDate), DueDate: gqlutils.UnwrapOmittable(input.DueDate),
Status: input.Status, Status: input.Status,
EffectivenessCheck: UnwrapOmittable(input.EffectivenessCheck), EffectivenessCheck: gqlutils.UnwrapOmittable(input.EffectivenessCheck),
} }
nonconformity, err := prb.Nonconformities.Update(ctx, &req) nonconformity, err := prb.Nonconformities.Update(ctx, &req)
@@ -4063,14 +4063,14 @@ func (r *mutationResolver) UpdateObligation(ctx context.Context, input types.Upd
req := probo.UpdateObligationRequest{ req := probo.UpdateObligationRequest{
ID: input.ID, ID: input.ID,
Area: UnwrapOmittable(input.Area), Area: gqlutils.UnwrapOmittable(input.Area),
Source: UnwrapOmittable(input.Source), Source: gqlutils.UnwrapOmittable(input.Source),
Requirement: UnwrapOmittable(input.Requirement), Requirement: gqlutils.UnwrapOmittable(input.Requirement),
ActionsToBeImplemented: UnwrapOmittable(input.ActionsToBeImplemented), ActionsToBeImplemented: gqlutils.UnwrapOmittable(input.ActionsToBeImplemented),
Regulator: UnwrapOmittable(input.Regulator), Regulator: gqlutils.UnwrapOmittable(input.Regulator),
OwnerID: input.OwnerID, OwnerID: input.OwnerID,
LastReviewDate: UnwrapOmittable(input.LastReviewDate), LastReviewDate: gqlutils.UnwrapOmittable(input.LastReviewDate),
DueDate: UnwrapOmittable(input.DueDate), DueDate: gqlutils.UnwrapOmittable(input.DueDate),
Status: input.Status, Status: input.Status,
Type: input.Type, Type: input.Type,
} }
@@ -4137,10 +4137,10 @@ func (r *mutationResolver) UpdateContinualImprovement(ctx context.Context, input
req := probo.UpdateContinualImprovementRequest{ req := probo.UpdateContinualImprovementRequest{
ID: input.ID, ID: input.ID,
ReferenceID: input.ReferenceID, ReferenceID: input.ReferenceID,
Description: UnwrapOmittable(input.Description), Description: gqlutils.UnwrapOmittable(input.Description),
Source: UnwrapOmittable(input.Source), Source: gqlutils.UnwrapOmittable(input.Source),
OwnerID: input.OwnerID, OwnerID: input.OwnerID,
TargetDate: UnwrapOmittable(input.TargetDate), TargetDate: gqlutils.UnwrapOmittable(input.TargetDate),
Status: input.Status, Status: input.Status,
Priority: input.Priority, Priority: input.Priority,
} }
@@ -4208,11 +4208,11 @@ func (r *mutationResolver) UpdateRightsRequest(ctx context.Context, input types.
ID: input.ID, ID: input.ID,
RequestType: input.RequestType, RequestType: input.RequestType,
RequestState: input.RequestState, RequestState: input.RequestState,
DataSubject: UnwrapOmittable(input.DataSubject), DataSubject: gqlutils.UnwrapOmittable(input.DataSubject),
Contact: UnwrapOmittable(input.Contact), Contact: gqlutils.UnwrapOmittable(input.Contact),
Details: UnwrapOmittable(input.Details), Details: gqlutils.UnwrapOmittable(input.Details),
Deadline: UnwrapOmittable(input.Deadline), Deadline: gqlutils.UnwrapOmittable(input.Deadline),
ActionTaken: UnwrapOmittable(input.ActionTaken), ActionTaken: gqlutils.UnwrapOmittable(input.ActionTaken),
} }
rightsRequest, err := prb.RightsRequests.Update(ctx, &req) rightsRequest, err := prb.RightsRequests.Update(ctx, &req)
@@ -4289,23 +4289,23 @@ func (r *mutationResolver) UpdateProcessingActivity(ctx context.Context, input t
req := probo.UpdateProcessingActivityRequest{ req := probo.UpdateProcessingActivityRequest{
ID: input.ID, ID: input.ID,
Name: input.Name, Name: input.Name,
Purpose: UnwrapOmittable(input.Purpose), Purpose: gqlutils.UnwrapOmittable(input.Purpose),
DataSubjectCategory: UnwrapOmittable(input.DataSubjectCategory), DataSubjectCategory: gqlutils.UnwrapOmittable(input.DataSubjectCategory),
PersonalDataCategory: UnwrapOmittable(input.PersonalDataCategory), PersonalDataCategory: gqlutils.UnwrapOmittable(input.PersonalDataCategory),
SpecialOrCriminalData: input.SpecialOrCriminalData, SpecialOrCriminalData: input.SpecialOrCriminalData,
LawfulBasis: input.LawfulBasis, LawfulBasis: input.LawfulBasis,
Recipients: UnwrapOmittable(input.Recipients), Recipients: gqlutils.UnwrapOmittable(input.Recipients),
Location: UnwrapOmittable(input.Location), Location: gqlutils.UnwrapOmittable(input.Location),
InternationalTransfers: input.InternationalTransfers, InternationalTransfers: input.InternationalTransfers,
TransferSafeguard: UnwrapOmittable(input.TransferSafeguards), TransferSafeguard: gqlutils.UnwrapOmittable(input.TransferSafeguards),
RetentionPeriod: UnwrapOmittable(input.RetentionPeriod), RetentionPeriod: gqlutils.UnwrapOmittable(input.RetentionPeriod),
SecurityMeasures: UnwrapOmittable(input.SecurityMeasures), SecurityMeasures: gqlutils.UnwrapOmittable(input.SecurityMeasures),
DataProtectionImpactAssessmentNeeded: input.DataProtectionImpactAssessmentNeeded, DataProtectionImpactAssessmentNeeded: input.DataProtectionImpactAssessmentNeeded,
TransferImpactAssessmentNeeded: input.TransferImpactAssessmentNeeded, TransferImpactAssessmentNeeded: input.TransferImpactAssessmentNeeded,
LastReviewDate: UnwrapOmittable(input.LastReviewDate), LastReviewDate: gqlutils.UnwrapOmittable(input.LastReviewDate),
NextReviewDate: UnwrapOmittable(input.NextReviewDate), NextReviewDate: gqlutils.UnwrapOmittable(input.NextReviewDate),
Role: input.Role, Role: input.Role,
DataProtectionOfficerID: UnwrapOmittable(input.DataProtectionOfficerID), DataProtectionOfficerID: gqlutils.UnwrapOmittable(input.DataProtectionOfficerID),
VendorIDs: &input.VendorIds, VendorIDs: &input.VendorIds,
} }
@@ -4368,10 +4368,10 @@ func (r *mutationResolver) UpdateDataProtectionImpactAssessment(ctx context.Cont
req := probo.UpdateDataProtectionImpactAssessmentRequest{ req := probo.UpdateDataProtectionImpactAssessmentRequest{
ID: input.ID, ID: input.ID,
Description: UnwrapOmittable(input.Description), Description: gqlutils.UnwrapOmittable(input.Description),
NecessityAndProportionality: UnwrapOmittable(input.NecessityAndProportionality), NecessityAndProportionality: gqlutils.UnwrapOmittable(input.NecessityAndProportionality),
PotentialRisk: UnwrapOmittable(input.PotentialRisk), PotentialRisk: gqlutils.UnwrapOmittable(input.PotentialRisk),
Mitigations: UnwrapOmittable(input.Mitigations), Mitigations: gqlutils.UnwrapOmittable(input.Mitigations),
ResidualRisk: input.ResidualRisk, ResidualRisk: input.ResidualRisk,
} }
@@ -4434,11 +4434,11 @@ func (r *mutationResolver) UpdateTransferImpactAssessment(ctx context.Context, i
req := probo.UpdateTransferImpactAssessmentRequest{ req := probo.UpdateTransferImpactAssessmentRequest{
ID: input.ID, ID: input.ID,
DataSubjects: UnwrapOmittable(input.DataSubjects), DataSubjects: gqlutils.UnwrapOmittable(input.DataSubjects),
LegalMechanism: UnwrapOmittable(input.LegalMechanism), LegalMechanism: gqlutils.UnwrapOmittable(input.LegalMechanism),
Transfer: UnwrapOmittable(input.Transfer), Transfer: gqlutils.UnwrapOmittable(input.Transfer),
LocalLawRisk: UnwrapOmittable(input.LocalLawRisk), LocalLawRisk: gqlutils.UnwrapOmittable(input.LocalLawRisk),
SupplementaryMeasures: UnwrapOmittable(input.SupplementaryMeasures), SupplementaryMeasures: gqlutils.UnwrapOmittable(input.SupplementaryMeasures),
} }
tia, err := prb.TransferImpactAssessments.Update(ctx, &req) tia, err := prb.TransferImpactAssessments.Update(ctx, &req)

View File

@@ -0,0 +1,29 @@
// Copyright (c) 2025 Probo Inc <hello@getprobo.com>.
//
// Permission to use, copy, modify, and/or distribute this software for any
// purpose with or without fee is hereby granted, provided that the above
// copyright notice and this permission notice appear in all copies.
//
// THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH
// REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY
// AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,
// INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM
// LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR
// OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
// PERFORMANCE OF THIS SOFTWARE.
package gqlutils
import (
"github.com/99designs/gqlgen/graphql"
)
func UnwrapOmittable[T any](field graphql.Omittable[T]) *T {
if !field.IsSet() {
return nil
}
value := field.Value()
return &value
}