diff --git a/Recademy.Api/Controllers/ReviewsController.cs b/Recademy.Api/Controllers/ReviewsController.cs index 162cf52..b803218 100644 --- a/Recademy.Api/Controllers/ReviewsController.cs +++ b/Recademy.Api/Controllers/ReviewsController.cs @@ -1,4 +1,5 @@ -using Microsoft.AspNetCore.Mvc; +using Microsoft.AspNetCore.Authorization; +using Microsoft.AspNetCore.Mvc; using Recademy.Api.Attributes; using Recademy.Application.Services.Abstractions; using Recademy.Dto.Reviews; @@ -10,6 +11,7 @@ namespace Recademy.Api.Controllers; [Route("api/reviews")] [ApiController] +[Authorize] public class ReviewsController : Controller { private readonly IReviewService _reviewService; @@ -45,6 +47,7 @@ public ActionResult GetReviewRequestById(int requestId) return Ok(reviewRequest); } + [AllowAnonymous] [HttpPost("requests")] public async Task> CreateReviewRequest(CreateReviewRequestDto createReviewRequestDto) { diff --git a/Recademy.WebUi/Pages/ReviewPages/CreateUnauthorizedReviewRequeset.razor b/Recademy.WebUi/Pages/ReviewPages/CreateUnauthorizedReviewRequeset.razor new file mode 100644 index 0000000..f16ede1 --- /dev/null +++ b/Recademy.WebUi/Pages/ReviewPages/CreateUnauthorizedReviewRequeset.razor @@ -0,0 +1,108 @@ +@page "/reviews" +@using Recademy.Dto.Projects +@using Recademy.Dto.Reviews +@using Newtonsoft.Json +@inject HttpClient Http +@inject IBlazorStrap BlazorStrap + + + +

Запрос на ревью

+ + Название проекта + + + Описание проекта + + + Ссылка на проект + + + Комментарий + + + Отправить запрос + +@code { + private string _comment; + private string _projectTitle; + private string _projectDescription; + private string _projectLink; + + protected override Task OnInitializedAsync() + { + return Task.CompletedTask; + } + + private async Task SendReviewRequest() + { + //Create project with default userId (I assume we add it beforehand) + var createProjectRequest = new CreateProjectDto + ( + AuthorId: 1, + Title: _projectTitle, + Description: _projectDescription, + Link: _projectLink, + new List() + ); + + var createProjectRequestResponse = await Http.PostAsJsonAsync($"api/projects", createProjectRequest); + + if (createProjectRequestResponse.IsSuccessStatusCode) + { + BlazorStrap.Toaster.Add($"Проект {createProjectRequest.Title} успешно добавлен", o => + { + o.Color = BSColor.Success; + o.CloseAfter = 3000; + o.Toast = Toast.BottomRight; + }); + + var newProject = await createProjectRequestResponse.Content.ReadAsStringAsync(); + ProjectInfoDto projectInfoDto = JsonConvert.DeserializeObject(newProject); + + // TODO: add validation on input + var request = new CreateReviewRequestDto + { + UserId = projectInfoDto.UserId, + ProjectId = projectInfoDto.ProjectId, + Comment = _comment, + }; + + var response = await Http.PostAsJsonAsync($"api/reviews/requests", request); + + if (response.IsSuccessStatusCode) + { + BlazorStrap.Toaster.Add("Запрос на ревью успешно создан", o => + { + o.Color = BSColor.Success; + o.CloseAfter = 3000; + o.Toast = Toast.BottomRight; + }); + } + else + { + // TODO: show more suitable error (for example that review was already requested) + BlazorStrap.Toaster.Add("Произошла ошибка при отправке запроса на ревью", o => + { + o.Color = BSColor.Danger; + o.CloseAfter = 3000; + o.Toast = Toast.BottomRight; + }); + } + } + else + { + BlazorStrap.Toaster.Add("Произошла ошибка при добавлении проекта", o => + { + o.Color = BSColor.Danger; + o.CloseAfter = 3000; + o.Toast = Toast.BottomRight; + }); + } + + _projectTitle = default; + _projectDescription = default; + _projectLink = default; + _comment = default; + } +} \ No newline at end of file diff --git a/Recademy.WebUi/Recademy.WebUi.csproj b/Recademy.WebUi/Recademy.WebUi.csproj index 8049c32..b45ca3c 100644 --- a/Recademy.WebUi/Recademy.WebUi.csproj +++ b/Recademy.WebUi/Recademy.WebUi.csproj @@ -12,6 +12,7 @@ + diff --git a/Recademy.WebUi/Shared/NavMenu.razor b/Recademy.WebUi/Shared/NavMenu.razor index acd53b9..b02f498 100644 --- a/Recademy.WebUi/Shared/NavMenu.razor +++ b/Recademy.WebUi/Shared/NavMenu.razor @@ -24,6 +24,11 @@ Достижения +