Adding extended group functionality

This commit is contained in:
Justin Dalrymple 2017-11-25 18:20:13 -05:00
parent 84eef7024f
commit 4e94b6b767
7 changed files with 175 additions and 20 deletions

View File

@ -0,0 +1,42 @@
const BaseModel = require('./BaseModel');
const Utils = require('../Utils');
const ACCESS_LEVELS = {
GUEST: 10,
REPORTER: 20,
DEVELOPER: 30,
MASTER: 40,
OWNER: 50,
};
class GroupAccessRequests extends BaseModel {
constructor(){
this.ACCESS_LEVELS = ACCESS_LEVELS;
}
all(groupId) {
const gId = Utils.parse(groupId);
return this.get(`groups/${gId}/access_requests`);
}
request(groupId) {
const gId = Utils.parse(groupId);
return this.post(`groups/${gId}/access_requests`);
}
approve(groupId, userId, {access_level = 30}) {
const [gId, uId] = [groupId, userId].map(Utils.parse);
return this.post(`groups/${gId}/access_requests/${uId}/approve`, {access_level});
}
deny(groupId, userId) {
const [gId, uId] = [groupId, userId].map(Utils.parse);
return this.delete(`groups/${gId}/access_requests/${uId}/approve`);
}
}
module.exports = GroupAccessRequests;

View File

@ -0,0 +1,41 @@
const BaseModel = require('./BaseModel');
const Utils = require('../Utils');
class GroupMembers extends BaseModel {
all(groupId) {
const gId = Utils.parse(groupId);
return this.get(`groups/${gId}/members`);
}
add(groupId, userId, accessLevel) {
const [gId, uId] = [groupId, userId].map(Utils.parse);
return this.post(`groups/${gId}/members`, {
user_id: uId,
access_level: parseInt(accessLevel, 10),
});
}
edit(groupId, userId, accessLevel) {
const [gId, uId] = [groupId, userId].map(Utils.parse);
return this.put(`groups/${gId}/members/${uId}`, {
access_level: parseInt(accessLevel, 10),
});
}
show(groupId, userId) {
const [gId, uId] = [groupId, userId].map(Utils.parse);
return this.get(`groups/${gId}/members/${uId}`);
}
remove(groupId, userId) {
const [gId, uId] = [groupId, userId].map(Utils.parse);
return this.delete(`groups/${gId}/members/${uId}`);
}
}
module.exports = GroupMembers;

View File

@ -0,0 +1,12 @@
const BaseModel = require('./BaseModel');
const Utils = require('../Utils');
class GroupMilestoneIssues extends BaseModel {
all(grougId, milestoneId) {
const [gId, mId] = [groupId, milestoneId].map(Utils.parse);
return this.get(`groups/${gId}/milestones/${mId}/issues`);
}
}
module.exports = GroupMilestoneIssues;

View File

@ -0,0 +1,12 @@
const BaseModel = require('./BaseModel');
const Utils = require('../Utils');
class GroupMilestoneMergeRequests extends BaseModel {
all(grougId, milestoneId) {
const [gId, mId] = [groupId, milestoneId].map(Utils.parse);
return this.get(`groups/${pId}/milestones/${mId}/merge_requests`);
}
}
module.exports = GroupMilestoneIssues;

View File

@ -0,0 +1,46 @@
const BaseModel = require('./BaseModel');
const Utils = require('../Utils');
class GroupMilestones extends BaseModel {
constructor(..args){
this.issues = new GroupMilestoneIssues(..args);
this.mergeRequests = new GroupMilestoneMergeRequests(..args);
}
all(groupId, options = {}) {
const pId = Utils.parse(groupId);
return this.get(`groups/${pId}/milestones`, options);
}
show(groupId, milestoneId) {
const [pId, mId] = [groupId, milestoneId].map(Utils.parse);
return this.get(`groups/${pId}/milestones/${mId}`);
}
create(groupId, title, { description, due_date, start_date }) {
const pId = Utils.parse(groupId);
return this.post(`groups/${pId}/milestones`, {
title,
description,
due_date,
start_date,
});
}
update(groupId, milestoneId, { title, description, due_date, start_date, state_event }) {
const [pId, mId] = [projectId, milestoneId].map(Utils.parse);
return this.put(`groups/${pId}/milestones/${mId}`, {
title,
description,
due_date,
start_date,
state_event,
});
}
}
module.exports = GroupMilestones;

View File

@ -0,0 +1,18 @@
const BaseModel = require('./BaseModel');
const Utils = require('../Utils');
class GroupProjects extends BaseModel {
all(groupId, options = {}) {
const gId = Utils.parse(groupId);
return this.get(`groups/${gId}/projects`, options);
}
add(groupId, projectId) {
const [gId, pId] = [groupId, projectId].map(Utils.parse);
return this.post(`groups/${gId}/projects/${pId}`);
}
}
module.exports = GroupProjects;

View File

@ -1,31 +1,15 @@
const BaseModel = require('./BaseModel');
const Utils = require('../Utils');
const ACCESS_LEVELS = {
GUEST: 10,
REPORTER: 20,
DEVELOPER: 30,
MASTER: 40,
OWNER: 50,
};
function hasAccess(accessLevel) {
let valid = false;
Object.values(ACCESS_LEVELS).forEach((level) => {
if (accessLevel === level) {
valid = true;
}
});
if (!valid) throw new Error(`\`accessLevel\` must be one of ${JSON.stringify(ACCESS_LEVELS)}`);
}
class Groups extends BaseModel {
constructor(...args) {
super(...args);
this.access_levels = ACCESS_LEVELS;
this.milestones = new GroupMilestones(...args);
this.members = new GroupMembers(...args);
this.projects = new GroupProjects(...args);
this.accessLevels = new GroupAccessLevels(...args);
}
all(options = {}) {