Skip to content

Commit

Permalink
added support for slack and email contact types | contact pointer val…
Browse files Browse the repository at this point in the history
…idation
  • Loading branch information
garrettladley committed Feb 1, 2024
1 parent 83b1ef8 commit 857b4dd
Show file tree
Hide file tree
Showing 2 changed files with 33 additions and 11 deletions.
23 changes: 13 additions & 10 deletions backend/src/models/contact.go
Original file line number Diff line number Diff line change
Expand Up @@ -2,23 +2,26 @@ package models

import "github.com/google/uuid"

type Media string
type ContactType string

const (
Facebook Media = "facebook"
Instagram Media = "instagram"
Twitter Media = "twitter"
LinkedIn Media = "linkedin"
YouTube Media = "youtube"
GitHub Media = "github"
Custom Media = "custom"
Facebook ContactType = "facebook"
Instagram ContactType = "instagram"
Twitter ContactType = "twitter"
LinkedIn ContactType = "linkedin"
YouTube ContactType = "youtube"
GitHub ContactType = "github"
Slack ContactType = "slack"
Discord ContactType = "discord"
Email ContactType = "email"
CustomSite ContactType = "customSite"
)

type Contact struct {
Model

Type Media `gorm:"type:varchar(255)" json:"type" validate:"required,max=255"`
Content string `gorm:"type:varchar(255)" json:"content" validate:"required,http_url,max=255"` // media URL
Type ContactType `gorm:"type:varchar(255)" json:"type" validate:"required,max=255"`
Content string `gorm:"type:varchar(255)" json:"content" validate:"required,contact_pointer,max=255"`

ClubID uuid.UUID `gorm:"foreignKey:ClubID" json:"-" validate:"uuid4"`
}
21 changes: 20 additions & 1 deletion backend/src/utilities/validator.go
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,8 @@ import (
"strconv"

"github.com/GenerateNU/sac/backend/src/errors"
"github.com/GenerateNU/sac/backend/src/models"

"github.com/google/uuid"

"github.com/go-playground/validator/v10"
Expand All @@ -16,6 +18,9 @@ func RegisterCustomValidators(validate *validator.Validate) {
validate.RegisterValidation("password", validatePassword)
validate.RegisterValidation("mongo_url", validateMongoURL)
validate.RegisterValidation("s3_url", validateS3URL)
validate.RegisterValidation("contact_pointer", func(fl validator.FieldLevel) bool {
return validateContactPointer(validate, fl)
})
}

func validateEmail(fl validator.FieldLevel) bool {
Expand Down Expand Up @@ -48,6 +53,21 @@ func validateS3URL(fl validator.FieldLevel) bool {
return true
}

func validateContactPointer(validate *validator.Validate, fl validator.FieldLevel) bool {
contact, ok := fl.Parent().Interface().(models.Contact)

if !ok {
return false
}

switch contact.Type {
case models.Email:
return validate.Var(contact.Content, "email") == nil
default:
return validate.Var(contact.Content, "http_url") == nil
}
}

func ValidateID(id string) (*uuid.UUID, *errors.Error) {
idAsUUID, err := uuid.Parse(id)

Expand All @@ -58,7 +78,6 @@ func ValidateID(id string) (*uuid.UUID, *errors.Error) {
return &idAsUUID, nil
}


func ValidateNonNegative(value string) (*int, *errors.Error) {
valueAsInt, err := strconv.Atoi(value)

Expand Down

0 comments on commit 857b4dd

Please sign in to comment.