168 lines
3.9 KiB
Go
168 lines
3.9 KiB
Go
package notification
|
|
|
|
import (
|
|
"strconv"
|
|
|
|
"github.com/astaxie/beego/orm"
|
|
|
|
"git.kingpenguin.tk/chteufleur/datahouse.git/xmpp"
|
|
|
|
"git.kingpenguin.tk/chteufleur/datahouse.git/models/database"
|
|
"git.kingpenguin.tk/chteufleur/datahouse.git/models/user"
|
|
"git.kingpenguin.tk/chteufleur/datahouse.git/models/utils"
|
|
)
|
|
|
|
const (
|
|
UPPER = ">"
|
|
UPPER_OR_EQUALS = ">="
|
|
LOWER = "<"
|
|
LOWER_OR_EQUALS = "<="
|
|
EQUALS = "=="
|
|
NOT_EQUALS = "!="
|
|
)
|
|
|
|
type NotificationCondition struct {
|
|
Id int64
|
|
UserId int64
|
|
Condition string
|
|
Value int64
|
|
}
|
|
|
|
func init() {
|
|
orm.RegisterModel(new(NotificationCondition))
|
|
}
|
|
|
|
func AddNotificationCondition(userId int64, condition string, value int64) (int64, error) {
|
|
o := orm.NewOrm()
|
|
o.Using(database.Alias)
|
|
return o.Insert(&NotificationCondition{UserId: userId, Condition: condition, Value: value})
|
|
}
|
|
|
|
func UpdateNotificationCondition(id, userId int64, condition string, value int64) error {
|
|
o := orm.NewOrm()
|
|
o.Using(database.Alias)
|
|
|
|
n := GetNotificationCondition(id)
|
|
if o.Read(n) == nil {
|
|
n.UserId = userId
|
|
n.Condition = condition
|
|
n.Value = value
|
|
_, err := o.Update(n)
|
|
return err
|
|
}
|
|
return nil
|
|
}
|
|
|
|
func DeleteNotificationCondition(id int64) {
|
|
o := orm.NewOrm()
|
|
o.Using(database.Alias)
|
|
o.Delete(&NotificationCondition{Id: id})
|
|
}
|
|
|
|
func GetAllNotificationConditionIds() []int64 {
|
|
o := orm.NewOrm()
|
|
o.Using(database.Alias)
|
|
|
|
notif := new(NotificationCondition)
|
|
var ret []int64
|
|
var maps []orm.Params
|
|
_, err := o.QueryTable(notif).Values(&maps)
|
|
if err == nil {
|
|
for _, m := range maps {
|
|
ret = append(ret, utils.GetInt(m, "Id"))
|
|
}
|
|
}
|
|
return ret
|
|
}
|
|
|
|
func GetAllNotificationCondition() []NotificationCondition {
|
|
o := orm.NewOrm()
|
|
o.Using(database.Alias)
|
|
|
|
notif := new(NotificationCondition)
|
|
var maps []orm.Params
|
|
var ret []NotificationCondition
|
|
_, err := o.QueryTable(notif).Values(&maps)
|
|
if err == nil {
|
|
for _, m := range maps {
|
|
n := new(NotificationCondition)
|
|
n.Id = utils.GetInt(m, "Id")
|
|
n.UserId = utils.GetInt(m, "UserId")
|
|
n.Condition = utils.GetString(m, "Condition")
|
|
n.Value = utils.GetInt(m, "Value")
|
|
ret = append(ret, *n)
|
|
}
|
|
}
|
|
|
|
return ret
|
|
}
|
|
|
|
func GetNotificationConditionByUser(idUser int64) []NotificationCondition {
|
|
o := orm.NewOrm()
|
|
o.Using(database.Alias)
|
|
|
|
var ret []NotificationCondition
|
|
var maps []orm.Params
|
|
_, err := o.QueryTable(new(NotificationCondition)).Filter("UserId", idUser).Values(&maps)
|
|
if err == nil {
|
|
for _, m := range maps {
|
|
n := new(NotificationCondition)
|
|
n.Id = utils.GetInt(m, "Id")
|
|
n.UserId = utils.GetInt(m, "UserId")
|
|
n.Condition = utils.GetString(m, "Condition")
|
|
n.Value = utils.GetInt(m, "Value")
|
|
ret = append(ret, *n)
|
|
}
|
|
}
|
|
|
|
return ret
|
|
}
|
|
|
|
func GetNotificationCondition(id int64) *NotificationCondition {
|
|
o := orm.NewOrm()
|
|
o.Using(database.Alias)
|
|
|
|
var ret = new(NotificationCondition)
|
|
var maps []orm.Params
|
|
_, err := o.QueryTable(new(NotificationCondition)).Filter("Id", id).Values(&maps)
|
|
if err == nil {
|
|
for _, m := range maps {
|
|
ret.Id = utils.GetInt(m, "Id")
|
|
ret.UserId = utils.GetInt(m, "UserId")
|
|
ret.Condition = utils.GetString(m, "Condition")
|
|
ret.Value = utils.GetInt(m, "Value")
|
|
}
|
|
}
|
|
|
|
return ret
|
|
}
|
|
|
|
func (n *NotificationCondition) IsConditionValidate(val int64) bool {
|
|
ret := false
|
|
|
|
if n.Condition == UPPER {
|
|
ret = (val > n.Value)
|
|
} else if n.Condition == UPPER_OR_EQUALS {
|
|
ret = (val >= n.Value)
|
|
} else if n.Condition == LOWER {
|
|
ret = (val < n.Value)
|
|
} else if n.Condition == LOWER_OR_EQUALS {
|
|
ret = (val <= n.Value)
|
|
} else if n.Condition == EQUALS {
|
|
ret = (val == n.Value)
|
|
} else if n.Condition == NOT_EQUALS {
|
|
ret = (val != n.Value)
|
|
}
|
|
|
|
return ret
|
|
}
|
|
|
|
func (n *NotificationCondition) Notify(val int64, message string) {
|
|
if n.IsConditionValidate(val) {
|
|
u := user.GetUser(n.UserId)
|
|
if u != nil && u.JID != "" {
|
|
xmpp_manager.SendMessage(u.JID, "", "["+n.Condition+" "+strconv.FormatInt(n.Value, 10)+"] "+message)
|
|
}
|
|
}
|
|
}
|