import { RequestHandler } from "../entities/RequestHandler"; import { GroupsHelper } from "../helpers/GroupsHelper"; import { GroupsAccessLevel, GroupInfo, GroupVisibilityLevel, GroupPostsCreationLevel, GroupRegistrationLevel } from "../entities/Group"; import { GroupMembershipLevels } from "../entities/GroupMember"; /** * Groups API controller * * @author Pierre HUBERT */ /** * API groups registration levels */ const GROUPS_REGISTRATION_LEVELS = []; GROUPS_REGISTRATION_LEVELS[GroupRegistrationLevel.OPEN_REGISTRATION] = "open"; GROUPS_REGISTRATION_LEVELS[GroupRegistrationLevel.MODERATED_REGISTRATION] = "moderated"; GROUPS_REGISTRATION_LEVELS[GroupRegistrationLevel.CLOSED_REGISTRATION] = "closed"; /** * API groups membership levels */ const GROUPS_MEMBERSHIP_LEVELS = []; GROUPS_MEMBERSHIP_LEVELS[GroupMembershipLevels.ADMINISTRATOR] = "administrator"; GROUPS_MEMBERSHIP_LEVELS[GroupMembershipLevels.MODERATOR] = "moderator"; GROUPS_MEMBERSHIP_LEVELS[GroupMembershipLevels.MEMBER] = "member"; GROUPS_MEMBERSHIP_LEVELS[GroupMembershipLevels.INVITED] = "invited"; GROUPS_MEMBERSHIP_LEVELS[GroupMembershipLevels.PENDING] = "pending"; GROUPS_MEMBERSHIP_LEVELS[GroupMembershipLevels.VISITOR] = "visitor"; /** * API groups visibility levels */ const GROUPS_VISIBILITY_LEVELS = []; GROUPS_VISIBILITY_LEVELS[GroupVisibilityLevel.OPEN_GROUP] = "open"; GROUPS_VISIBILITY_LEVELS[GroupVisibilityLevel.PRIVATE_GROUP] = "private"; GROUPS_VISIBILITY_LEVELS[GroupVisibilityLevel.SECRETE_GROUP] = "secrete"; /** * API posts creation levels */ const GROUPS_POSTS_LEVELS = []; GROUPS_POSTS_LEVELS[GroupPostsCreationLevel.POSTS_LEVEL_MODERATORS] = "moderators"; GROUPS_POSTS_LEVELS[GroupPostsCreationLevel.POSTS_LEVEL_ALL_MEMBERS] = "members"; export class GroupsController { /** * Get the list of groups of the user * * @param h Request handler */ public static async GetListUser(h: RequestHandler) { h.send(await GroupsHelper.GetListUser(h.getUserId())); } /** * Get information about a single group * * @param h Request handler */ public static async GetInfoSingle(h: RequestHandler) { const groupID = await h.postGroupIDWithAccess("id", GroupsAccessLevel.LIMITED_ACCESS); const groupInfo = await GroupsHelper.GetInfo(groupID); h.send(this.GroupInfoToAPI(groupInfo)); } /** * Turn a GroupInfo object into a valid API object * * @param info Information about the group * @returns Generated object */ private static GroupInfoToAPI(info: GroupInfo) : any { return { id: info.id, name: info.name, icon_url: info.logoURL, number_members: info.membersCount, visibility: GROUPS_VISIBILITY_LEVELS[info.visiblity], registration_level: GROUPS_REGISTRATION_LEVELS[info.registrationLevel], posts_level: GROUPS_POSTS_LEVELS[info.postsCreationLevel], virtual_directory: info.virtualDirectory, } } }