tableChatRoomGroups.go (2988B)
1 package database 2 3 import ( 4 "github.com/sirupsen/logrus" 5 "time" 6 ) 7 8 type GroupID int64 9 10 type ChatRoomGroup struct { 11 ID GroupID 12 RoomID RoomID 13 Name string 14 Color string 15 Locked bool 16 CreatedAt time.Time 17 } 18 19 func (g *ChatRoomGroup) DoSave(db *DkfDB) { 20 if err := db.db.Save(g).Error; err != nil { 21 logrus.Error(err) 22 } 23 } 24 25 type ChatRoomUserGroup struct { 26 GroupID GroupID 27 RoomID RoomID 28 UserID UserID 29 User User 30 } 31 32 func (d *DkfDB) GetUserRoomGroups(userID UserID, roomID RoomID) (out []ChatRoomUserGroup, err error) { 33 err = d.db.Find(&out, "user_id = ? AND room_id = ?", userID, roomID).Error 34 return 35 } 36 37 func (d *DkfDB) GetUserRoomGroupsIDs(userID UserID, roomID RoomID) (out []GroupID, err error) { 38 err = d.db.Model(&ChatRoomUserGroup{}). 39 Where("user_id = ? AND room_id = ?", userID, roomID). 40 Pluck("group_id", &out). 41 Error 42 return 43 } 44 45 func (d *DkfDB) GetRoomGroupByName(roomID RoomID, groupName string) (out ChatRoomGroup, err error) { 46 err = d.db.First(&out, "room_id = ? AND name = ?", roomID, groupName).Error 47 return 48 } 49 50 func (d *DkfDB) GetRoomGroupByID(roomID RoomID, groupID GroupID) (out ChatRoomGroup, err error) { 51 err = d.db.First(&out, "room_id = ? AND id = ?", roomID, groupID).Error 52 return 53 } 54 55 func (d *DkfDB) IsUserInGroupByID(userID UserID, groupID GroupID) bool { 56 var count int64 57 d.db.Model(ChatRoomUserGroup{}).Where("group_id = ? AND user_id = ?", groupID, userID).Count(&count) 58 return count == 1 59 } 60 61 func (d *DkfDB) DeleteChatRoomGroup(roomID RoomID, name string) (err error) { 62 err = d.db.Delete(&ChatRoomGroup{}, "room_id = ? AND name = ?", roomID, name).Error 63 return 64 } 65 66 func (d *DkfDB) DeleteChatRoomGroups(roomID RoomID) (err error) { 67 err = d.db.Delete(&ChatRoomGroup{}, "room_id = ?", roomID).Error 68 return 69 } 70 71 func (d *DkfDB) CreateChatRoomGroup(roomID RoomID, name, color string) (out ChatRoomGroup, err error) { 72 out = ChatRoomGroup{Name: name, Color: color, RoomID: roomID} 73 err = d.db.Create(&out).Error 74 return 75 } 76 77 func (d *DkfDB) AddUserToRoomGroup(roomID RoomID, groupID GroupID, userID UserID) (out ChatRoomUserGroup, err error) { 78 out = ChatRoomUserGroup{GroupID: groupID, RoomID: roomID, UserID: userID} 79 err = d.db.Create(&out).Error 80 return 81 } 82 83 func (d *DkfDB) RmUserFromRoomGroup(roomID RoomID, groupID GroupID, userID UserID) (err error) { 84 err = d.db.Delete(&ChatRoomUserGroup{}, "user_id = ? AND group_id = ? AND room_id = ?", userID, groupID, roomID).Error 85 return 86 } 87 88 func (d *DkfDB) ClearRoomGroup(roomID RoomID, groupID GroupID) (err error) { 89 err = d.db.Delete(&ChatRoomUserGroup{}, "group_id = ? AND room_id = ?", groupID, roomID).Error 90 return 91 } 92 93 func (d *DkfDB) GetRoomGroups(roomID RoomID) (out []ChatRoomGroup, err error) { 94 err = d.db.Find(&out, "room_id = ?", roomID).Error 95 return 96 } 97 98 func (d *DkfDB) GetRoomGroupUsers(roomID RoomID, groupID GroupID) (out []ChatRoomUserGroup, err error) { 99 err = d.db.Where("room_id = ? AND group_id = ?", roomID, groupID).Preload("User").Find(&out).Error 100 return 101 }