From 3229457de0eb6e04fff6ce4fe1466a828be5f6f6 Mon Sep 17 00:00:00 2001 From: hmhealey Date: Thu, 1 Oct 2015 09:16:25 -0400 Subject: Added model class for user preferences object --- model/preference.go | 74 +++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 74 insertions(+) create mode 100644 model/preference.go (limited to 'model/preference.go') diff --git a/model/preference.go b/model/preference.go new file mode 100644 index 000000000..900c1d7a0 --- /dev/null +++ b/model/preference.go @@ -0,0 +1,74 @@ +// Copyright (c) 2015 Spinpunch, Inc. All Rights Reserved. +// See License.txt for license information. + +package model + +import ( + "encoding/json" + "io" +) + +const ( + PREFERENCE_CATEGORY_DIRECT_CHANNELS = "direct_channels" + PREFERENCE_NAME_SHOWHIDE = "show_hide" +) + +type Preference struct { + UserId string `json:"user_id"` + Category string `json:"category"` + Name string `json:"name"` + AltId string `json:"alt_id"` + Value string `json:"value"` +} + +func (o *Preference) ToJson() string { + b, err := json.Marshal(o) + if err != nil { + return "" + } else { + return string(b) + } +} + +func PreferenceFromJson(data io.Reader) *Preference { + decoder := json.NewDecoder(data) + var o Preference + err := decoder.Decode(&o) + if err == nil { + return &o + } else { + return nil + } +} + +func (o *Preference) IsValid() *AppError { + if len(o.UserId) != 26 { + return NewAppError("Preference.IsValid", "Invalid user id", "user_id="+o.UserId) + } + + if len(o.Category) == 0 || len(o.Category) > 32 || !IsPreferenceCategoryValid(o.Category) { + return NewAppError("Preference.IsValid", "Invalid category", "category="+o.Category) + } + + if len(o.Name) == 0 || len(o.Name) > 32 || !IsPreferenceNameValid(o.Name) { + return NewAppError("Preference.IsValid", "Invalid name", "name="+o.Name) + } + + if o.AltId != "" && len(o.AltId) != 26 { + return NewAppError("Preference.IsValid", "Invalid alternate id", "altId="+o.AltId) + } + + if len(o.Value) > 128 { + return NewAppError("Preference.IsValid", "Value is too long", "value="+o.Value) + } + + return nil +} + +func IsPreferenceCategoryValid(category string) bool { + return category == PREFERENCE_CATEGORY_DIRECT_CHANNELS +} + +func IsPreferenceNameValid(name string) bool { + return name == PREFERENCE_NAME_SHOWHIDE +} -- cgit v1.2.3-1-g7c22