| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241 |
- using System.Diagnostics;
- using Microsoft.AspNetCore.Authorization;
- using Microsoft.AspNetCore.Mvc;
- using Microsoft.EntityFrameworkCore;
- using bitforum.Helpers;
- using bitforum.Models;
- using bitforum.Models.Account;
- using bitforum.Services;
- namespace bitforum.Controllers.Member
- {
- [Authorize]
- [Route("Member")]
- public class GradeController : Controller
- {
- private readonly ILogger<GradeController> _logger;
- private readonly IFileUploadService _fileUploadService;
- private readonly DefaultDbContext _db;
- private readonly string _IndexViewPath = "~/Views/Member/Grade/Index.cshtml";
- private readonly string _WriteViewPath = "~/Views/Member/Grade/Write.cshtml";
- private readonly string _EditViewPath = "~/Views/Member/Grade/Edit.cshtml";
- public GradeController(ILogger<GradeController> logger, IFileUploadService fileUploadService, DefaultDbContext db)
- {
- _logger = logger;
- _fileUploadService = fileUploadService;
- _db = db;
- }
- [ResponseCache(Duration = 0, Location = ResponseCacheLocation.None, NoStore = true)]
- public IActionResult Error()
- {
- return View(new ErrorViewModel { RequestId = Activity.Current?.Id ?? HttpContext.TraceIdentifier });
- }
- [HttpGet("Grade")]
- public IActionResult Index()
- {
- var memberGrades = _db.MemberGrade.OrderByDescending(c => c.Order).ToList();
- var data = new List<object>();
- if (memberGrades.Count > 0)
- {
- foreach (var row in memberGrades)
- {
- data.Add(new
- {
- row.ID,
- row.Image,
- Name = $"{row.KorName}({row.EngName})",
- row.Order,
- RequiredExp = row.RequiredExp.ToString("N0"),
- RequiredCoin = row.RequiredCoin.ToString("N0"),
- IsActive = (row.IsActive ? 'Y' : 'N'),
- UpdatedAt = row.UpdatedAt.GetDateAt(),
- CreatedAt = row.CreatedAt.GetDateAt(),
- MemberRows = _db.Member.Count(c => c.GradeID == row.ID),
- EditURL = $"/Member/Grade/{row.ID}/Edit",
- DeleteURL = $"/Member/Grade/{row.ID}/Delte"
- });
- }
- }
- ViewBag.Data = data;
- ViewBag.Total = (data?.Count ?? 0);
- return View(_IndexViewPath);
- }
- [HttpGet("Grade/Write")]
- public IActionResult Write()
- {
- return View(_WriteViewPath);
- }
- [HttpPost("Grade/Create")]
- public async Task<IActionResult> Create(MemberGrade request, IFormFile? Image)
- {
- try
- {
- if (!ModelState.IsValid)
- {
- throw new Exception("유효성 검사에 실패하였습니다.");
- }
- request.Image = await _fileUploadService.UploadImageAsync(Image, UploadFolder.Grade);
- request.UpdatedAt = null;
- request.CreatedAt = DateTime.UtcNow;
- _db.MemberGrade.Add(request);
- int affectedRows = await _db.SaveChangesAsync();
- if (affectedRows <= 0)
- {
- throw new Exception("회원등급 등록 중 오류가 발생했습니다.");
- }
- string message = "회원등급이 등록되었습니다.";
- TempData["SuccessMessage"] = message;
- _logger.LogInformation(message);
- return Redirect("/Member/Grade");
- }
- catch (ArgumentException e)
- {
- TempData["ErrorMessages"] = e.Message;
- _logger.LogError(e, e.Message);
- return Write();
- }
- catch (Exception e)
- {
- TempData["ErrorMessages"] = e.Message;
- _logger.LogError(e, e.Message);
- return Write();
- }
- }
- [HttpGet("Grade/{id}/Edit")]
- public async Task<IActionResult> Edit(int id)
- {
- try
- {
- if (id <= 0)
- {
- throw new Exception("유효하지 않은 접근입니다.");
- }
- var memberGrade = await _db.MemberGrade.FirstAsync(c => c.ID == id);
- if (memberGrade is null)
- {
- throw new Exception("회원등급 정보를 찾을 수 없습니다.");
- }
- return View(_EditViewPath, memberGrade);
- }
- catch (Exception e)
- {
- TempData["ErrorMessages"] = e.Message;
- _logger.LogError(e, e.Message);
- return Redirect("/Member/Grade");
- }
- }
- [HttpPost("Grade/Update")]
- public async Task<IActionResult> Update(MemberGrade request, IFormFile? Image, [FromForm] bool IsImageRemove = false)
- {
- try
- {
- if (!ModelState.IsValid)
- {
- throw new Exception("유효성 검사에 실패하였습니다.");
- }
- var memberGrade = await _db.MemberGrade.FirstAsync(c => c.ID == request.ID);
- if (memberGrade is null)
- {
- throw new Exception("회원등급 정보를 찾을 수 없습니다.");
- }
- // 이미지 저장
- if (IsImageRemove)
- {
- // 실제 파일 삭제
- _fileUploadService.RemoveFile(memberGrade.Image);
- memberGrade.Image = null;
- }
- else if (Image is not null)
- {
- memberGrade.Image = await _fileUploadService.UploadImageAsync(Image, UploadFolder.Grade);
- }
- memberGrade.KorName = request.KorName;
- memberGrade.EngName = request.EngName;
- memberGrade.Description = request.Description;
- memberGrade.Order = request.Order;
- memberGrade.RequiredExp = request.RequiredExp;
- memberGrade.RequiredCoin = request.RequiredCoin;
- memberGrade.IsActive = request.IsActive;
- memberGrade.UpdatedAt = DateTime.UtcNow;
- _db.MemberGrade.Update(memberGrade);
- int affectedRows = await _db.SaveChangesAsync();
- if (affectedRows <= 0)
- {
- throw new Exception("회원등급 수정 중 오류가 발생했습니다.");
- }
- string message = "회원등급이 수정되었습니다.";
- TempData["SuccessMessage"] = message;
- _logger.LogInformation(message);
- return Redirect($"/Member/Grade/{request.ID}/Edit");
- }
- catch (Exception e)
- {
- TempData["ErrorMessages"] = e.Message;
- _logger.LogError(e, e.Message);
- return await Edit(request.ID);
- }
- }
- [HttpGet("Grade/{id}/Delete")]
- public async Task<IActionResult> Delete(int id)
- {
- try
- {
- if (id <= 0)
- {
- throw new Exception("유효하지 않은 접근입니다.");
- }
- var memberGrade = await _db.MemberGrade.FindAsync(id);
- if (memberGrade == null)
- {
- throw new Exception("회원등급 정보를 찾을 수 없습니다.");
- }
- _fileUploadService.RemoveFile(memberGrade.Image);
- _db.MemberGrade.Remove(memberGrade);
- int affectedRows = await _db.SaveChangesAsync();
- if (affectedRows <= 0)
- {
- throw new Exception("회원등급 삭제 중 오류가 발생했습니다.");
- }
- _fileUploadService.RemoveFile(memberGrade.Image);
- string message = "회원등급이 삭제되었습니다.";
- TempData["SuccessMessage"] = message;
- _logger.LogInformation(message);
- }
- catch (Exception e)
- {
- TempData["ErrorMessages"] = e.Message;
- _logger.LogError(e, e.Message);
- }
- return Redirect("/Member/Grade");
- }
- }
- }
|