/
retrieve_room_own_permissions.go
107 lines (97 loc) · 1.89 KB
/
retrieve_room_own_permissions.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
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
package room
import (
"database/sql"
"github.com/kaikourok/lunchtote-backend/entity/model"
)
func (db *RoomRepository) RetrieveRoomOwnPermissions(characterId int, roomId int) (permissions *model.RoomMemberPermission, roleType string, banned bool, err error) {
permissions = &model.RoomMemberPermission{}
row := db.QueryRowx(`
SELECT
write,
ban,
invite,
use_reply,
use_secret,
delete_other_message,
create_children_room,
type
FROM
rooms_members
WHERE
room = $1 AND member = $2
`, roomId, characterId)
err = row.Scan(
&permissions.Write,
&permissions.Ban,
&permissions.Invite,
&permissions.UseReply,
&permissions.UseSecret,
&permissions.DeleteOtherMessage,
&permissions.CreateChildrenRoom,
&roleType,
)
if err == nil {
return permissions, roleType, false, nil
} else if err != sql.ErrNoRows {
return nil, "", false, err
}
row = db.QueryRowx(`
SELECT
EXISTS (
SELECT
*
FROM
rooms_invited_characters
WHERE
room = $1 AND invited = $2
),
EXISTS (
SELECT
*
FROM
rooms_banned_characters
WHERE
room = $1 AND banned = $2
);
`, roomId, characterId)
var isInvited, isBanned bool
err = row.Scan(&isInvited, &isBanned)
if err != nil {
return nil, "", false, err
}
if isBanned {
return nil, "", true, err
}
if isInvited {
roleType = "INVITED"
} else {
roleType = "VISITOR"
}
row = db.QueryRowx(`
SELECT
write,
ban,
invite,
use_reply,
use_secret,
delete_other_message,
create_children_room
FROM
rooms_roles
WHERE
room = $1 AND type = $2
`, roomId, roleType)
err = row.Scan(
&permissions.Write,
&permissions.Ban,
&permissions.Invite,
&permissions.UseReply,
&permissions.UseSecret,
&permissions.DeleteOtherMessage,
&permissions.CreateChildrenRoom,
)
if err != nil {
return nil, "", false, err
}
return permissions, roleType, false, nil
}