using System;
using System.Collections.Generic;
using System.Linq.Expressions;
using System.Threading.Tasks;
using New_College.Common.Helper;
using New_College.IServices;
using New_College.Model;
using New_College.Model.Models;
using New_College.Model.ViewModels;
using New_College.SwaggerHelper;
using Microsoft.AspNetCore.Authorization;
using Microsoft.AspNetCore.Mvc;
using Microsoft.Extensions.Logging;
using StackExchange.Profiling;
using static New_College.Extensions.CustomApiVersion;
namespace New_College.Controllers
{
///
/// 博客管理
///
[Produces("application/json")]
[Route("api/Blog")]
public class BlogController : Controller
{
readonly IBlogArticleServices _blogArticleServices;
private readonly ILogger _logger;
///
/// 构造函数
///
///
///
public BlogController(IBlogArticleServices blogArticleServices, ILogger logger)
{
_blogArticleServices = blogArticleServices;
_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 pageModelBlog = await _blogArticleServices.QueryPage(whereExpression, page, intPageSize, " bID desc ");
using (MiniProfiler.Current.Step("获取成功后,开始处理最终数据"))
{
foreach (var item in pageModelBlog.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 new MessageModel>()
{
success = true,
msg = "获取成功",
response = new PageModel()
{
page = page,
dataCount = pageModelBlog.dataCount,
data = pageModelBlog.data,
pageCount = pageModelBlog.pageCount,
}
};
}
///
/// 获取博客详情
///
///
///
[HttpGet("{id}")]
[Authorize(Policy = "Scope_BlogModule_Policy")]
public async Task> Get(int id)
{
return new MessageModel()
{
msg = "获取成功",
success = true,
response = await _blogArticleServices.GetBlogDetails(id)
};
}
///
/// 获取详情【无权限】
///
///
///
[HttpGet]
[Route("DetailNuxtNoPer")]
public async Task> DetailNuxtNoPer(int id)
{
_logger.LogInformation("xxxxxxxxxxxxxxxxxxx");
return new MessageModel()
{
msg = "获取成功",
success = true,
response = await _blogArticleServices.GetBlogDetails(id)
};
}
[HttpGet]
[Route("GoUrl")]
public async Task GoUrl(int id)
{
var response = await _blogArticleServices.QueryById(id);
if (response != null && response.bsubmitter.IsNotEmptyOrNull())
{
response.btraffic += 1;
await _blogArticleServices.Update(response);
return Redirect(response.bsubmitter);
}
return null;
}
[HttpGet]
[Route("GetBlogsByTypesForMVP")]
public async Task>> GetBlogsByTypesForMVP(string types = "", int id = 0)
{
if (types.IsNotEmptyOrNull())
{
var blogs = await _blogArticleServices.Query(d => d.bcategory != null && types.Contains(d.bcategory) && d.IsDeleted == false);
return new MessageModel>()
{
msg = "获取成功",
success = true,
response = blogs
};
}
return new MessageModel>() { };
}
[HttpGet]
[Route("GetBlogByIdForMVP")]
public async Task> GetBlogByIdForMVP(int id = 0)
{
if (id > 0)
{
return new MessageModel()
{
msg = "获取成功",
success = true,
response = await _blogArticleServices.QueryById(id)
};
}
return new MessageModel() { };
}
///
/// 获取博客测试信息 v2版本
///
///
[HttpGet]
////MVC自带特性 对 api 进行组管理
//[ApiExplorerSettings(GroupName = "v2")]
////路径 如果以 / 开头,表示绝对路径,反之相对 controller 的想u地路径
//[Route("/api/v2/blog/Blogtest")]
//和上边的版本控制以及路由地址都是一样的
[CustomRoute(ApiVersions.V2, "Blogtest")]
public MessageModel V2_Blogtest()
{
return new MessageModel()
{
msg = "获取成功",
success = true,
response = "我是第二版的博客信息"
};
}
///
/// 添加博客【无权限】
///
///
///
[HttpPost]
[Authorize(Policy = "Scope_BlogModule_Policy")]
public async Task> Post([FromBody] BlogArticle blogArticle)
{
var data = new MessageModel();
blogArticle.bCreateTime = DateTime.Now;
blogArticle.bUpdateTime = DateTime.Now;
blogArticle.IsDeleted = false;
blogArticle.bcategory = "技术博文";
var id = (await _blogArticleServices.Add(blogArticle));
data.success = id > 0;
if (data.success)
{
data.response = id.ObjToString();
data.msg = "添加成功";
}
return data;
}
///
///
///
///
///
[HttpPost]
[Route("AddForMVP")]
[Authorize(Permissions.Name)]
public async Task> AddForMVP([FromBody] BlogArticle blogArticle)
{
var data = new MessageModel();
blogArticle.bCreateTime = DateTime.Now;
blogArticle.bUpdateTime = DateTime.Now;
blogArticle.IsDeleted = false;
var id = (await _blogArticleServices.Add(blogArticle));
data.success = id > 0;
if (data.success)
{
data.response = id.ObjToString();
data.msg = "添加成功";
}
return data;
}
///
/// 更新博客信息
///
///
///
// PUT: api/User/5
[HttpPut]
[Route("Update")]
[Authorize(Permissions.Name)]
public async Task> Put([FromBody] BlogArticle BlogArticle)
{
var data = new MessageModel();
if (BlogArticle != null && BlogArticle.bID > 0)
{
var model = await _blogArticleServices.QueryById(BlogArticle.bID);
if (model != null)
{
model.btitle = BlogArticle.btitle;
model.bcategory = BlogArticle.bcategory;
model.bsubmitter = BlogArticle.bsubmitter;
model.bcontent = BlogArticle.bcontent;
model.btraffic = BlogArticle.btraffic;
data.success = await _blogArticleServices.Update(model);
if (data.success)
{
data.msg = "更新成功";
data.response = BlogArticle?.bID.ObjToString();
}
}
}
return data;
}
///
/// 删除博客
///
///
///
[HttpDelete]
[Authorize(Permissions.Name)]
[Route("Delete")]
public async Task> Delete(int id)
{
var data = new MessageModel();
if (id > 0)
{
var blogArticle = await _blogArticleServices.QueryById(id);
blogArticle.IsDeleted = true;
data.success = await _blogArticleServices.Update(blogArticle);
if (data.success)
{
data.msg = "删除成功";
data.response = blogArticle?.bID.ObjToString();
}
}
return data;
}
///
/// apache jemeter 压力测试
/// 更新接口
///
///
[HttpGet]
[Route("ApacheTestUpdate")]
public async Task> ApacheTestUpdate()
{
return new MessageModel()
{
success = true,
msg = "更新成功",
response = await _blogArticleServices.Update(new { bsubmitter = $"laozhang{DateTime.Now.Millisecond}", bID = 1 })
};
}
}
}