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:
parent
8ba28a88dc
commit
25159e3718
@ -64,6 +64,20 @@ export class PostsController {
|
|||||||
await this.SendMultiplePosts(h, posts);
|
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
|
* Send multiple posts to the API
|
||||||
|
@ -188,6 +188,8 @@ export const Routes : Route[] = [
|
|||||||
|
|
||||||
{path: "/posts/get_group", cb: (h) => PostsController.GetListGroup(h), needLogin: false},
|
{path: "/posts/get_group", cb: (h) => PostsController.GetListGroup(h), needLogin: false},
|
||||||
|
|
||||||
|
{path: "/posts/get_latest", cb: (h) => PostsController.GetLatest(h)},
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
// Notifications controller
|
// Notifications controller
|
||||||
|
@ -16,13 +16,15 @@ export class FriendsHelper {
|
|||||||
* Get the list of friends of the user
|
* Get the list of friends of the user
|
||||||
*
|
*
|
||||||
* @param userID The ID 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({
|
const results = await DatabaseHelper.Query({
|
||||||
table: FRIENDS_TABLE + " f",
|
table: FRIENDS_TABLE + " f",
|
||||||
where: {
|
where: {
|
||||||
ID_personne: userID,
|
ID_personne: userID,
|
||||||
},
|
},
|
||||||
|
customWhere: onlyAccepted ? "actif = 1" : "",
|
||||||
joins: [
|
joins: [
|
||||||
{
|
{
|
||||||
table: USER_TABLE + " u",
|
table: USER_TABLE + " u",
|
||||||
|
@ -68,13 +68,15 @@ export class GroupsHelper {
|
|||||||
* Get the list of groups of a user
|
* Get the list of groups of a user
|
||||||
*
|
*
|
||||||
* @param userID Target user ID
|
* @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({
|
const list = await DatabaseHelper.Query({
|
||||||
table: GROUPS_MEMBERS_TABLE,
|
table: GROUPS_MEMBERS_TABLE,
|
||||||
where: {
|
where: {
|
||||||
user_id: userID
|
user_id: userID,
|
||||||
},
|
},
|
||||||
|
customWhere: onlyFollowed ? "following = 1" : "",
|
||||||
fields: ["groups_id"]
|
fields: ["groups_id"]
|
||||||
});
|
});
|
||||||
|
|
||||||
|
@ -158,6 +158,78 @@ export class PostsHelper {
|
|||||||
return results.map((r) => this.DBToPost(r));
|
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
|
* Get the access level of a user over a post
|
||||||
*
|
*
|
||||||
|
Loading…
Reference in New Issue
Block a user