forked from tsai/budibase
2 changed files with 10 additions and 114 deletions
@ -1,104 +0,0 @@ |
|||
import { UserGroup } from "@budibase/types" |
|||
const { difference } = require("lodash/fp") |
|||
|
|||
const { events } = require("@budibase/backend-core") |
|||
const { getGlobalDB } = require("@budibase/backend-core/tenancy") |
|||
const { groups } = require("@budibase/pro") |
|||
|
|||
exports.save = async function (ctx: any) { |
|||
const db = getGlobalDB() |
|||
let group: UserGroup = ctx.request.body |
|||
const oldGroup: UserGroup = await db.get(group._id) |
|||
|
|||
let eventFns = [] |
|||
// Config does not exist yet
|
|||
if (!group._id) { |
|||
group._id = groups.generateUserGroupID(ctx.request.body.name) |
|||
eventFns.push(() => events.group.created(group)) |
|||
} else { |
|||
// Get the diff between the old users and new users for
|
|||
// event processing purposes
|
|||
let uniqueOld = group.users.filter(g => { |
|||
return !oldGroup.users.some(og => { |
|||
return g._id == og._id |
|||
}) |
|||
}) |
|||
|
|||
let uniqueNew = oldGroup.users.filter(g => { |
|||
return !group.users.some(og => { |
|||
return g._id == og._id |
|||
}) |
|||
}) |
|||
let newUsers = uniqueOld.concat(uniqueNew) |
|||
|
|||
eventFns.push(() => events.group.updated(group)) |
|||
|
|||
if (group.users.length < oldGroup.users.length) { |
|||
eventFns.push(() => |
|||
events.group.usersDeleted( |
|||
newUsers.map(u => u.email), |
|||
group |
|||
) |
|||
) |
|||
} else if (group.users.length > oldGroup.users.length) { |
|||
eventFns.push(() => |
|||
events.group.usersAdded( |
|||
newUsers.map(u => u.email), |
|||
group |
|||
) |
|||
) |
|||
} |
|||
|
|||
if (JSON.stringify(oldGroup.roles) !== JSON.stringify(group.roles)) { |
|||
eventFns.push(() => events.group.permissionsEdited(group.roles)) |
|||
} |
|||
} |
|||
|
|||
try { |
|||
for (const fn of eventFns) { |
|||
await fn() |
|||
} |
|||
const response = await db.put(group) |
|||
ctx.body = { |
|||
_id: response.id, |
|||
_rev: response.rev, |
|||
} |
|||
} catch (err) { |
|||
ctx.throw(400, err) |
|||
} |
|||
} |
|||
|
|||
exports.fetch = async function (ctx: any) { |
|||
const db = getGlobalDB() |
|||
const response = await db.allDocs( |
|||
groups.getUserGroupsParams(null, { |
|||
include_docs: true, |
|||
}) |
|||
) |
|||
ctx.body = response.rows.map((row: any) => row.doc) |
|||
} |
|||
|
|||
exports.destroy = async function (ctx: any) { |
|||
const db = getGlobalDB() |
|||
const { id, rev } = ctx.params |
|||
const group = await db.get(id) |
|||
try { |
|||
await db.remove(id, rev) |
|||
await events.group.deleted(group) |
|||
ctx.body = { message: "Group deleted successfully" } |
|||
} catch (err: any) { |
|||
ctx.throw(err.status, err) |
|||
} |
|||
} |
|||
|
|||
/** |
|||
* Gets a group by ID from the global database. |
|||
*/ |
|||
exports.find = async function (ctx: any) { |
|||
const db = getGlobalDB() |
|||
try { |
|||
ctx.body = await db.get(ctx.params.id) |
|||
} catch (err: any) { |
|||
ctx.throw(err.status, err) |
|||
} |
|||
} |
|||
Loading…
Reference in new issue