using System.Linq.Expressions; using System.Text.RegularExpressions; using Tiobon.Core.Common.Helper; using Tiobon.Core.IServices; using Tiobon.Core.Model; using Tiobon.Core.Model.Models; using Tiobon.Core.Model.ViewModels; using Tiobon.Core.SwaggerHelper; using Microsoft.AspNetCore.Authorization; using Microsoft.AspNetCore.Mvc; using Serilog; using StackExchange.Profiling; using static Tiobon.Core.Extensions.CustomApiVersion; namespace Tiobon.Core.Controllers { /// /// 博客管理 /// [Produces("application/json")] [Route("api/Tiobon")] public class TiobonController : BaseApiController { public ITiobonArticleServices _TiobonArticleServices { get; set; } private readonly ILogger _logger; /// /// 构造函数 /// /// /// public TiobonController(ILogger logger) { _logger = logger; } /// /// 获取博客列表【无权限】 /// /// /// /// /// /// [HttpGet] public async Task>> Get(int id, int page = 1, string bcategory = "技术博文", string key = "") { int intPageSize = 6; if (string.IsNullOrEmpty(key) || string.IsNullOrWhiteSpace(key)) { key = ""; } Expression> whereExpression = a => (a.bcategory == bcategory && a.IsDeleted == false) && ((a.btitle != null && a.btitle.Contains(key)) || (a.bcontent != null && a.bcontent.Contains(key))); var pageModelTiobon = await _TiobonArticleServices.QueryPage(whereExpression, page, intPageSize, " bID desc "); using (MiniProfiler.Current.Step("获取成功后,开始处理最终数据")) { foreach (var item in pageModelTiobon.data) { if (!string.IsNullOrEmpty(item.bcontent)) { item.bRemark = (HtmlHelper.ReplaceHtmlTag(item.bcontent)).Length >= 200 ? (HtmlHelper.ReplaceHtmlTag(item.bcontent)).Substring(0, 200) : (HtmlHelper.ReplaceHtmlTag(item.bcontent)); int totalLength = 500; if (item.bcontent.Length > totalLength) { item.bcontent = item.bcontent.Substring(0, totalLength); } } } } return SuccessPage(pageModelTiobon); } /// /// 获取博客详情 /// /// /// [HttpGet("{id}")] //[Authorize(Policy = "Scope_TiobonModule_Policy")] [Authorize] public async Task> Get(long id) { return Success(await _TiobonArticleServices.GetTiobonDetails(id)); } /// /// 获取详情【无权限】 /// /// /// [HttpGet] [Route("DetailNuxtNoPer")] public async Task> DetailNuxtNoPer(long id) { _logger.LogInformation("xxxxxxxxxxxxxxxxxxx"); Log.Information("yyyyyyyyyyyyyyyyy"); return Success(await _TiobonArticleServices.GetTiobonDetails(id)); } [HttpGet] [Route("GoUrl")] public async Task GoUrl(long id = 0) { var response = await _TiobonArticleServices.QueryById(id); if (response != null && response.bsubmitter.IsNotEmptyOrNull()) { string Url = @"^http(s)?://([\w-]+\.)+[\w-]+(/[\w- ./?%&=]*)?$"; if (Regex.IsMatch(response.bsubmitter, Url)) { response.btraffic += 1; await _TiobonArticleServices.Update(response); return Redirect(response.bsubmitter); } } return Ok(); } [HttpGet] [Route("GetTiobonsByTypesForMVP")] public async Task>> GetTiobonsByTypesForMVP(string types = "", int id = 0) { if (types.IsNotEmptyOrNull()) { var Tiobons = await _TiobonArticleServices.Query(d => d.bcategory != null && types.Contains(d.bcategory) && d.IsDeleted == false, d => d.bID, false); return Success(Tiobons); } return Success(new List() { }); } [HttpGet] [Route("GetTiobonByIdForMVP")] public async Task> GetTiobonByIdForMVP(long id = 0) { if (id > 0) { return Success(await _TiobonArticleServices.QueryById(id)); } return Success(new TiobonArticle()); } /// /// 获取博客测试信息 v2版本 /// /// [HttpGet] ////MVC自带特性 对 api 进行组管理 //[ApiExplorerSettings(GroupName = "v2")] ////路径 如果以 / 开头,表示绝对路径,反之相对 controller 的想u地路径 //[Route("/api/v2/Tiobon/Tiobontest")] //和上边的版本控制以及路由地址都是一样的 [CustomRoute(ApiVersions.V2, "Tiobontest")] public MessageModel V2_Tiobontest() { return Success("我是第二版的博客信息"); } /// /// 添加博客【无权限】 /// /// /// [HttpPost] //[Authorize(Policy = "Scope_TiobonModule_Policy")] [Authorize] public async Task> Post([FromBody] TiobonArticle TiobonArticle) { if (TiobonArticle.btitle.Length > 5 && TiobonArticle.bcontent.Length > 50) { TiobonArticle.bCreateTime = DateTime.Now; TiobonArticle.bUpdateTime = DateTime.Now; TiobonArticle.IsDeleted = false; TiobonArticle.bcategory = "技术博文"; var id = (await _TiobonArticleServices.Add(TiobonArticle)); return id > 0 ? Success(id.ObjToString()) : Failed("添加失败"); } else { return Failed("文章标题不能少于5个字符,内容不能少于50个字符!"); } } /// /// /// /// /// [HttpPost] [Route("AddForMVP")] [Authorize(Permissions.Name)] public async Task> AddForMVP([FromBody] TiobonArticle TiobonArticle) { TiobonArticle.bCreateTime = DateTime.Now; TiobonArticle.bUpdateTime = DateTime.Now; TiobonArticle.IsDeleted = false; var id = (await _TiobonArticleServices.Add(TiobonArticle)); return id > 0 ? Success(id.ObjToString()) : Failed("添加失败"); } /// /// 更新博客信息 /// /// /// // PUT: api/User/5 [HttpPut] [Route("Update")] [Authorize(Permissions.Name)] public async Task> Put([FromBody] TiobonArticle TiobonArticle) { if (TiobonArticle != null && TiobonArticle.bID > 0) { var model = await _TiobonArticleServices.QueryById(TiobonArticle.bID); if (model != null) { model.btitle = TiobonArticle.btitle; model.bcategory = TiobonArticle.bcategory; model.bsubmitter = TiobonArticle.bsubmitter; model.bcontent = TiobonArticle.bcontent; model.btraffic = TiobonArticle.btraffic; if (await _TiobonArticleServices.Update(model)) { return Success(TiobonArticle?.bID.ObjToString()); } } } return Failed("更新失败"); } /// /// 删除博客 /// /// /// [HttpDelete] [Authorize(Permissions.Name)] [Route("Delete")] public async Task> Delete(long id) { if (id > 0) { var TiobonArticle = await _TiobonArticleServices.QueryById(id); if (TiobonArticle == null) { return Failed("查询无数据"); } TiobonArticle.IsDeleted = true; return await _TiobonArticleServices.Update(TiobonArticle) ? Success(TiobonArticle?.bID.ObjToString(), "删除成功") : Failed("删除失败"); } return Failed("入参无效"); } /// /// apache jemeter 压力测试 /// 更新接口 /// /// [HttpGet] [Route("ApacheTestUpdate")] public async Task> ApacheTestUpdate() { return Success(await _TiobonArticleServices.Update(new { bsubmitter = $"laozhang{DateTime.Now.Millisecond}", bID = 1 }), "更新成功"); } } }