using System; using System.Linq; using System.Threading.Tasks; using FMSAdmin.Data; using FMSAdmin.Models; using FMSAdmin.Entities; using FMSApp.Services; using Microsoft.AspNetCore.Mvc; using Microsoft.Extensions.Logging; using Microsoft.AspNetCore.Authorization; using FMSAdmin.Helpers; using System.Data; using System.IO; using OfficeOpenXml; using LinqKit; namespace FMSApp.Controllers { [Authorize] [ApiController] [ApiVersion("1")] [Route("api/app/[controller]")] public class GuidelineController : Controller { private readonly ILogger _logger; private readonly FMSContext _context; private readonly GuidelineService _service; private readonly SiteService _siteService; private readonly StorageHelper _storage; public GuidelineController( ILogger logger, FMSContext context, GuidelineService service, SiteService siteService, StorageHelper storage ) { _logger = logger; _context = context; _service = service; _siteService = siteService; _storage = storage; } /// /// 목록 /// [HttpGet] public IActionResult List([FromQuery] PagingRequest req, [FromQuery] string siteId, bool businessAuth) { var user = _context.CmUser.FirstOrDefault(x => x.UserId == User.Identity.Name); var query = _FilterAndSort(req); if (!string.IsNullOrEmpty(siteId)) { query = query.Where(x => x.SiteId == Util.ToInt(siteId) || x.IsAllView == true); } //query = query.Where(x => x.AddDate < DateTime.Now.AddDays(1).Date && x.UpdateDate >= DateTime.Now.Date); if (businessAuth && user != null && user.BusinessFieldId != null) { var businessCommon = _context.CmBusinessField.FirstOrDefault(x => x.Name == "공통"); query = query.Where(x => (new int[] { businessCommon.BusinessFieldId, user.BusinessFieldId.Value }).Contains(x.BusinessFieldId) || x.IsAllView == true); } var list = query.Select(x => new { x.SiteId, Name = Util.ToBool(x.CmUser.IsSysop) ? "운영자" : (Util.ToBool(x.IsAllView) ? "본사지침" : x.CmSite.Name), x.Title, x.GuidelineId, // CmSite = new { // Name = x.CmSite.Name// _siteService.Get(x.SiteId).FirstOrDefault().Name // }, CmUser = new { Name = x.CmUser.Name }, CmBusinessField = new { x.CmBusinessField.Name, }, Date = new { AddDate = x.AddDate.ToString("yyyy.MM.dd") }, IsAllView = Util.ToBool(x.IsAllView), IsSysop = x.CmUser.IsSysop, }); var paging = PagingList.Pagination(list, req.page, req.limit); return Ok(paging); } [HttpGet("[action]")] public IActionResult Get([FromQuery] string siteId, [FromQuery] string guidelineId) { var query = _service.GetAll() .Where(x => x.GuidelineId == Util.ToInt(guidelineId)); // 조회수 증가 var guideline = query.FirstOrDefault(); if (guideline != null && User.Identity.Name != guideline.RegisterUserId) { _service.AddCount(Util.ToInt(guidelineId)); } var item = query.Select(x => new { x.SiteId, x.Title, x.Contents, x.CmUser.Name, x.AddDate, x.UpdateDate, x.BusinessFieldId, x.RegisterUserId, CmFile = _storage.ParseFile(x.CmFile), CmBusinessField = new { BusinessFieldId = x.CmBusinessField.BusinessFieldId, Name = x.CmBusinessField.Name }, CmUser = new { UserId = x.CmUser.UserId }, x.GuidelineId, x.ReadCount, x.IsUse, IsAllView = Util.ToBool(x.IsAllView) }).FirstOrDefault(); return Ok(item); } // 검색 & 정렬 공통 private IQueryable _FilterAndSort(PagingRequest req) { var query = _service.GetAll(); // 기본 Entity 검색 query = query.Filter(req.conditions); // 기본 Entity 정렬 query = query.Sort(req.sort); return query; } /// /// 저장 /// /// /// [HttpPost("[action]")] public IActionResult Save([FromBody] CmGuideline data) { _logger.LogInformation("Save"); //_logger.LogInformation(data.Dump()); if (ModelState.IsValid) { _service.Save(data); } else { return BadRequest(ModelState); } return Ok(); } [HttpDelete("{siteId}/{guidelineId}")] public IActionResult Delete(int siteId, int guidelineId) { _service.Delete(siteId, guidelineId); return Ok(); } } }