-
Notifications
You must be signed in to change notification settings - Fork 357
/
chat.editChatTitle_handler.go
80 lines (70 loc) · 2.16 KB
/
chat.editChatTitle_handler.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
/*
* Created from 'scheme.tl' by 'mtprotoc'
*
* Copyright (c) 2021-present, Teamgram Studio (https://teamgram.io).
* All rights reserved.
*
* Author: teamgramio (teamgram.io@gmail.com)
*/
package core
import (
"context"
"github.com/teamgram/marmota/pkg/stores/sqlx"
"time"
"github.com/teamgram/proto/mtproto"
"github.com/teamgram/teamgram-server/app/service/biz/chat/chat"
)
// ChatEditChatTitle
// chat.editChatTitle chat_id:long edit_user_id:long title:string = MutableChat;
func (c *ChatCore) ChatEditChatTitle(in *chat.TLChatEditChatTitle) (*mtproto.MutableChat, error) {
var (
now = time.Now().Unix()
chat2 *mtproto.MutableChat
me *mtproto.ImmutableChatParticipant
err error
chatId, editUserId = in.ChatId, in.EditUserId
)
if in.Title == "" {
err = mtproto.ErrChatTitleEmpty
c.Logger.Errorf("chat.editChatTitle - error: %v", err)
return nil, err
}
chat2, err = c.svcCtx.Dao.GetMutableChat(c.ctx, chatId, editUserId)
if err != nil {
c.Logger.Errorf("chat.editChatTitle - error: %v", err)
return nil, err
}
if chat2.Chat.Title == in.Title {
err = mtproto.ErrChatNotModified
c.Logger.Errorf("chat.editChatTitle - error: %v", err)
return nil, err
}
me, _ = chat2.GetImmutableChatParticipant(editUserId)
if me == nil || me.State != mtproto.ChatMemberStateNormal {
err = mtproto.ErrInputUserDeactivated
c.Logger.Errorf("chat.editChatTitle - error: %v", err)
return nil, err
}
// TODO(@benqi): check
// 400 CHAT_ADMIN_REQUIRED You must be an admin in this chat to do this
if !me.CanChangeInfo() {
err = mtproto.ErrChatAdminRequired
c.Logger.Errorf("chat.editChatTitle - error: %v", err)
return nil, err
}
_, _, err = c.svcCtx.Dao.CachedConn.Exec(
c.ctx,
func(ctx context.Context, conn *sqlx.DB) (int64, int64, error) {
rowAffected, err2 := c.svcCtx.Dao.ChatsDAO.UpdateTitle(c.ctx, in.Title, chatId)
return 0, rowAffected, err2
},
c.svcCtx.Dao.GetChatCacheKey(chatId))
if err != nil {
c.Logger.Errorf("chat.editChatTitle - error: %v", err)
return nil, err
}
chat2.Chat.Title = in.Title
chat2.Chat.Version += 1
chat2.Chat.Date = now
return chat2, nil
}