Add validation to mailman service

Signed-off-by: Sacha Al Himdani <sacha@getprobo.com>
This commit is contained in:
Sacha Al Himdani
2026-03-13 15:28:10 +01:00
parent 7ed9c6c2e6
commit dc8e6d0817
5 changed files with 137 additions and 25 deletions

View File

@@ -3902,8 +3902,8 @@ input CreateMailingListUpdateInput {
input UpdateMailingListUpdateInput {
id: ID!
title: String!
body: String!
title: String
body: String
}
input SendMailingListUpdateInput {

View File

@@ -26,6 +26,7 @@ import (
"go.probo.inc/probo/pkg/server/api/console/v1/types"
"go.probo.inc/probo/pkg/server/gqlutils"
"go.probo.inc/probo/pkg/server/gqlutils/types/cursor"
"go.probo.inc/probo/pkg/validator"
)
// StateOfApplicability is the resolver for the stateOfApplicability field.
@@ -2072,8 +2073,18 @@ func (r *mutationResolver) CreateMailingListUpdate(ctx context.Context, input ty
return nil, err
}
mlu, err := r.mailman.CreateMailingListUpdate(ctx, input.MailingListID, input.Title, input.Body)
mlu, err := r.mailman.CreateMailingListUpdate(
ctx,
&mailman.CreateMailingListUpdateRequest{
MailingListID: input.MailingListID,
Title: input.Title,
Body: input.Body,
},
)
if err != nil {
if validationErrors, ok := errors.AsType[validator.ValidationErrors](err); ok {
return nil, gqlutils.InvalidValidationErrors(ctx, validationErrors)
}
r.logger.ErrorCtx(ctx, "cannot create mailing list update", log.Error(err))
return nil, gqlutils.Internal(ctx)
}
@@ -2089,8 +2100,18 @@ func (r *mutationResolver) UpdateMailingListUpdate(ctx context.Context, input ty
return nil, err
}
mlu, err := r.mailman.UpdateMailingListUpdate(ctx, input.ID, input.Title, input.Body)
mlu, err := r.mailman.UpdateMailingListUpdate(
ctx,
&mailman.UpdateMailingListUpdateRequest{
ID: input.ID,
Title: input.Title,
Body: input.Body,
},
)
if err != nil {
if validationErrors, ok := errors.AsType[validator.ValidationErrors](err); ok {
return nil, gqlutils.InvalidValidationErrors(ctx, validationErrors)
}
if errors.Is(err, mailman.ErrMailingListUpdateAlreadySent) {
return nil, gqlutils.Conflictf(ctx, "mailing list update can only be edited when in draft")
}
@@ -2173,11 +2194,16 @@ func (r *mutationResolver) CreateMailingListSubscriber(ctx context.Context, inpu
subscriber, err := r.mailman.CreateSubscriber(
ctx,
input.MailingListID,
input.Email,
input.FullName,
&mailman.CreateSubscriberRequest{
MailingListID: input.MailingListID,
Email: input.Email,
FullName: input.FullName,
},
)
if err != nil {
if validationErrors, ok := errors.AsType[validator.ValidationErrors](err); ok {
return nil, gqlutils.InvalidValidationErrors(ctx, validationErrors)
}
if errors.Is(err, mailman.ErrSubscriberAlreadyExist) {
return nil, gqlutils.Conflictf(ctx, "subscriber already exists in this mailing list")
}

View File

@@ -28,6 +28,7 @@ import (
"go.probo.inc/probo/pkg/server/api/trust/v1/types"
"go.probo.inc/probo/pkg/server/gqlutils"
"go.probo.inc/probo/pkg/trust"
"go.probo.inc/probo/pkg/validator"
)
// Framework is the resolver for the framework field.
@@ -706,11 +707,16 @@ func (r *mutationResolver) SubscribeToMailingList(ctx context.Context) (*types.S
subscriber, err := r.mailman.CreateSubscriber(
ctx,
*trustCenter.MailingListID,
identity.EmailAddress,
identity.FullName,
&mailman.CreateSubscriberRequest{
MailingListID: *trustCenter.MailingListID,
Email: identity.EmailAddress,
FullName: identity.FullName,
},
)
if err != nil {
if validationErrors, ok := errors.AsType[validator.ValidationErrors](err); ok {
return nil, gqlutils.InvalidValidationErrors(ctx, validationErrors)
}
if errors.Is(err, mailman.ErrSubscriberAlreadyExist) {
return nil, gqlutils.Conflictf(ctx, "already subscribed to this mailing list")
}