47 lines
1.7 KiB
C#
47 lines
1.7 KiB
C#
using Microsoft.AspNetCore.Authorization;
|
|
using Microsoft.AspNetCore.Mvc;
|
|
using UniVerse.Application.DTOs.Common;
|
|
using UniVerse.Application.DTOs.Reviews;
|
|
using UniVerse.Application.Interfaces;
|
|
using System.Security.Claims;
|
|
|
|
namespace UniVerse.Api.Controllers;
|
|
|
|
[ApiController]
|
|
[Route("api/v1/reviews")]
|
|
[Authorize]
|
|
public class ReviewsController : ControllerBase
|
|
{
|
|
private readonly IReviewService _reviews;
|
|
public ReviewsController(IReviewService reviews) => _reviews = reviews;
|
|
private int CurrentUserId => int.Parse(User.FindFirstValue(ClaimTypes.NameIdentifier) ?? User.FindFirstValue("sub") ?? "0");
|
|
|
|
[Authorize(Roles = "Student")]
|
|
[HttpPost]
|
|
public async Task<ActionResult<ReviewDto>> Create([FromBody] CreateReviewRequest req) =>
|
|
CreatedAtAction(nameof(Get), new { id = 0 }, await _reviews.CreateAsync(CurrentUserId, req));
|
|
|
|
[HttpGet("{id:int}")]
|
|
public async Task<ActionResult<ReviewDto>> Get(int id) => Ok(await _reviews.GetByIdAsync(id));
|
|
|
|
[HttpPut("{id:int}")]
|
|
public async Task<ActionResult<ReviewDto>> Update(int id, [FromBody] UpdateReviewRequest req) =>
|
|
Ok(await _reviews.UpdateAsync(id, CurrentUserId, req));
|
|
|
|
[HttpDelete("{id:int}")]
|
|
public async Task<IActionResult> Delete(int id)
|
|
{
|
|
await _reviews.DeleteAsync(id, CurrentUserId, User.IsInRole("Admin"));
|
|
return NoContent();
|
|
}
|
|
|
|
[Authorize(Roles = "Admin")]
|
|
[HttpGet("pending")]
|
|
public async Task<ActionResult> Pending([FromQuery] PaginationRequest pagination) =>
|
|
Ok(await _reviews.GetPendingAsync(pagination));
|
|
|
|
[Authorize(Roles = "Admin")]
|
|
[HttpPost("{id:int}/reanalyze")]
|
|
public async Task<IActionResult> Reanalyze(int id) { await _reviews.ReanalyzeAsync(id); return NoContent(); }
|
|
}
|