/
anton.bessolitsyn
/
easyapi
Обзор
Документация
Войти
/
anton.bessolitsyn
/
easyapi
Код
Запросы
0
Вики
Пакеты
0
Релизы
0
Аналитика
Безопасность
gpxdata
Controllers/PostPresenter.cs
88 строк
3 KB
Anton Bessolitsyn
fix PostPresenter
26 мар 2025, 10:47
26 мар 2025, 10:47
ff48d1f
Код
Авторство
О чём код?
using easyapi.Controllers.ViewModel; using easyapi.Core; using easyapi.Entities; using easyapi.Utilities; using Microsoft.AspNetCore.Components.Forms; using Microsoft.Extensions.Hosting; using System.Globalization; namespace easyapi.Controllers { /// <summary> /// Это так называемый Presenter по Р.Мартину /// Схема архитектуры /Base/baseByRMartin.jpg /// Назначение - Переупаковать данные из объекта OutputData, в нашем случает это класс OutputEasyPostDS в объект ViewModel /// </summary> public class PostPresenter : IPostOutputBoundary { private List<PostViewModel> Posts { get; } = []; public void SetPosts(OutputEasyPostDataSet[] posts) { Posts.Clear(); var sortedPosts = new List<OutputEasyPostDataSet>(); foreach (var group in posts.GroupBy(p => p.CreationDate.Date).OrderByDescending(p=>p.Key)) { sortedPosts.AddRange(group.ToList().OrderBy(p=>p.CreationDate)); } foreach (var post in sortedPosts) { var postViewModel = CreatePostViewModel(post); if (postViewModel is not null) Posts.Add(postViewModel); } } public IEnumerable<PostViewModel> GetPosts() { return Posts; } static public PostViewModel? CreatePostViewModel(OutputEasyPostDataSet post) { string imageInBase64 = post.Image != null ? Convert.ToBase64String(post.Image) : ""; if (GetPostInHtml(post, out string title, out string content)) { var postVM = new PostViewModel( post.UID, post.Owner, post.CreationDate.ToString("dd MMMM yyyy", CultureInfo.InvariantCulture), imageInBase64, title, content); return postVM; } else return null; } //Очень было удобно сделать через out возврат результат функции! :) static private bool GetPostInHtml(OutputEasyPostDataSet post, out string postTitle, out string postBody) { postBody = ""; postTitle = ""; if (post.Content != null) { var postInHTML = StyleOptionHelper.ApplyStyleOptionsToTextAsHtml(post.Content, post.StyleOptions).Replace("\n</b>\n", "\n\n").Split("\n\n"); int i = 0; if (postInHTML.Contains("День") && postInHTML.Contains("Запись")) { postTitle = postInHTML[0].Replace("<b>","").Replace("</b>", ""); i = 1; } for (int j=i; j < postInHTML.Length; j++) { postBody += "<br>    " + postInHTML[j].Replace("\n", " "); } return true; } else { return false; } } } }