From 98cc142863e0b40ed58a83a0370aa79e7ee910d9 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=D0=A1=D1=82=D0=B5=D0=BF=D0=BD=D0=BE=D0=B9=20=D0=B8=D1=88?= =?UTF-8?q?=D0=B0=D0=BA?= <69521267+undrcrxwn@users.noreply.github.com> Date: Sat, 23 Mar 2024 00:30:45 +0300 Subject: [PATCH] docs: specify RFC 7807 Problem Details response types [skip ci] --- .../ValidationProblemDTOs.cs | 15 ---------- .../v1/Controllers/AuthorsController.cs | 4 +-- .../v1/Controllers/CommentsController.cs | 28 +++++++++---------- .../v1/Controllers/DiscussionsController.cs | 4 +-- 4 files changed, 18 insertions(+), 33 deletions(-) delete mode 100644 src/CrowdParlay.Social.Api/ValidationProblemDTOs.cs diff --git a/src/CrowdParlay.Social.Api/ValidationProblemDTOs.cs b/src/CrowdParlay.Social.Api/ValidationProblemDTOs.cs deleted file mode 100644 index 0c03f14..0000000 --- a/src/CrowdParlay.Social.Api/ValidationProblemDTOs.cs +++ /dev/null @@ -1,15 +0,0 @@ -using System.Net; -using System.Text.Json.Serialization; - -namespace CrowdParlay.Social.Api; - -public class Problem -{ - [JsonIgnore] public HttpStatusCode HttpStatusCode { get; set; } - public required string ErrorDescription { get; set; } -} - -public class ValidationProblem : Problem -{ - public required IDictionary ValidationErrors { get; set; } -} \ No newline at end of file diff --git a/src/CrowdParlay.Social.Api/v1/Controllers/AuthorsController.cs b/src/CrowdParlay.Social.Api/v1/Controllers/AuthorsController.cs index da7a0df..4e4de87 100644 --- a/src/CrowdParlay.Social.Api/v1/Controllers/AuthorsController.cs +++ b/src/CrowdParlay.Social.Api/v1/Controllers/AuthorsController.cs @@ -15,8 +15,8 @@ public class AuthorsController(IAuthorRepository authors) : ControllerBase [HttpGet("{authorId:guid}")] [Consumes(MediaTypeNames.Application.Json), Produces(MediaTypeNames.Application.Json)] [ProducesResponseType(typeof(AuthorDto), (int)HttpStatusCode.OK)] - [ProducesResponseType(typeof(Problem), (int)HttpStatusCode.InternalServerError)] - [ProducesResponseType(typeof(Problem), (int)HttpStatusCode.NotFound)] + [ProducesResponseType(typeof(ProblemDetails), (int)HttpStatusCode.InternalServerError)] + [ProducesResponseType(typeof(ProblemDetails), (int)HttpStatusCode.NotFound)] public async Task GetAuthorById([FromRoute] Guid authorId) => await authors.GetByIdAsync(authorId); } \ No newline at end of file diff --git a/src/CrowdParlay.Social.Api/v1/Controllers/CommentsController.cs b/src/CrowdParlay.Social.Api/v1/Controllers/CommentsController.cs index 31cc265..5bd9521 100644 --- a/src/CrowdParlay.Social.Api/v1/Controllers/CommentsController.cs +++ b/src/CrowdParlay.Social.Api/v1/Controllers/CommentsController.cs @@ -22,8 +22,8 @@ public class CommentsController(ICommentRepository comments, IHubContext GetCommentById([FromRoute] Guid commentId) => await comments.GetByIdAsync(commentId); @@ -33,8 +33,8 @@ public async Task GetCommentById([FromRoute] Guid commentId) => [HttpGet] [Consumes(MediaTypeNames.Application.Json), Produces(MediaTypeNames.Application.Json)] [ProducesResponseType(typeof(Page), (int)HttpStatusCode.OK)] - [ProducesResponseType(typeof(Problem), (int)HttpStatusCode.InternalServerError)] - [ProducesResponseType(typeof(ValidationProblem), (int)HttpStatusCode.BadRequest)] + [ProducesResponseType(typeof(ProblemDetails), (int)HttpStatusCode.InternalServerError)] + [ProducesResponseType(typeof(ValidationProblemDetails), (int)HttpStatusCode.BadRequest)] public async Task> SearchComments( [FromQuery] Guid? discussionId, [FromQuery] Guid? authorId, @@ -48,9 +48,9 @@ public async Task> SearchComments( [HttpPost, Authorize] [Consumes(MediaTypeNames.Application.Json), Produces(MediaTypeNames.Application.Json)] [ProducesResponseType(typeof(CommentDto), (int)HttpStatusCode.Created)] - [ProducesResponseType(typeof(Problem), (int)HttpStatusCode.InternalServerError)] - [ProducesResponseType(typeof(ValidationProblem), (int)HttpStatusCode.BadRequest)] - [ProducesResponseType(typeof(Problem), (int)HttpStatusCode.Forbidden)] + [ProducesResponseType(typeof(ProblemDetails), (int)HttpStatusCode.InternalServerError)] + [ProducesResponseType(typeof(ValidationProblemDetails), (int)HttpStatusCode.BadRequest)] + [ProducesResponseType(typeof(ProblemDetails), (int)HttpStatusCode.Forbidden)] public async Task> Create([FromBody] CommentRequest request) { var authorId = @@ -72,9 +72,9 @@ public async Task> Create([FromBody] CommentRequest req [HttpGet("{parentCommentId:guid}/replies")] [Consumes(MediaTypeNames.Application.Json), Produces(MediaTypeNames.Application.Json)] [ProducesResponseType(typeof(Page), (int)HttpStatusCode.OK)] - [ProducesResponseType(typeof(Problem), (int)HttpStatusCode.InternalServerError)] - [ProducesResponseType(typeof(ValidationProblem), (int)HttpStatusCode.BadRequest)] - [ProducesResponseType(typeof(Problem), (int)HttpStatusCode.NotFound)] + [ProducesResponseType(typeof(ProblemDetails), (int)HttpStatusCode.InternalServerError)] + [ProducesResponseType(typeof(ValidationProblemDetails), (int)HttpStatusCode.BadRequest)] + [ProducesResponseType(typeof(ProblemDetails), (int)HttpStatusCode.NotFound)] public async Task> GetRepliesToComment( [FromRoute] Guid parentCommentId, [FromQuery, BindRequired] int offset, @@ -87,10 +87,10 @@ public async Task> GetRepliesToComment( [HttpPost("{parentCommentId:guid}/replies"), Authorize] [Consumes(MediaTypeNames.Application.Json), Produces(MediaTypeNames.Application.Json)] [ProducesResponseType(typeof(CommentDto), (int)HttpStatusCode.Created)] - [ProducesResponseType(typeof(Problem), (int)HttpStatusCode.InternalServerError)] - [ProducesResponseType(typeof(ValidationProblem), (int)HttpStatusCode.BadRequest)] - [ProducesResponseType(typeof(Problem), (int)HttpStatusCode.Forbidden)] - [ProducesResponseType(typeof(Problem), (int)HttpStatusCode.NotFound)] + [ProducesResponseType(typeof(ProblemDetails), (int)HttpStatusCode.InternalServerError)] + [ProducesResponseType(typeof(ValidationProblemDetails), (int)HttpStatusCode.BadRequest)] + [ProducesResponseType(typeof(ProblemDetails), (int)HttpStatusCode.Forbidden)] + [ProducesResponseType(typeof(ProblemDetails), (int)HttpStatusCode.NotFound)] public async Task> ReplyToComment([FromRoute] Guid parentCommentId, [FromBody] ReplyRequest request) { var authorId = diff --git a/src/CrowdParlay.Social.Api/v1/Controllers/DiscussionsController.cs b/src/CrowdParlay.Social.Api/v1/Controllers/DiscussionsController.cs index f0f8e39..ed4cea5 100644 --- a/src/CrowdParlay.Social.Api/v1/Controllers/DiscussionsController.cs +++ b/src/CrowdParlay.Social.Api/v1/Controllers/DiscussionsController.cs @@ -19,7 +19,7 @@ public class DiscussionsController(IDiscussionRepository discussions) : Controll [HttpGet("{discussionId:guid}")] [Consumes(MediaTypeNames.Application.Json), Produces(MediaTypeNames.Application.Json)] [ProducesResponseType(typeof(DiscussionDto), (int)HttpStatusCode.OK)] - [ProducesResponseType(typeof(Problem), (int)HttpStatusCode.NotFound)] + [ProducesResponseType(typeof(ProblemDetails), (int)HttpStatusCode.NotFound)] public async Task GetDiscussionById([FromRoute] Guid discussionId) => await discussions.GetByIdAsync(discussionId); @@ -39,7 +39,7 @@ public async Task> GetDiscussions([FromQuery] Guid? a [HttpPost, Authorize] [Consumes(MediaTypeNames.Application.Json), Produces(MediaTypeNames.Application.Json)] [ProducesResponseType(typeof(DiscussionDto), (int)HttpStatusCode.Created)] - [ProducesResponseType(typeof(Problem), (int)HttpStatusCode.Forbidden)] + [ProducesResponseType(typeof(ProblemDetails), (int)HttpStatusCode.Forbidden)] public async Task> CreateDiscussion([FromBody] DiscussionRequest request) { var authorId =