mirror of https://github.com/Budibase/budibase.git
12 changed files with 194 additions and 24 deletions
@ -0,0 +1,24 @@ |
|||
import { writable } from "svelte/store" |
|||
import { API } from "api" |
|||
import { update } from "lodash" |
|||
|
|||
export function createGroupsStore() { |
|||
const { subscribe, set } = writable([]) |
|||
|
|||
async function init() { |
|||
const users = await API.getGroups() |
|||
set(users) |
|||
} |
|||
|
|||
async function save(data) { |
|||
await API.saveGroup(data) |
|||
} |
|||
|
|||
return { |
|||
subscribe, |
|||
init, |
|||
save, |
|||
} |
|||
} |
|||
|
|||
export const groups = createGroupsStore() |
|||
@ -0,0 +1,18 @@ |
|||
export const buildGroupsEndpoints = API => ({ |
|||
/** |
|||
* Creates or updates a user in the current tenant. |
|||
* @param user the new user to create |
|||
*/ |
|||
saveGroup: async group => { |
|||
return await API.post({ |
|||
url: "/api/global/groups", |
|||
body: group, |
|||
}) |
|||
}, |
|||
getGroups: async () => { |
|||
return await API.get({ |
|||
url: "/api/global/groups", |
|||
}) |
|||
|
|||
} |
|||
}) |
|||
@ -0,0 +1,58 @@ |
|||
const { |
|||
generateUserGroupID, |
|||
getUserGroupsParams |
|||
} = require("@budibase/backend-core/db") |
|||
const { Configs } = require("../../../constants") |
|||
const email = require("../../../utilities/email") |
|||
const { getGlobalDB, getTenantId } = require("@budibase/backend-core/tenancy") |
|||
const env = require("../../../environment") |
|||
const { |
|||
withCache, |
|||
CacheKeys, |
|||
bustCache, |
|||
} = require("@budibase/backend-core/cache") |
|||
|
|||
|
|||
exports.save = async function (ctx) { |
|||
const db = getGlobalDB() |
|||
|
|||
// Config does not exist yet
|
|||
if (!ctx.request.body._id) { |
|||
ctx.request.body._id = generateUserGroupID(ctx.request.body.name) |
|||
} |
|||
|
|||
try { |
|||
const response = await db.put(ctx.request.body) |
|||
ctx.body = { |
|||
_id: response.id, |
|||
_rev: response.rev, |
|||
} |
|||
} catch (err) { |
|||
ctx.throw(400, err) |
|||
} |
|||
} |
|||
|
|||
exports.fetch = async function (ctx) { |
|||
const db = getGlobalDB() |
|||
console.log('in here') |
|||
const response = await db.allDocs( |
|||
getUserGroupsParams(null, { |
|||
include_docs: true, |
|||
}) |
|||
) |
|||
ctx.body = response.rows.map(row => row.doc) |
|||
|
|||
} |
|||
|
|||
|
|||
exports.destroy = async function (ctx) { |
|||
const db = getGlobalDB() |
|||
const { id, rev } = ctx.params |
|||
|
|||
try { |
|||
await db.remove(id, rev) |
|||
ctx.body = { message: "Group deleted successfully" } |
|||
} catch (err) { |
|||
ctx.throw(err.status, err) |
|||
} |
|||
} |
|||
@ -0,0 +1,27 @@ |
|||
const Router = require("@koa/router") |
|||
const controller = require("../../controllers/global/groups") |
|||
const joiValidator = require("../../../middleware/joi-validator") |
|||
const adminOnly = require("../../../middleware/adminOnly") |
|||
const Joi = require("joi") |
|||
|
|||
const router = Router() |
|||
|
|||
function buildGroupSaveValidation() { |
|||
// prettier-ignore
|
|||
return joiValidator.body(Joi.object({ |
|||
color: Joi.string().required(), |
|||
icon: Joi.string().required(), |
|||
name: Joi.string().required() |
|||
}).required()) |
|||
} |
|||
|
|||
router.post( |
|||
"/api/global/groups", |
|||
adminOnly, |
|||
buildGroupSaveValidation(), |
|||
controller.save |
|||
) |
|||
.get("/api/global/groups", controller.fetch) |
|||
|
|||
|
|||
module.exports = router |
|||
Loading…
Reference in new issue