mirror of
https://gitlab.com/comunic/comunicapiv2
synced 2024-11-22 21:39:22 +00:00
Add membership information when getting group information
This commit is contained in:
parent
76b0d9605c
commit
415bd461cc
@ -66,7 +66,7 @@ export class GroupsController {
|
|||||||
const groupID = await h.postGroupIDWithAccess("id", GroupsAccessLevel.LIMITED_ACCESS);
|
const groupID = await h.postGroupIDWithAccess("id", GroupsAccessLevel.LIMITED_ACCESS);
|
||||||
const groupInfo = await GroupsHelper.GetInfo(groupID);
|
const groupInfo = await GroupsHelper.GetInfo(groupID);
|
||||||
|
|
||||||
h.send(this.GroupInfoToAPI(groupInfo));
|
h.send(await this.GroupInfoToAPI(groupInfo, h));
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -75,7 +75,10 @@ export class GroupsController {
|
|||||||
* @param info Information about the group
|
* @param info Information about the group
|
||||||
* @returns Generated object
|
* @returns Generated object
|
||||||
*/
|
*/
|
||||||
private static GroupInfoToAPI(info: GroupInfo) : any {
|
private static async GroupInfoToAPI(info: GroupInfo, h: RequestHandler) : Promise<any> {
|
||||||
|
|
||||||
|
const membership = await GroupsHelper.GetMembershipInfo(info.id, h.getUserId())
|
||||||
|
|
||||||
return {
|
return {
|
||||||
id: info.id,
|
id: info.id,
|
||||||
name: info.name,
|
name: info.name,
|
||||||
@ -84,7 +87,10 @@ export class GroupsController {
|
|||||||
visibility: GROUPS_VISIBILITY_LEVELS[info.visiblity],
|
visibility: GROUPS_VISIBILITY_LEVELS[info.visiblity],
|
||||||
registration_level: GROUPS_REGISTRATION_LEVELS[info.registrationLevel],
|
registration_level: GROUPS_REGISTRATION_LEVELS[info.registrationLevel],
|
||||||
posts_level: GROUPS_POSTS_LEVELS[info.postsCreationLevel],
|
posts_level: GROUPS_POSTS_LEVELS[info.postsCreationLevel],
|
||||||
virtual_directory: info.virtualDirectory,
|
virtual_directory: info.virtualDirectory ? info.virtualDirectory : "null",
|
||||||
|
|
||||||
|
membership: GROUPS_MEMBERSHIP_LEVELS[membership ? membership.level : GroupMembershipLevels.VISITOR],
|
||||||
|
following: membership ? membership.following : false
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
@ -12,3 +12,28 @@ export enum GroupMembershipLevels {
|
|||||||
PENDING = 4, //When the group membership has not been approved yet
|
PENDING = 4, //When the group membership has not been approved yet
|
||||||
VISITOR = 5, //Simple visitor
|
VISITOR = 5, //Simple visitor
|
||||||
}
|
}
|
||||||
|
|
||||||
|
export interface GroupMemberConstructor {
|
||||||
|
id: number,
|
||||||
|
userID: number,
|
||||||
|
groupID: number,
|
||||||
|
timeCreate: number,
|
||||||
|
level: GroupMembershipLevels,
|
||||||
|
following: boolean
|
||||||
|
}
|
||||||
|
|
||||||
|
export class GroupMember implements GroupMemberConstructor {
|
||||||
|
id: number; userID: number;
|
||||||
|
groupID: number;
|
||||||
|
timeCreate: number;
|
||||||
|
level: GroupMembershipLevels;
|
||||||
|
following: boolean;
|
||||||
|
|
||||||
|
constructor(info: GroupMemberConstructor) {
|
||||||
|
for (const key in info) {
|
||||||
|
if (info.hasOwnProperty(key)) {
|
||||||
|
this[key] = info[key];
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
@ -1,6 +1,6 @@
|
|||||||
import { DatabaseHelper } from "./DatabaseHelper";
|
import { DatabaseHelper } from "./DatabaseHelper";
|
||||||
import { GroupsAccessLevel, GroupVisibilityLevel, GroupInfo } from "../entities/Group";
|
import { GroupsAccessLevel, GroupVisibilityLevel, GroupInfo } from "../entities/Group";
|
||||||
import { GroupMembershipLevels } from "../entities/GroupMember";
|
import { GroupMembershipLevels, GroupMember } from "../entities/GroupMember";
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Groups helper
|
* Groups helper
|
||||||
@ -148,6 +148,29 @@ export class GroupsHelper {
|
|||||||
return GroupsAccessLevel.NO_ACCESS;
|
return GroupsAccessLevel.NO_ACCESS;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Get a user membership information
|
||||||
|
*
|
||||||
|
* @param groupID Target group ID
|
||||||
|
* @param userID Target user ID
|
||||||
|
* @returns Membership info / null if none found
|
||||||
|
*/
|
||||||
|
public static async GetMembershipInfo(groupID: number, userID: number): Promise<GroupMember> {
|
||||||
|
const data = await DatabaseHelper.QueryRow({
|
||||||
|
table: GROUPS_MEMBERS_TABLE,
|
||||||
|
where: {
|
||||||
|
groups_id: groupID,
|
||||||
|
user_id: userID
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
if(data == null)
|
||||||
|
return null;
|
||||||
|
|
||||||
|
return this.DbToGroupMember(data);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Count the number of members of a group
|
* Count the number of members of a group
|
||||||
*
|
*
|
||||||
@ -182,4 +205,21 @@ export class GroupsHelper {
|
|||||||
virtualDirectory: (row.virtual_directory != null && row.virtual_directory && row.virtual_directory != "null" ? row.virtual_directory : undefined)
|
virtualDirectory: (row.virtual_directory != null && row.virtual_directory && row.virtual_directory != "null" ? row.virtual_directory : undefined)
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Turn a database entry into a group membership information object
|
||||||
|
*
|
||||||
|
* @param row Database entry
|
||||||
|
* @returns Generated object
|
||||||
|
*/
|
||||||
|
private static async DbToGroupMember(row: any) : Promise<GroupMember> {
|
||||||
|
return new GroupMember({
|
||||||
|
id: row.id,
|
||||||
|
groupID: row.groups_id,
|
||||||
|
userID: row.user_id,
|
||||||
|
timeCreate: row.time_create,
|
||||||
|
level: row.level,
|
||||||
|
following: row.following == 1
|
||||||
|
});
|
||||||
|
}
|
||||||
}
|
}
|
Loading…
Reference in New Issue
Block a user