1
0
mirror of https://gitlab.com/comunic/comunicapiv2 synced 2024-11-22 05:19:22 +00:00

Can get all the membership of a user

This commit is contained in:
Pierre HUBERT 2019-12-28 16:52:52 +01:00
parent fe11162953
commit 65d07f0f4a
6 changed files with 133 additions and 0 deletions

View File

@ -0,0 +1,24 @@
import { Friend } from "../entities/Friend";
/**
* Friends controller
*
* @author Pierre HUBERT
*/
export class FriendsController {
/**
* Turn a friend object into an API entry
*
* @param friend Friend object to transform
*/
public static FriendToAPI(friend: Friend) : any {
return {
ID_friend: friend.friendID,
accepted: friend.accepted,
time_last_activity: friend.lastActivityTime
}
}
}

View File

@ -7,6 +7,7 @@ import { SearchController } from "./SearchController";
import { GroupsController } from "./GroupsController";
import { NotificationsController } from "./NotificationsController";
import { VirtualDirectoryController } from "./VirtualDirectoryController";
import { WebAppControllers } from "./WebAppController";
/**
* Controllers routes
@ -152,4 +153,9 @@ export const Routes : Route[] = [
{path: "/virtualDirectory/find", cb: (h) => VirtualDirectoryController.Find(h)},
// Web app controller
{path: "/webApp/getMemberships", cb: (h) => WebAppControllers.GetMemberships(h)},
]

View File

@ -0,0 +1,36 @@
import { RequestHandler } from "../entities/RequestHandler";
import { WebappHelper } from "../helpers/WebappHelper";
import { UserMembershipType } from "../entities/UserMembershipEntry";
import { FriendsController } from "./FriendsController";
import { Friend } from "../entities/Friend";
/**
* Web application controllers
*
* @author Pierre HUBERT
*/
export class WebAppControllers {
/**
* Get the memberships of the user
*
* @param h Request handler
*/
public static async GetMemberships(h: RequestHandler) {
const list = await WebappHelper.GetUserMemberships(h.getUserId());
h.send(list.map((l) => l.type == UserMembershipType.FRIEND ? {
// In case of friend
type: "friend",
friend: FriendsController.FriendToAPI(<Friend>l.el)
} : {
// In case of group
type: "group",
id: l.el,
last_activity: l.lastActivity
}));
}
}

View File

@ -0,0 +1,17 @@
import { Friend } from "./Friend";
/**
* Get information about a membership
*
* @author Pierre HUBERT
*/
export enum UserMembershipType { GROUP, FRIEND }
export class UserMembershipEntry {
constructor(
public lastActivity: number,
public el: Friend | number,
public type: UserMembershipType
) {}
}

View File

@ -454,6 +454,16 @@ export class GroupsHelper {
});
}
/**
* Get the last activity time of a group
*
* @param groupID Target group ID
*/
public static async GetLastActivity(groupID: number) : Promise<number> {
// TODO : implement
return groupID;
}
/**
* Turn a database row into a {GroupInfo} object
*

View File

@ -0,0 +1,40 @@
import { UserMembershipEntry, UserMembershipType } from "../entities/UserMembershipEntry";
import { FriendsHelper } from "./FriendsHelper";
import { GroupsHelper } from "./GroupsHelper";
/**
* Web applications helper
*
* @author Pierre HUBERT
*/
export class WebappHelper {
/**
* Get all the membership of a user
*
* @param userID Target user ID
*/
public static async GetUserMemberships(userID: number) : Promise<Array<UserMembershipEntry>> {
// Get the list of friends of the user
const friendsList = await FriendsHelper.GetList(userID);
const groupsList = await GroupsHelper.GetListUser(userID);
const list : Array<UserMembershipEntry> = [];
// Add friends to the list
friendsList.forEach((f) => list.push(new UserMembershipEntry(
f.lastActivityTime, f, UserMembershipType.FRIEND)));
// Add groups to the list
for(const g of groupsList) list.push(new UserMembershipEntry(
await GroupsHelper.GetLastActivity(g), g, UserMembershipType.GROUP));
// Sort entries by latest activities
list.sort((a, b) => b.lastActivity - a.lastActivity);
return list;
}
}