github.com/insionng/yougam@v0.0.0-20170714101924-2bc18d833463/models/message.go (about) 1 package models 2 3 type Message struct { 4 Id int64 5 Key string `xorm:"index"` 6 Uid int64 `xorm:"index"` //发送者之用户ID 7 Sender string `xorm:"index"` //发送者之用户名称 8 Avatar string `xorm:"index"` //发送者之头像 9 Receiver string `xorm:"index"` //接收者之用户名称 10 Content string `xorm:"index"` //搜索功能需要索引 11 Created int64 `xorm:"index"` 12 } 13 14 func DelMessage(id int64) error { 15 if row, err := Engine.Id(id).Delete(new(Message)); (err != nil) || (row <= 0) { 16 return err 17 } else { 18 return nil 19 } 20 } 21 22 func GetMessages(offset, limit int, field string) (*[]*Message, error) { 23 msgs := new([]*Message) 24 err := Engine.Limit(limit, offset).Desc(field).Find(msgs) 25 return msgs, err 26 } 27 28 func GetMessagesViaReceiver(offset, limit int, username, field string) (*[]*Message, error) { 29 msgs := new([]*Message) 30 err := Engine.Where("receiver=?", username).Limit(limit, offset).Desc(field).Find(msgs) 31 return msgs, err 32 } 33 34 func GetMessagesViaReceiverWithSender(offset, limit int, receiver, sender, field string) (*[]*Message, error) { 35 msgs := new([]*Message) 36 var err error 37 if field == "asc" { 38 err = Engine.Where("receiver=? and sender=?", receiver, sender).Limit(limit, offset).Find(msgs) 39 } else { 40 err = Engine.Where("receiver=? and sender=?", receiver, sender).Limit(limit, offset).Desc(field).Find(msgs) 41 } 42 return msgs, err 43 } 44 45 func GetMessagesViaKey(offset, limit int, key, field string) (*[]*Message, error) { 46 msgs := new([]*Message) 47 err := Engine.Where("key=?", key).Limit(limit, offset).Desc(field).Find(msgs) 48 return msgs, err 49 } 50 51 func GetMessage(id int64) (*Message, error) { 52 53 m := &Message{} 54 55 has, err := Engine.Id(id).Get(m) 56 if has { 57 return m, err 58 } else { 59 return nil, err 60 } 61 } 62 63 func GetMessageViaKey(key string) (*Message, error) { 64 65 m := &Message{Key: key} 66 67 has, err := Engine.Get(m) 68 if has { 69 return m, err 70 } else { 71 72 return nil, err 73 } 74 } 75 76 func PostMessage(m *Message) (int64, error) { 77 // 创建 Session 对象 78 sess := Engine.NewSession() 79 defer sess.Close() 80 // 启动事务 81 if err := sess.Begin(); err != nil { 82 return -1, err 83 } 84 85 //执行事务 86 messageid := int64(0) 87 if _, err := sess.Insert(m); err == nil && m != nil { 88 messageid = m.Id 89 } else { 90 // 发生错误时进行回滚 91 sess.Rollback() 92 return -1, err 93 } 94 95 // 提交事务 96 return messageid, sess.Commit() 97 } 98 99 func PutMessage(mid int64, msg *Message) (int64, error) { 100 //覆盖式更新 101 sess := Engine.NewSession() 102 defer sess.Close() 103 // 启动事务 104 if err := sess.Begin(); err != nil { 105 return -1, err 106 } 107 108 //执行事务 109 messageid := int64(0) 110 if row, err := sess.Update(msg, &Message{Id: mid}); err != nil || row <= 0 { 111 sess.Rollback() 112 return -1, err 113 } else { 114 messageid = msg.Id 115 } 116 117 // 提交事务 118 return messageid, sess.Commit() 119 } 120 121 func PutMessageViaKey(key string, msg *Message) (int64, error) { 122 //覆盖式更新 123 sess := Engine.NewSession() 124 defer sess.Close() 125 // 启动事务 126 if err := sess.Begin(); err != nil { 127 return -1, err 128 } 129 130 //执行事务 131 messageid := int64(0) 132 if row, err := sess.Update(msg, &Message{Key: key}); err != nil || row <= 0 { 133 sess.Rollback() 134 return -1, err 135 } else { 136 messageid = msg.Id 137 } 138 139 // 提交事务 140 return messageid, sess.Commit() 141 }