Skip to main content
Glama
group_validation.go6.25 kB
package validations import ( "context" domainGroup "github.com/aldinokemal/go-whatsapp-web-multidevice/domains/group" pkgError "github.com/aldinokemal/go-whatsapp-web-multidevice/pkg/error" validation "github.com/go-ozzo/ozzo-validation/v4" "go.mau.fi/whatsmeow" ) func ValidateJoinGroupWithLink(ctx context.Context, request domainGroup.JoinGroupWithLinkRequest) error { err := validation.ValidateStructWithContext(ctx, &request, validation.Field(&request.Link, validation.Required), ) if err != nil { return pkgError.ValidationError(err.Error()) } return nil } func ValidateGetGroupInfoFromLink(ctx context.Context, request domainGroup.GetGroupInfoFromLinkRequest) error { err := validation.ValidateStructWithContext(ctx, &request, validation.Field(&request.Link, validation.Required), ) if err != nil { return pkgError.ValidationError(err.Error()) } return nil } func ValidateLeaveGroup(ctx context.Context, request domainGroup.LeaveGroupRequest) error { err := validation.ValidateStructWithContext(ctx, &request, validation.Field(&request.GroupID, validation.Required), ) if err != nil { return pkgError.ValidationError(err.Error()) } return nil } func ValidateCreateGroup(ctx context.Context, request domainGroup.CreateGroupRequest) error { err := validation.ValidateStructWithContext(ctx, &request, validation.Field(&request.Title, validation.Required), validation.Field(&request.Participants, validation.Required), validation.Field(&request.Participants, validation.Each(validation.Required)), ) if err != nil { return pkgError.ValidationError(err.Error()) } return nil } func ValidateParticipant(ctx context.Context, request domainGroup.ParticipantRequest) error { err := validation.ValidateStructWithContext(ctx, &request, validation.Field(&request.GroupID, validation.Required), validation.Field(&request.Participants, validation.Required), validation.Field(&request.Participants, validation.Each(validation.Required)), ) if err != nil { return pkgError.ValidationError(err.Error()) } return nil } func ValidateGetGroupRequestParticipants(ctx context.Context, request domainGroup.GetGroupRequestParticipantsRequest) error { err := validation.ValidateStructWithContext(ctx, &request, validation.Field(&request.GroupID, validation.Required), ) if err != nil { return pkgError.ValidationError(err.Error()) } return nil } func ValidateManageGroupRequestParticipants(ctx context.Context, request domainGroup.GroupRequestParticipantsRequest) error { err := validation.ValidateStructWithContext(ctx, &request, validation.Field(&request.GroupID, validation.Required), validation.Field(&request.Participants, validation.Required), validation.Field(&request.Participants, validation.Each(validation.Required)), validation.Field(&request.Action, validation.Required, validation.In(whatsmeow.ParticipantChangeApprove, whatsmeow.ParticipantChangeReject)), ) if err != nil { return pkgError.ValidationError(err.Error()) } return nil } func ValidateSetGroupPhoto(ctx context.Context, request domainGroup.SetGroupPhotoRequest) error { err := validation.ValidateStructWithContext(ctx, &request, validation.Field(&request.GroupID, validation.Required), // Photo can be nil to remove the photo, so it's not required // If photo is provided, we could add file type validation here if needed ) if err != nil { return pkgError.ValidationError(err.Error()) } // Optional: Add file type validation if photo is provided if request.Photo != nil { // Check if it's an image file based on content type or filename contentType := request.Photo.Header.Get("Content-Type") if contentType != "" && !isImageContentType(contentType) { return pkgError.ValidationError("uploaded file must be an image") } } return nil } // Helper function to check if content type is an image func isImageContentType(contentType string) bool { imageTypes := []string{ "image/jpeg", "image/jpg", "image/png", "image/gif", "image/webp", } for _, imageType := range imageTypes { if contentType == imageType { return true } } return false } func ValidateSetGroupName(ctx context.Context, request domainGroup.SetGroupNameRequest) error { err := validation.ValidateStructWithContext(ctx, &request, validation.Field(&request.GroupID, validation.Required), validation.Field(&request.Name, validation.Required, validation.Length(1, 25)), ) if err != nil { return pkgError.ValidationError(err.Error()) } return nil } func ValidateSetGroupLocked(ctx context.Context, request domainGroup.SetGroupLockedRequest) error { err := validation.ValidateStructWithContext(ctx, &request, validation.Field(&request.GroupID, validation.Required), // Locked is a boolean, no additional validation needed ) if err != nil { return pkgError.ValidationError(err.Error()) } return nil } func ValidateSetGroupAnnounce(ctx context.Context, request domainGroup.SetGroupAnnounceRequest) error { err := validation.ValidateStructWithContext(ctx, &request, validation.Field(&request.GroupID, validation.Required), // Announce is a boolean, no additional validation needed ) if err != nil { return pkgError.ValidationError(err.Error()) } return nil } func ValidateSetGroupTopic(ctx context.Context, request domainGroup.SetGroupTopicRequest) error { err := validation.ValidateStructWithContext(ctx, &request, validation.Field(&request.GroupID, validation.Required), // Topic can be empty to remove the topic, so it's not required ) if err != nil { return pkgError.ValidationError(err.Error()) } return nil } func ValidateGroupInfo(ctx context.Context, request domainGroup.GroupInfoRequest) error { err := validation.ValidateStructWithContext(ctx, &request, validation.Field(&request.GroupID, validation.Required), ) if err != nil { return pkgError.ValidationError(err.Error()) } return nil } func ValidateGetGroupInviteLink(ctx context.Context, request domainGroup.GetGroupInviteLinkRequest) error { err := validation.ValidateStructWithContext(ctx, &request, validation.Field(&request.GroupID, validation.Required), ) if err != nil { return pkgError.ValidationError(err.Error()) } return nil }

Latest Blog Posts

MCP directory API

We provide all the information about MCP servers via our MCP API.

curl -X GET 'https://glama.ai/api/mcp/v1/servers/samihalawa/whatsapp-go-mcp'

If you have feedback or need assistance with the MCP directory API, please join our Discord server