using ImageBoardServerApp.Data; using ImageBoardServerApp.Data.Repository; namespace ImageBoardServerApp.Util; public class TheManager { private static long getDiff(PostData post) { return (DateTimeOffset.Now.ToUnixTimeMilliseconds() - post.CreatedAt); } /// /// Returns the value without a minus, if it exists /// /// /// private static long getValue(long num) { return num < 0 ? num * -1 : num; } public static long getBumpValue(PostData post) { return (post.IsSticky ? 999999999999999999 + getDiff(post) : 10 * 60000 - getDiff(post) + ( 60000 * (post.Comments.Count + 1))) ; } public static async Task> getPostList(string boardTag) { List threads = await PostsRepository.getPostsByBoardAsync(boardTag); return threads.OrderBy(getBumpValue).Reverse().ToList(); } public static async Task bumpThreads(BoardData board) { List sortedThreads = await getPostList(board.Tag); if (sortedThreads.Count > board.maxThreads + 1) { for (int i = board.maxThreads + 1; i >= sortedThreads.Count; ++i) { if (sortedThreads[i].IsSticky) continue; await deleteThread(sortedThreads[i]); } } } public static async Task deleteThread(PostData post) { foreach(var c in post.Comments) { if (c.Image != null) { deleteImage(c.Image); } } deleteImage(post.Image); await PostsRepository.deletePostAsync(post.PostID); } public static async Task deleteComment(CommentData comment) { if (comment.Image != null) { deleteImage(comment.Image); } await CommentsRepository.deleteCommentAsync(comment.CommentID); } public static void deleteImage(ImageData imageData) { string path = $"./wwwroot{imageData.ImageLocation}"; try { File.Delete(path); } catch (FileNotFoundException) { Console.WriteLine("The file was not found."); } catch (Exception e) { Console.WriteLine("An error occurred: " + e.Message); } } public static async Task isGETComment(string board, int GET) { return await CommentsRepository.getCommentByGETAsync(board, GET) != null; } }