dkforest

A forum and chat platform (onion)
git clone https://git.dasho.dev/n0tr1v/dkforest.git
Log | Files | Refs | LICENSE

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 }