mirror of
https://gitlab.com/comunic/comunicapiv2
synced 2024-11-26 07:19:23 +00:00
Can get all the membership of a user
This commit is contained in:
parent
fe11162953
commit
65d07f0f4a
24
src/controllers/FriendsController.ts
Normal file
24
src/controllers/FriendsController.ts
Normal 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
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
@ -7,6 +7,7 @@ import { SearchController } from "./SearchController";
|
|||||||
import { GroupsController } from "./GroupsController";
|
import { GroupsController } from "./GroupsController";
|
||||||
import { NotificationsController } from "./NotificationsController";
|
import { NotificationsController } from "./NotificationsController";
|
||||||
import { VirtualDirectoryController } from "./VirtualDirectoryController";
|
import { VirtualDirectoryController } from "./VirtualDirectoryController";
|
||||||
|
import { WebAppControllers } from "./WebAppController";
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Controllers routes
|
* Controllers routes
|
||||||
@ -152,4 +153,9 @@ export const Routes : Route[] = [
|
|||||||
|
|
||||||
{path: "/virtualDirectory/find", cb: (h) => VirtualDirectoryController.Find(h)},
|
{path: "/virtualDirectory/find", cb: (h) => VirtualDirectoryController.Find(h)},
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
// Web app controller
|
||||||
|
{path: "/webApp/getMemberships", cb: (h) => WebAppControllers.GetMemberships(h)},
|
||||||
|
|
||||||
]
|
]
|
36
src/controllers/WebAppController.ts
Normal file
36
src/controllers/WebAppController.ts
Normal 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
|
||||||
|
}));
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
17
src/entities/UserMembershipEntry.ts
Normal file
17
src/entities/UserMembershipEntry.ts
Normal 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
|
||||||
|
) {}
|
||||||
|
}
|
@ -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
|
* Turn a database row into a {GroupInfo} object
|
||||||
*
|
*
|
||||||
|
40
src/helpers/WebappHelper.ts
Normal file
40
src/helpers/WebappHelper.ts
Normal 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;
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
Loading…
Reference in New Issue
Block a user