mirror of https://gitlab.com/litecord/litecord.git
fix channel overwrite creation and constraints
This commit is contained in:
parent
39fd7577b8
commit
db00724379
|
|
@ -278,19 +278,22 @@ async def _mass_chan_update(guild_id, channel_ids: List[Optional[int]]):
|
||||||
async def _process_overwrites(channel_id: int, overwrites: list):
|
async def _process_overwrites(channel_id: int, overwrites: list):
|
||||||
for overwrite in overwrites:
|
for overwrite in overwrites:
|
||||||
|
|
||||||
# 0 for user overwrite, 1 for role overwrite
|
# 0 for member overwrite, 1 for role overwrite
|
||||||
target_type = 0 if overwrite['type'] == 'user' else 1
|
target_type = 0 if overwrite['type'] == 'member' else 1
|
||||||
target_role = None if target_type == 0 else overwrite['id']
|
target_role = None if target_type == 0 else overwrite['id']
|
||||||
target_user = overwrite['id'] if target_type == 0 else None
|
target_user = overwrite['id'] if target_type == 0 else None
|
||||||
|
|
||||||
|
col_name = 'target_user' if target_type == 0 else 'target_role'
|
||||||
|
constraint_name = f'channel_overwrites_target_{col_name}'
|
||||||
|
|
||||||
await app.db.execute(
|
await app.db.execute(
|
||||||
"""
|
f"""
|
||||||
INSERT INTO channel_overwrites
|
INSERT INTO channel_overwrites
|
||||||
(channel_id, target_type, target_role,
|
(channel_id, target_type, target_role,
|
||||||
target_user, allow, deny)
|
target_user, allow, deny)
|
||||||
VALUES
|
VALUES
|
||||||
($1, $2, $3, $4, $5, $6)
|
($1, $2, $3, $4, $5, $6)
|
||||||
ON CONFLICT ON CONSTRAINT channel_overwrites_uniq
|
ON CONFLICT ON CONSTRAINT {constraint_name}
|
||||||
DO
|
DO
|
||||||
UPDATE
|
UPDATE
|
||||||
SET allow = $5, deny = $6
|
SET allow = $5, deny = $6
|
||||||
|
|
|
||||||
|
|
@ -403,9 +403,9 @@ class Storage:
|
||||||
drow = dict(row)
|
drow = dict(row)
|
||||||
|
|
||||||
target_type = drow['target_type']
|
target_type = drow['target_type']
|
||||||
drow['type'] = 'user' if target_type == 0 else 'role'
|
drow['type'] = 'member' if target_type == 0 else 'role'
|
||||||
|
|
||||||
# if type is 0, the overwrite is for a user
|
# if type is 0, the overwrite is for a member
|
||||||
# if type is 1, the overwrite is for a role
|
# if type is 1, the overwrite is for a role
|
||||||
drow['id'] = {
|
drow['id'] = {
|
||||||
0: drow['target_user'],
|
0: drow['target_user'],
|
||||||
|
|
|
||||||
|
|
@ -0,0 +1,10 @@
|
||||||
|
ALTER TABLE channel_overwrites
|
||||||
|
DROP CONSTRAINT IF EXISTS channel_overwrites_uniq;
|
||||||
|
|
||||||
|
ALTER TABLE channel_overwrites
|
||||||
|
ADD CONSTRAINT channel_overwrites_target_role_uniq
|
||||||
|
UNIQUE (channel_id, target_role);
|
||||||
|
|
||||||
|
ALTER TABLE channel_overwrites
|
||||||
|
ADD CONSTRAINT channel_overwrites_target_user_uniq
|
||||||
|
UNIQUE (channel_id, target_user);
|
||||||
Loading…
Reference in New Issue