mirror of
				https://gitlab.com/comunic/comunicapiv2
				synced 2025-11-04 03:24:04 +00:00 
			
		
		
		
	Can get information about a single post
This commit is contained in:
		@@ -78,6 +78,19 @@ export class PostsController {
 | 
				
			|||||||
		await this.SendMultiplePosts(h, posts);
 | 
							await this.SendMultiplePosts(h, posts);
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						/**
 | 
				
			||||||
 | 
						 * Get information about a single post
 | 
				
			||||||
 | 
						 * 
 | 
				
			||||||
 | 
						 * @param h Request handler
 | 
				
			||||||
 | 
						 */
 | 
				
			||||||
 | 
						public static async GetSingle(h: RequestHandler) {
 | 
				
			||||||
 | 
							const postID = await h.postPostIDWithAccess("postID");
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
							const post = await PostsHelper.GetSingle(postID);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
							h.send(await this.PostToAPI(h, post));
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	/**
 | 
						/**
 | 
				
			||||||
	 * Send multiple posts to the API
 | 
						 * Send multiple posts to the API
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -190,6 +190,8 @@ export const Routes : Route[] = [
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
	{path: "/posts/get_latest", cb: (h) => PostsController.GetLatest(h)},
 | 
						{path: "/posts/get_latest", cb: (h) => PostsController.GetLatest(h)},
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						{path: "/posts/get_single", cb: (h) => PostsController.GetSingle(h), needLogin: false},
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	// Notifications controller
 | 
						// Notifications controller
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -11,6 +11,8 @@ import { GroupsAccessLevel } from "./Group";
 | 
				
			|||||||
import { GroupsHelper } from "../helpers/GroupsHelper";
 | 
					import { GroupsHelper } from "../helpers/GroupsHelper";
 | 
				
			||||||
import { checkVirtualDirectory } from "../utils/VirtualDirsUtils";
 | 
					import { checkVirtualDirectory } from "../utils/VirtualDirsUtils";
 | 
				
			||||||
import { FriendsHelper } from "../helpers/FriendsHelper";
 | 
					import { FriendsHelper } from "../helpers/FriendsHelper";
 | 
				
			||||||
 | 
					import { PostsHelper } from "../helpers/PostsHelper";
 | 
				
			||||||
 | 
					import { PostAccessLevel } from "./Post";
 | 
				
			||||||
 | 
					
 | 
				
			||||||
/**
 | 
					/**
 | 
				
			||||||
 * Response to a request
 | 
					 * Response to a request
 | 
				
			||||||
@@ -274,6 +276,37 @@ export class RequestHandler {
 | 
				
			|||||||
		return groupID;
 | 
							return groupID;
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						/**
 | 
				
			||||||
 | 
						 * Get the ID of post included in a POST request
 | 
				
			||||||
 | 
						 * 
 | 
				
			||||||
 | 
						 * @param name The name of the POST field containing the id of the target post
 | 
				
			||||||
 | 
						 */
 | 
				
			||||||
 | 
						public async postPostID(name: string) : Promise<number> {
 | 
				
			||||||
 | 
							const postID = this.postInt(name);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
							if(postID < 1)
 | 
				
			||||||
 | 
								this.error(400, "Invalid post ID!");
 | 
				
			||||||
 | 
							
 | 
				
			||||||
 | 
							if(!await PostsHelper.Exists(postID))
 | 
				
			||||||
 | 
								this.error(404, "Specified post does not exists!");
 | 
				
			||||||
 | 
							
 | 
				
			||||||
 | 
							return postID;
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						/**
 | 
				
			||||||
 | 
						 * Get the ID of a post a user has access to
 | 
				
			||||||
 | 
						 * 
 | 
				
			||||||
 | 
						 * @param name The name of the POST field containing the ID of the target post
 | 
				
			||||||
 | 
						 */
 | 
				
			||||||
 | 
						public async postPostIDWithAccess(name: string) : Promise<number> {
 | 
				
			||||||
 | 
							const postID = await this.postPostID(name);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
							if(await PostsHelper.GetAccessLevelFromPostID(this.optionnalUserID, postID) == PostAccessLevel.NO_ACCESS)
 | 
				
			||||||
 | 
								this.error(401, "Your are not allowed to access this post information!");
 | 
				
			||||||
 | 
							
 | 
				
			||||||
 | 
							return postID;
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	/**
 | 
						/**
 | 
				
			||||||
	 * Get a virtual directory included in a POST request
 | 
						 * Get a virtual directory included in a POST request
 | 
				
			||||||
	 * 
 | 
						 * 
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -230,6 +230,37 @@ export class PostsHelper {
 | 
				
			|||||||
		return results.map((r) => this.DBToPost(r));
 | 
							return results.map((r) => this.DBToPost(r));
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						/**
 | 
				
			||||||
 | 
						 * Get information about a single post
 | 
				
			||||||
 | 
						 * 
 | 
				
			||||||
 | 
						 * @param postID Target post ID
 | 
				
			||||||
 | 
						 */
 | 
				
			||||||
 | 
						public static async GetSingle(postID: number) : Promise<Post> {
 | 
				
			||||||
 | 
							const row = await DatabaseHelper.QueryRow({
 | 
				
			||||||
 | 
								table: TABLE_NAME,
 | 
				
			||||||
 | 
								where: {
 | 
				
			||||||
 | 
									ID: postID
 | 
				
			||||||
 | 
								}
 | 
				
			||||||
 | 
							});
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
							if(row == null)
 | 
				
			||||||
 | 
								throw new Error("Post " + postID + " not found!");
 | 
				
			||||||
 | 
							
 | 
				
			||||||
 | 
							return this.DBToPost(row);
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						/**
 | 
				
			||||||
 | 
						 * Get the access level of a user over a post
 | 
				
			||||||
 | 
						 * 
 | 
				
			||||||
 | 
						 * This is a convenience function
 | 
				
			||||||
 | 
						 * 
 | 
				
			||||||
 | 
						 * @param userID Target user ID
 | 
				
			||||||
 | 
						 * @param postID Target post ID
 | 
				
			||||||
 | 
						 */
 | 
				
			||||||
 | 
						public static async GetAccessLevelFromPostID(userID: number, postID: number) : Promise<PostAccessLevel> {
 | 
				
			||||||
 | 
							return await this.GetAccessLevel(userID, await this.GetSingle(postID));
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	/**
 | 
						/**
 | 
				
			||||||
	 * Get the access level of a user over a post
 | 
						 * Get the access level of a user over a post
 | 
				
			||||||
	 * 
 | 
						 * 
 | 
				
			||||||
@@ -312,6 +343,20 @@ export class PostsHelper {
 | 
				
			|||||||
		return !post.isUserPage || await UserHelper.AllowComments(post.userPageID);
 | 
							return !post.isUserPage || await UserHelper.AllowComments(post.userPageID);
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						/**
 | 
				
			||||||
 | 
						 * Check out whether a post exists or not
 | 
				
			||||||
 | 
						 * 
 | 
				
			||||||
 | 
						 * @param postID The id of the post to check
 | 
				
			||||||
 | 
						 */
 | 
				
			||||||
 | 
						public static async Exists(postID: number) : Promise<boolean> {
 | 
				
			||||||
 | 
							return await DatabaseHelper.Count({
 | 
				
			||||||
 | 
								table: TABLE_NAME,
 | 
				
			||||||
 | 
								where: {
 | 
				
			||||||
 | 
									ID: postID
 | 
				
			||||||
 | 
								}
 | 
				
			||||||
 | 
							}) > 0;
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	/**
 | 
						/**
 | 
				
			||||||
	 * Turn a database entry into a row object
 | 
						 * Turn a database entry into a row object
 | 
				
			||||||
	 * 
 | 
						 * 
 | 
				
			||||||
 
 | 
				
			|||||||
		Reference in New Issue
	
	Block a user