using System.Security.Claims; using Back.Program.Common.Auth; using Back.Program.Common.Data; using Back.Program.Common.Model; using Back.Program.Models.Entities; using Back.Program.Services.V1; using Back.Program.Services.V1.Interfaces; using Microsoft.AspNetCore.Mvc; using Microsoft.EntityFrameworkCore; namespace Back.Program.Controllers.V1 { [ApiController] [Route("/api/v1/in/push")] [ApiExplorerSettings(GroupName = "공통")] public class PushController : ControllerBase { private readonly ILogger _logger; private readonly IRepositoryService _repositoryService; private readonly IPushQueue _pushQueue; private readonly IPushService _pushService; public PushController(ILogger logger, IRepositoryService repositoryService, IPushQueue pushQueue, IPushService pushService) { _logger = logger; _repositoryService = repositoryService; _pushQueue = pushQueue; _pushService = pushService; } // 추가 사항 // 카테고리 별 조회 하는 부분도 추가를 할 지 고민을 해야 할 것 같음 [HttpGet()] [CustomOperation("푸시 확인", "저장된 양식을 확인 할 수 있다.", "푸시")] [ProducesResponseType(StatusCodes.Status200OK, Type = typeof(APIResponseStatus))] public async Task GetPush(string bid, string? pid, string? category) { if (string.IsNullOrEmpty(bid)) return BadRequest(APIResponse.InvalidInputError()); string summary = _repositoryService.ReadSummary(typeof(PushController), "GetPush"); var result = await _pushService.GetPush(summary, bid, pid, category); return Ok(result); } [HttpPost("send")] [CustomOperation("푸시 발송", "저장된 양식으로, 사용자에게 푸시를 송신한다.", "푸시")] [ProducesResponseType(StatusCodes.Status200OK, Type = typeof(APIResponseStatus))] public async Task SendPush([FromBody] PushRequest pushRequest) { if (!ModelState.IsValid) return BadRequest(APIResponse.InvalidInputError()); string summary = _repositoryService.ReadSummary(typeof(PushController), "SendPush"); var result = await _pushService.SendPush(summary, pushRequest); return Ok(result); } [HttpPost("set")] [CustomOperation("푸시 변경", "저장된 양식을 변경한다.", "푸시")] [ProducesResponseType(StatusCodes.Status200OK, Type = typeof(APIResponseStatus))] public async Task SetPush(string token, [FromBody] DBPayload request) { if (string.IsNullOrEmpty(token)) return BadRequest(APIResponse.InvalidInputError()); if (!ModelState.IsValid) return BadRequest(APIResponse.InvalidInputError()); string summary = _repositoryService.ReadSummary(typeof(PushController), "SetPush"); var result = await _pushService.SetPush(summary, token, request); return Ok(result); } [HttpPost("create")] [CustomOperation("푸시 생성", "새로운 푸시 양식을 생성한다.", "푸시")] [ProducesResponseType(StatusCodes.Status200OK, Type = typeof(APIResponseStatus))] public async Task CreatePush(string token, [FromBody] CreatePush request) { if (string.IsNullOrEmpty(token)) return BadRequest(APIResponse.InvalidInputError()); if (!ModelState.IsValid) return BadRequest(APIResponse.InvalidInputError()); string summary = _repositoryService.ReadSummary(typeof(PushController), "CreatePush"); var result = await _pushService.CreatePush(summary, token, request); return Ok(result); } [HttpDelete("delete")] [CustomOperation("푸시 삭제", "저장된 푸시 양식을 삭제 한다.", "푸시")] [ProducesResponseType(StatusCodes.Status200OK, Type = typeof(APIResponseStatus))] public async Task DeletePush(string token, string bid, string pid) { if (string.IsNullOrEmpty(token)) return BadRequest(APIResponse.InvalidInputError()); if (!ModelState.IsValid) return BadRequest(APIResponse.InvalidInputError()); string summary = _repositoryService.ReadSummary(typeof(PushController), "DeletePush"); var result = await _pushService.DeletePush(summary,token,bid,pid); return Ok(result); } [HttpDelete("delete/list")] [CustomOperation("사용자 푸시 목록 삭제", "사용자가 받은 푸시목록에서 푸시를 삭제한다..", "푸시")] [ProducesResponseType(StatusCodes.Status200OK, Type = typeof(APIResponseStatus))] public async Task DeleteListPush(string token, int id) { if (string.IsNullOrEmpty(token)) return BadRequest(APIResponse.InvalidInputError()); if (!ModelState.IsValid) return BadRequest(APIResponse.InvalidInputError()); string summary = _repositoryService.ReadSummary(typeof(PushController), "DeleteListPush"); var result = await _pushService.DeleteListPush(summary, token, id); return Ok(result); } [HttpPost("list")] [CustomOperation("사용자 푸시 목록 조회", "해당 사용자가 받은 푸시의 정보를 조회한다.", "푸시")] [ProducesResponseType(StatusCodes.Status200OK, Type = typeof(APIResponseStatus))] public async Task SearchToUserPush(string token, int size, [FromBody] PushCabinet? request) { if (string.IsNullOrEmpty(token)) return BadRequest(APIResponse.InvalidInputError()); if (!ModelState.IsValid) return BadRequest(APIResponse.InvalidInputError()); string summary = _repositoryService.ReadSummary(typeof(PushController), "SearchToUserPush"); var result = await _pushService.SearchToUserPush(summary, token, size, request); return Ok(result); } } } // END PUSH CONTROLLER