71 lines
2.1 KiB
Go
71 lines
2.1 KiB
Go
package processor
|
|
|
|
import (
|
|
"context"
|
|
"errors"
|
|
|
|
"eslogad-be/internal/entities"
|
|
|
|
"github.com/google/uuid"
|
|
)
|
|
|
|
type LetterValidationProcessor interface {
|
|
ValidateCreateOutgoingLetter(ctx context.Context, letter *entities.LetterOutgoing) error
|
|
ValidateUpdateOutgoingLetter(ctx context.Context, letter *entities.LetterOutgoing, existingLetter *entities.LetterOutgoing) error
|
|
ValidateDeleteOutgoingLetter(ctx context.Context, letter *entities.LetterOutgoing) error
|
|
ValidateApprovalSubmission(ctx context.Context, letter *entities.LetterOutgoing) error
|
|
}
|
|
|
|
type LetterValidationProcessorImpl struct{}
|
|
|
|
func NewLetterValidationProcessor() *LetterValidationProcessorImpl {
|
|
return &LetterValidationProcessorImpl{}
|
|
}
|
|
|
|
func (p *LetterValidationProcessorImpl) ValidateCreateOutgoingLetter(ctx context.Context, letter *entities.LetterOutgoing) error {
|
|
if letter.Subject == "" {
|
|
return errors.New("letter subject is required")
|
|
}
|
|
|
|
if letter.CreatedBy == uuid.Nil {
|
|
return errors.New("letter creator is required")
|
|
}
|
|
|
|
if letter.IssueDate.IsZero() {
|
|
return errors.New("letter issue date is required")
|
|
}
|
|
|
|
return nil
|
|
}
|
|
|
|
func (p *LetterValidationProcessorImpl) ValidateUpdateOutgoingLetter(ctx context.Context, letter *entities.LetterOutgoing, existingLetter *entities.LetterOutgoing) error {
|
|
if existingLetter.Status != entities.LetterOutgoingStatusDraft {
|
|
return errors.New("only draft letters can be updated")
|
|
}
|
|
|
|
if letter.Subject == "" {
|
|
return errors.New("letter subject cannot be empty")
|
|
}
|
|
|
|
return nil
|
|
}
|
|
|
|
func (p *LetterValidationProcessorImpl) ValidateDeleteOutgoingLetter(ctx context.Context, letter *entities.LetterOutgoing) error {
|
|
if letter.Status != entities.LetterOutgoingStatusDraft {
|
|
return errors.New("only draft letters can be deleted")
|
|
}
|
|
|
|
return nil
|
|
}
|
|
|
|
func (p *LetterValidationProcessorImpl) ValidateApprovalSubmission(ctx context.Context, letter *entities.LetterOutgoing) error {
|
|
if letter.Status != entities.LetterOutgoingStatusDraft {
|
|
return errors.New("only draft letters can be submitted for approval")
|
|
}
|
|
|
|
if letter.ApprovalFlowID == nil {
|
|
return errors.New("approval flow is required for submission")
|
|
}
|
|
|
|
return nil
|
|
} |