mirror of
				https://gitlab.com/comunic/comunicapiv2
				synced 2025-11-04 11:34:04 +00:00 
			
		
		
		
	Add membership information when getting group information
This commit is contained in:
		@@ -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
 | 
				
			||||||
		}
 | 
							}
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
@@ -11,4 +11,29 @@ export enum GroupMembershipLevels {
 | 
				
			|||||||
	INVITED = 3,
 | 
						INVITED = 3,
 | 
				
			||||||
	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
 | 
				
			||||||
 | 
							});
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
		Reference in New Issue
	
	Block a user