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

Get the latest posts of the user

This commit is contained in:
Pierre HUBERT 2020-01-04 11:30:33 +01:00
parent 8ba28a88dc
commit 25159e3718
5 changed files with 95 additions and 3 deletions

View File

@ -64,6 +64,20 @@ export class PostsController {
await this.SendMultiplePosts(h, posts);
}
/**
* Get the list of latest posts
*
* @param h Request handler
*/
public static async GetLatest(h: RequestHandler) {
const startFrom = h.postInt("startFrom", 0);
const includeGroups = h.postBool('include_groups', false);
const posts = await PostsHelper.GetLatest(h.getUserId(), startFrom, 10, includeGroups);
await this.SendMultiplePosts(h, posts);
}
/**
* Send multiple posts to the API

View File

@ -188,6 +188,8 @@ export const Routes : Route[] = [
{path: "/posts/get_group", cb: (h) => PostsController.GetListGroup(h), needLogin: false},
{path: "/posts/get_latest", cb: (h) => PostsController.GetLatest(h)},
// Notifications controller

View File

@ -16,13 +16,15 @@ export class FriendsHelper {
* Get the list of friends of the user
*
* @param userID The ID of the user
* @param onlyAccepted Return only accepted friendship
*/
public static async GetList(userID: number) : Promise<Array<Friend>> {
public static async GetList(userID: number, onlyAccepted = false) : Promise<Array<Friend>> {
const results = await DatabaseHelper.Query({
table: FRIENDS_TABLE + " f",
where: {
ID_personne: userID,
},
customWhere: onlyAccepted ? "actif = 1" : "",
joins: [
{
table: USER_TABLE + " u",

View File

@ -68,13 +68,15 @@ export class GroupsHelper {
* Get the list of groups of a user
*
* @param userID Target user ID
* @param onlyFollowed Include only the groups the user follow
*/
public static async GetListUser(userID: number) : Promise<Array<number>> {
public static async GetListUser(userID: number, onlyFollowed: boolean = false) : Promise<Array<number>> {
const list = await DatabaseHelper.Query({
table: GROUPS_MEMBERS_TABLE,
where: {
user_id: userID
user_id: userID,
},
customWhere: onlyFollowed ? "following = 1" : "",
fields: ["groups_id"]
});

View File

@ -158,6 +158,78 @@ export class PostsHelper {
return results.map((r) => this.DBToPost(r));
}
/**
* Get the latest posts of a user
*
* @param userID The ID of the user making the request
* @param startFrom Startpoint for the research
* @param limit Limit of the research (default: 10)
* @param includeGroups Specify whether groups can be selected too or not
*/
public static async GetLatest(userID: number, startFrom: number = 10,
limit: number = 10, includeGroups: boolean = false) {
if(limit < 1)
throw new Error("Limit of the query must be greater than 0!");
const visibilityLevel = PostVisibilityLevel.VISIBILITY_FRIENDS;
// Get the list of friends of the user
const friendsList = await FriendsHelper.GetList(userID, true);
// Prepare the request on the database
// === Membership condition ===
let customWhere = "(";
// === FRIENDS POSTS ===
customWhere += "(group_id = 0 AND niveau_visibilite <= ? AND (ID_personne = ?";
let customWhereArgs = [visibilityLevel.toString(), userID.toString()];
friendsList.forEach((f) => {
customWhere += " OR ID_personne = ?";
customWhereArgs.push(f.friendID.toString());
});
customWhere += "))"
// === FRIENDS POSTS ===
// === GROUPS POSTS ===
if(includeGroups) {
const groups = await GroupsHelper.GetListUser(userID, true);
groups.forEach((groupID) => {
customWhere += " OR group_id = ? ";
customWhereArgs.push(groupID.toString());
})
}
// == /GROUPS POSTS ===
customWhere += ")";
// === /Membership condition ===
// === START POINT ===
if(startFrom > 0) {
customWhere += "AND ID <= ?";
customWhereArgs.push(startFrom.toString());
}
// == /START POINT ===
const results = await DatabaseHelper.Query({
table: TABLE_NAME,
customWhere: customWhere,
customWhereArgs: customWhereArgs,
order: "ID DESC",
limit: limit
});
return results.map((r) => this.DBToPost(r));
}
/**
* Get the access level of a user over a post
*