summaryrefslogtreecommitdiffstats
path: root/model/team.go
diff options
context:
space:
mode:
author=Corey Hulen <corey@hulen.com>2015-06-14 23:53:32 -0800
committer=Corey Hulen <corey@hulen.com>2015-06-14 23:53:32 -0800
commitcf7a05f80f68b5b1c8bcc0089679dd497cec2506 (patch)
tree70007378570a6962d7c175ca96af732b71aeb6da /model/team.go
downloadchat-cf7a05f80f68b5b1c8bcc0089679dd497cec2506.tar.gz
chat-cf7a05f80f68b5b1c8bcc0089679dd497cec2506.tar.bz2
chat-cf7a05f80f68b5b1c8bcc0089679dd497cec2506.zip
first commit
Diffstat (limited to 'model/team.go')
-rw-r--r--model/team.go141
1 files changed, 141 insertions, 0 deletions
diff --git a/model/team.go b/model/team.go
new file mode 100644
index 000000000..a510cde78
--- /dev/null
+++ b/model/team.go
@@ -0,0 +1,141 @@
+// Copyright (c) 2015 Spinpunch, Inc. All Rights Reserved.
+// See License.txt for license information.
+
+package model
+
+import (
+ "encoding/json"
+ "io"
+)
+
+const (
+ TEAM_OPEN = "O"
+ TEAM_INVITE = "I"
+)
+
+type Team struct {
+ Id string `json:"id"`
+ CreateAt int64 `json:"create_at"`
+ UpdateAt int64 `json:"update_at"`
+ DeleteAt int64 `json:"delete_at"`
+ Name string `json:"name"`
+ Domain string `json:"domain"`
+ Email string `json:"email"`
+ Type string `json:"type"`
+ CompanyName string `json:"company_name"`
+ AllowedDomains string `json:"allowed_domains"`
+}
+
+type Invites struct {
+ Invites []map[string]string `json:"invites"`
+}
+
+func InvitesFromJson(data io.Reader) *Invites {
+ decoder := json.NewDecoder(data)
+ var o Invites
+ err := decoder.Decode(&o)
+ if err == nil {
+ return &o
+ } else {
+ return nil
+ }
+}
+
+func (o *Invites) ToJson() string {
+ b, err := json.Marshal(o)
+ if err != nil {
+ return ""
+ } else {
+ return string(b)
+ }
+}
+
+func (o *Team) ToJson() string {
+ b, err := json.Marshal(o)
+ if err != nil {
+ return ""
+ } else {
+ return string(b)
+ }
+}
+
+func TeamFromJson(data io.Reader) *Team {
+ decoder := json.NewDecoder(data)
+ var o Team
+ err := decoder.Decode(&o)
+ if err == nil {
+ return &o
+ } else {
+ return nil
+ }
+}
+
+func (o *Team) Etag() string {
+ return Etag(o.Id, o.UpdateAt)
+}
+
+func (o *Team) IsValid() *AppError {
+
+ if len(o.Id) != 26 {
+ return NewAppError("Team.IsValid", "Invalid Id", "")
+ }
+
+ if o.CreateAt == 0 {
+ return NewAppError("Team.IsValid", "Create at must be a valid time", "id="+o.Id)
+ }
+
+ if o.UpdateAt == 0 {
+ return NewAppError("Team.IsValid", "Update at must be a valid time", "id="+o.Id)
+ }
+
+ if len(o.Email) > 128 {
+ return NewAppError("Team.IsValid", "Invalid email", "id="+o.Id)
+ }
+
+ if !IsValidEmail(o.Email) {
+ return NewAppError("Team.IsValid", "Invalid email", "id="+o.Id)
+ }
+
+ if len(o.Name) > 64 {
+ return NewAppError("Team.IsValid", "Invalid name", "id="+o.Id)
+ }
+
+ if len(o.Domain) > 64 {
+ return NewAppError("Team.IsValid", "Invalid domain", "id="+o.Id)
+ }
+
+ if IsReservedDomain(o.Domain) {
+ return NewAppError("Team.IsValid", "This URL is unavailable. Please try another.", "id="+o.Id)
+ }
+
+ if !IsValidDomain(o.Domain) {
+ return NewAppError("Team.IsValid", "Domain must be 4 or more lowercase alphanumeric characters", "id="+o.Id)
+ }
+
+ if !(o.Type == TEAM_OPEN || o.Type == TEAM_INVITE) {
+ return NewAppError("Team.IsValid", "Invalid type", "id="+o.Id)
+ }
+
+ if len(o.CompanyName) > 64 {
+ return NewAppError("Team.IsValid", "Invalid company name", "id="+o.Id)
+ }
+
+ if len(o.AllowedDomains) > 500 {
+ return NewAppError("Team.IsValid", "Invalid allowed domains", "id="+o.Id)
+ }
+
+ return nil
+}
+
+func (o *Team) PreSave() {
+ if o.Id == "" {
+ o.Id = NewId()
+ }
+
+ o.CreateAt = GetMillis()
+ o.UpdateAt = o.CreateAt
+}
+
+func (o *Team) PreUpdate() {
+ o.UpdateAt = GetMillis()
+}