woodpecker/pkg/model/team.go
2014-02-07 03:10:01 -07:00

68 lines
1.9 KiB
Go

package model
import (
"errors"
"fmt"
"time"
)
// ErrInvalidTeamName is returned by the Team validation function
// when a team name is invalid.
var ErrInvalidTeamName = errors.New("Invalid Team Name")
type Team struct {
ID int64 `meddler:"id,pk" json:"id"`
Slug string `meddler:"slug" json:"slug"`
Name string `meddler:"name" json:"name"`
Email string `meddler:"email" json:"email"`
Gravatar string `meddler:"gravatar" json:"gravatar"`
Created time.Time `meddler:"created,utctime" json:"created"`
Updated time.Time `meddler:"updated,utctime" json:"updated"`
}
// Creates a new team with the specified email address,
// and team name.
func NewTeam(name, email string) *Team {
team := Team{}
team.SetEmail(email)
team.SetName(name)
return &team
}
// Returns the Gravatar Image URL.
func (t *Team) Image() string { return fmt.Sprintf(GravatarPattern, t.Gravatar, 42) }
func (t *Team) ImageSmall() string { return fmt.Sprintf(GravatarPattern, t.Gravatar, 32) }
func (t *Team) ImageLarge() string { return fmt.Sprintf(GravatarPattern, t.Gravatar, 160) }
// Set the name and calculate the slug value.
func (t *Team) SetName(name string) {
t.Name = name
t.Slug = createSlug(name)
}
// Set the email address and calculate the
// Gravatar hash.
func (t *Team) SetEmail(email string) {
t.Email = email
t.Gravatar = createGravatar(email)
}
// ValidatePassword will compares the supplied password to
// the user password stored in the database.
func (t *Team) Validate() error {
switch {
case len(t.Slug) == 0:
return ErrInvalidTeamName
case len(t.Slug) >= 255:
return ErrInvalidTeamName
case len(t.Email) == 0:
return ErrInvalidEmail
case len(t.Email) >= 255:
return ErrInvalidEmail
case RegexpEmail.MatchString(t.Email) == false:
return ErrInvalidEmail
default:
return nil
}
}