Commit dfd50055 authored by 贾浩@五瓣科技's avatar 贾浩@五瓣科技

update dbmodel

parent 8937e78e
......@@ -45,19 +45,19 @@ func (d *Dao) GetUserActiveMsgCount(userId, chatId, unixDay int) (count int, err
return a.MsgCount, err
}
func (d *Dao) UserExist(userId, chatId int) (exist bool, username string, err error) {
a := dbModel.User{}
func (d *Dao) UserExist(userId, chatId int) (dbUser *dbModel.User, err error) {
dbUser = &dbModel.User{}
err = d.db.Model(&dbModel.User{}).
Select("username").
Select([]string{"username", "first_name", "last_name"}).
Where("user_id = ? AND chat_id = ? AND left_at IS NULL", userId, chatId).
First(&a).Error
First(&dbUser).Error
if err == gorm.ErrRecordNotFound {
return false, "", nil
return nil, nil
}
return err == nil, a.Username, err
return dbUser, err
}
func (d *Dao) UpdateUserName(userId, chatId int, username string) (err error) {
func (d *Dao) UpdateUserName(userId, chatId int, username, firstName, lastName string) (err error) {
return d.db.Model(&dbModel.User{}).
Where("user_id = ? AND chat_id = ? AND left_at IS NULL", userId, chatId).
Update("username", username).Error
......
......@@ -44,7 +44,6 @@ func (m *Messenger) Start() {
log.WithField("chat_id", update.Message.Chat.ID).Debug("not supported chat")
continue
}
var caught bool
caught = m.handleUserLeft(update.Message)
if caught {
......@@ -108,6 +107,8 @@ func (m *Messenger) handleNewUser(msg *tgbotapi.Message) (caught bool) {
UserId: int(user.ID),
ChatId: int(msg.Chat.ID),
Username: user.UserName,
FirstName: user.FirstName,
LastName: user.LastName,
}
if err := m.d.CreateUser(user); err != nil {
log.WithError(err).Error("create user error")
......@@ -148,8 +149,8 @@ func (m *Messenger) handleUserLeft(msg *tgbotapi.Message) (caught bool) {
func (m *Messenger) handleActive(msg *tgbotapi.Message) {
text := msg.Text
if len(text) > 20 {
text = text[:20] + "..."
if len(text) > 30 {
text = text[:30] + "..."
}
log.WithFields(log.Fields{
"user_id": msg.From.ID,
......@@ -166,24 +167,27 @@ func (m *Messenger) handleActive(msg *tgbotapi.Message) {
return
}
exist, username, err := m.d.UserExist(int(msg.From.ID), int(msg.Chat.ID))
dbUser, err := m.d.UserExist(int(msg.From.ID), int(msg.Chat.ID))
if err != nil {
log.WithError(err).Error("exist user error")
return
}
if err == nil && !exist {
if err == nil && dbUser == nil {
err = m.d.CreateUser(&dbModel.User{
UserId: int(msg.From.ID),
ChatId: int(msg.Chat.ID),
Username: msg.From.UserName,
FirstName: msg.From.FirstName,
LastName: msg.From.LastName,
})
if err != nil {
log.WithError(err).Error("create user 2 error")
return
}
}
if msg.From.UserName != username && msg.From.UserName != "" && exist {
err = m.d.UpdateUserName(int(msg.From.ID), int(msg.Chat.ID), msg.From.UserName)
if dbUser != nil && (dbUser.Username != msg.From.UserName || dbUser.FirstName != msg.From.FirstName || dbUser.LastName != msg.From.LastName) {
err = m.d.UpdateUserName(int(msg.From.ID), int(msg.Chat.ID), msg.From.UserName, msg.From.FirstName, msg.From.LastName)
if err != nil {
log.WithError(err).Error("update user name error")
return
......@@ -191,8 +195,12 @@ func (m *Messenger) handleActive(msg *tgbotapi.Message) {
log.WithFields(log.Fields{
"user_id": msg.From.ID,
"chat_id": msg.Chat.ID,
"old_name": username,
"new_name": msg.From.UserName,
"old_username": dbUser.Username,
"old_firstname": dbUser.FirstName,
"old_lastname": dbUser.LastName,
"new_username": msg.From.UserName,
"new_firstname": msg.From.FirstName,
"new_lastname": msg.From.LastName,
}).Debug("update user name")
}
......
......@@ -10,6 +10,8 @@ type User struct {
Id int `gorm:"primaryKey;autoIncrement"`
UserId int `gorm:"type:int;uniqueIndex:uidx_uid_cid;not null;comment:telegram用户id"`
Username string `gorm:"type:text;not null;comment:telegram用户名"`
FirstName string `gorm:"type:text;not null;comment:telegram名字"`
LastName string `gorm:"type:text;not null;comment:telegram姓氏"`
ChatId int `gorm:"type:int;uniqueIndex:uidx_uid_cid;not null;comment:telegram群id"`
LeftAt sql.NullTime `gorm:"index;comment:退出时间"`
gorm.Model
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment