using HanyadikHetVan.DTO; using HanyadikHetVan.Services; using Microsoft.AspNetCore.Authentication.JwtBearer; using Microsoft.AspNetCore.Authorization; using Microsoft.AspNetCore.Http; using Microsoft.AspNetCore.Mvc; using System; using System.Collections.Generic; using System.Net.Mime; using System.Threading.Tasks; namespace HanyadikHetVan.Controllers.V2 { [ApiVersion("2.0")] [Route("api/v{version:apiVersion}/[controller]")] [ApiController] public class FunFactController : Controller { private readonly FunFactService _funfactService; public FunFactController(FunFactService funfactService) { _funfactService = funfactService ?? throw new ArgumentNullException(nameof(funfactService)); } [HttpGet("WeeklyTimeSpan/{weeklytimespanId}")] [ProducesResponseType(StatusCodes.Status200OK, Type = typeof(List))] [ProducesResponseType(StatusCodes.Status404NotFound)] public async Task GetFunFactOfWeeklyTimeSpan(int weeklytimespanId) { try { var obj = await _funfactService.GetFunFactOfWeeklyTimeSpan(weeklytimespanId); return Ok(obj); } catch (Exception) { return NotFound(); } } [HttpGet("{funfactId}")] [ProducesResponseType(StatusCodes.Status200OK, Type = typeof(FunFactDTO))] [ProducesResponseType(StatusCodes.Status404NotFound)] public async Task GetFunFactorOfFunFact(int funfactId) { try { var obj = await _funfactService.GetFunFactorOfFunFact(funfactId); return Ok(obj); } catch (Exception) { return NotFound(); } } [HttpDelete("{funfactId}")] [Authorize(Policy = "AdminPolicy", AuthenticationSchemes = JwtBearerDefaults.AuthenticationScheme)] [ProducesResponseType(StatusCodes.Status200OK, Type = typeof(bool))] [ProducesResponseType(StatusCodes.Status404NotFound)] [ProducesResponseType(StatusCodes.Status401Unauthorized)] public async Task DeleteFunFact(int funfactId) { var result = await _funfactService.DeleteFunFact(funfactId); if (result) { return Ok(result); } else { return NotFound(); } } [HttpPut("{funfactId}")] [Authorize(Policy = "AdminPolicy", AuthenticationSchemes = JwtBearerDefaults.AuthenticationScheme)] [Consumes(MediaTypeNames.Application.Json)] [ProducesResponseType(StatusCodes.Status200OK, Type = typeof(FunFactDTO))] [ProducesResponseType(StatusCodes.Status404NotFound)] [ProducesResponseType(StatusCodes.Status401Unauthorized)] public async Task UpdatePause(int funfactId, [FromBody] FunFactDTO funfact) { try { var obj = await _funfactService.UpdateFunFact(funfactId, funfact); return Ok(obj); } catch (Exception) { return NotFound(); } } } }