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  }