aboutsummaryrefslogtreecommitdiff
path: root/src/Web
diff options
context:
space:
mode:
authorVictor S <57849063+transtrike@users.noreply.github.com>2021-03-13 11:47:26 +0200
committerGitHub <noreply@github.com>2021-03-13 11:47:26 +0200
commit4add0831649f6e534d3883aa0e0e7f380d8042c7 (patch)
tree9647a722d5974337f999da34b9a023114b0a9324 /src/Web
parent02cf05d6cc38e6907404f65976440b811d6cc60a (diff)
parent93ded2b68a31fc9da643ac65955219e4f306ab82 (diff)
downloadDevHive-4add0831649f6e534d3883aa0e0e7f380d8042c7.tar
DevHive-4add0831649f6e534d3883aa0e0e7f380d8042c7.tar.gz
DevHive-4add0831649f6e534d3883aa0e0e7f380d8042c7.zip
Merge pull request #20 from Team-Kaleidoscope/nswag
XML Documentation on Controllers
Diffstat (limited to 'src/Web')
-rw-r--r--src/Web/DevHive.Web/Controllers/CommentController.cs38
-rw-r--r--src/Web/DevHive.Web/Controllers/FeedController.cs15
-rw-r--r--src/Web/DevHive.Web/Controllers/LanguageController.cs32
-rw-r--r--src/Web/DevHive.Web/Controllers/PostController.cs34
-rw-r--r--src/Web/DevHive.Web/Controllers/ProfilePictureController.cs18
-rw-r--r--src/Web/DevHive.Web/Controllers/RoleController.cs24
-rw-r--r--src/Web/DevHive.Web/Controllers/TechnologyController.cs28
-rw-r--r--src/Web/DevHive.Web/Controllers/UserController.cs52
-rw-r--r--src/Web/DevHive.Web/DevHive.Web.csproj5
9 files changed, 231 insertions, 15 deletions
diff --git a/src/Web/DevHive.Web/Controllers/CommentController.cs b/src/Web/DevHive.Web/Controllers/CommentController.cs
index 1722801..8fa3577 100644
--- a/src/Web/DevHive.Web/Controllers/CommentController.cs
+++ b/src/Web/DevHive.Web/Controllers/CommentController.cs
@@ -10,6 +10,9 @@ using DevHive.Common.Jwt.Interfaces;
namespace DevHive.Web.Controllers
{
+ /// <summary>
+ /// All endpoints for interacting with the comments layer
+ /// </summary>
[ApiController]
[Route("/api/[controller]")]
[Authorize(Roles = "User,Admin")]
@@ -26,6 +29,13 @@ namespace DevHive.Web.Controllers
this._jwtService = jwtService;
}
+ /// <summary>
+ /// Create a comment and attach it to a post
+ /// </summary>
+ /// <param name="userId">The useer's Id</param>
+ /// <param name="createCommentWebModel">The new comment's parametars</param>
+ /// <param name="authorization">JWT Bearer token</param>
+ /// <returns>The comment's Id</returns>
[HttpPost]
public async Task<IActionResult> AddComment(Guid userId, [FromBody] CreateCommentWebModel createCommentWebModel, [FromHeader] string authorization)
{
@@ -46,16 +56,28 @@ namespace DevHive.Web.Controllers
new OkObjectResult(new { Id = id });
}
+ /// <summary>
+ /// Query comment's data by it's Id
+ /// </summary>
+ /// <param name="commentId">The comment's Id</param>
+ /// <returns>Full data model of the comment</returns>
[HttpGet]
[AllowAnonymous]
- public async Task<IActionResult> GetCommentById(Guid id)
+ public async Task<IActionResult> GetCommentById(Guid commentId)
{
- ReadCommentServiceModel readCommentServiceModel = await this._commentService.GetCommentById(id);
+ ReadCommentServiceModel readCommentServiceModel = await this._commentService.GetCommentById(commentId);
ReadCommentWebModel readCommentWebModel = this._commentMapper.Map<ReadCommentWebModel>(readCommentServiceModel);
return new OkObjectResult(readCommentWebModel);
}
+ /// <summary>
+ /// Update comment's parametars. Comment creator only!
+ /// </summary>
+ /// <param name="userId">The comment creator's Id</param>
+ /// <param name="updateCommentWebModel">New comment's parametars</param>
+ /// <param name="authorization">JWT Bearer token</param>
+ /// <returns>Ok result</returns>
[HttpPut]
public async Task<IActionResult> UpdateComment(Guid userId, [FromBody] UpdateCommentWebModel updateCommentWebModel, [FromHeader] string authorization)
{
@@ -73,13 +95,19 @@ namespace DevHive.Web.Controllers
new OkObjectResult(new { Id = id });
}
+ /// <summary>
+ /// Delete a comment. Comment creator only!
+ /// </summary>
+ /// <param name="commentId">Comment's Id</param>
+ /// <param name="authorization">JWT Bearer token</param>
+ /// <returns>Ok result</returns>
[HttpDelete]
- public async Task<IActionResult> DeleteComment(Guid id, [FromHeader] string authorization)
+ public async Task<IActionResult> DeleteComment(Guid commentId, [FromHeader] string authorization)
{
- if (!await this._commentService.ValidateJwtForComment(id, authorization))
+ if (!await this._commentService.ValidateJwtForComment(commentId, authorization))
return new UnauthorizedResult();
- return await this._commentService.DeleteComment(id) ?
+ return await this._commentService.DeleteComment(commentId) ?
new OkResult() :
new BadRequestObjectResult("Could not delete Comment");
}
diff --git a/src/Web/DevHive.Web/Controllers/FeedController.cs b/src/Web/DevHive.Web/Controllers/FeedController.cs
index abca3e4..37532a9 100644
--- a/src/Web/DevHive.Web/Controllers/FeedController.cs
+++ b/src/Web/DevHive.Web/Controllers/FeedController.cs
@@ -10,6 +10,9 @@ using Microsoft.AspNetCore.Mvc;
namespace DevHive.Web.Controllers
{
+ /// <summary>
+ /// All endpoints for interacting with the feed layer
+ /// </summary>
[ApiController]
[Route("/api/[controller]")]
[Authorize(Roles = "User,Admin")]
@@ -24,6 +27,12 @@ namespace DevHive.Web.Controllers
this._mapper = mapper;
}
+ /// <summary>
+ /// Query posts for user's feed
+ /// </summary>
+ /// <param name="userId">The user's Id, whose feed is begin queried</param>
+ /// <param name="getPageWebModel">Page parametars</param>
+ /// <returns>A page of the feed</returns>
[HttpPost]
[Route("GetPosts")]
public async Task<IActionResult> GetPosts(Guid userId, [FromBody] GetPageWebModel getPageWebModel)
@@ -37,6 +46,12 @@ namespace DevHive.Web.Controllers
return new OkObjectResult(readPageWebModel);
}
+ /// <summary>
+ /// Query a user profile's posts
+ /// </summary>
+ /// <param name="username">The user's username, whose posts are being queried</param>
+ /// <param name="getPageWebModel">Page parametars</param>
+ /// <returns>A page of the user's posts</returns>
[HttpPost]
[Route("GetUserPosts")]
[AllowAnonymous]
diff --git a/src/Web/DevHive.Web/Controllers/LanguageController.cs b/src/Web/DevHive.Web/Controllers/LanguageController.cs
index 5b0d5de..665fb66 100644
--- a/src/Web/DevHive.Web/Controllers/LanguageController.cs
+++ b/src/Web/DevHive.Web/Controllers/LanguageController.cs
@@ -10,6 +10,9 @@ using Microsoft.AspNetCore.Mvc;
namespace DevHive.Web.Controllers
{
+ /// <summary>
+ /// All endpoints for interacting with the language layer
+ /// </summary>
[ApiController]
[Route("/api/[controller]")]
public class LanguageController
@@ -23,6 +26,11 @@ namespace DevHive.Web.Controllers
this._languageMapper = mapper;
}
+ /// <summary>
+ /// Create a new language, so users can have a choice. Admin only!
+ /// </summary>
+ /// <param name="createLanguageWebModel">The new language's parametars</param>
+ /// <returns>The new language's Id</returns>
[HttpPost]
[Authorize(Roles = "Admin")]
public async Task<IActionResult> Create([FromBody] CreateLanguageWebModel createLanguageWebModel)
@@ -36,6 +44,11 @@ namespace DevHive.Web.Controllers
new OkObjectResult(new { Id = id });
}
+ /// <summary>
+ /// Query full language data by Id
+ /// </summary>
+ /// <param name="id">The language's Id</param>
+ /// <returns>Full language data</returns>
[HttpGet]
[AllowAnonymous]
public async Task<IActionResult> GetById(Guid id)
@@ -46,6 +59,10 @@ namespace DevHive.Web.Controllers
return new OkObjectResult(languageWebModel);
}
+ /// <summary>
+ /// Query all languages in the database
+ /// </summary>
+ /// <returns>All languages in the database</returns>
[HttpGet]
[Route("GetLanguages")]
[Authorize(Roles = "User,Admin")]
@@ -57,6 +74,12 @@ namespace DevHive.Web.Controllers
return new OkObjectResult(languageWebModels);
}
+ /// <summary>
+ /// Alter language's properties. Admin only!
+ /// </summary>
+ /// <param name="id">The language's Id</param>
+ /// <param name="updateModel">The langauge's new parametars</param>
+ /// <returns>Ok result</returns>
[HttpPut]
[Authorize(Roles = "Admin")]
public async Task<IActionResult> Update(Guid id, [FromBody] UpdateLanguageWebModel updateModel)
@@ -72,11 +95,16 @@ namespace DevHive.Web.Controllers
return new OkResult();
}
+ /// <summary>
+ /// Delete a language. Admin only!
+ /// </summary>
+ /// <param name="langaugeId">The language's Id</param>
+ /// <returns>Ok result</returns>
[HttpDelete]
[Authorize(Roles = "Admin")]
- public async Task<IActionResult> Delete(Guid id)
+ public async Task<IActionResult> Delete(Guid langaugeId)
{
- bool result = await this._languageService.DeleteLanguage(id);
+ bool result = await this._languageService.DeleteLanguage(langaugeId);
if (!result)
return new BadRequestObjectResult("Could not delete Language");
diff --git a/src/Web/DevHive.Web/Controllers/PostController.cs b/src/Web/DevHive.Web/Controllers/PostController.cs
index 309070c..44b291d 100644
--- a/src/Web/DevHive.Web/Controllers/PostController.cs
+++ b/src/Web/DevHive.Web/Controllers/PostController.cs
@@ -10,6 +10,9 @@ using DevHive.Common.Jwt.Interfaces;
namespace DevHive.Web.Controllers
{
+ /// <summary>
+ /// All endpoints for interacting with the post layer
+ /// </summary>
[ApiController]
[Route("/api/[controller]")]
[Authorize(Roles = "User,Admin")]
@@ -27,6 +30,13 @@ namespace DevHive.Web.Controllers
}
#region Create
+ /// <summary>
+ /// Create a new post
+ /// </summary>
+ /// <param name="userId">The user's Id</param>
+ /// <param name="createPostWebModel">The new post's data</param>
+ /// <param name="authorization">JWT Bearer token</param>
+ /// <returns>New post's Id</returns>
[HttpPost]
public async Task<IActionResult> Create(Guid userId, [FromForm] CreatePostWebModel createPostWebModel, [FromHeader] string authorization)
{
@@ -46,6 +56,11 @@ namespace DevHive.Web.Controllers
#endregion
#region Read
+ /// <summary>
+ /// Query full post's data by it's Id
+ /// </summary>
+ /// <param name="id">The post's Id</param>
+ /// <returns>Full data model of the post</returns>
[HttpGet]
[AllowAnonymous]
public async Task<IActionResult> GetById(Guid id)
@@ -58,6 +73,13 @@ namespace DevHive.Web.Controllers
#endregion
#region Update
+ /// <summary>
+ /// Update post's data. Creator only!
+ /// </summary>
+ /// <param name="userId">The post creator's Id</param>
+ /// <param name="updatePostWebModel">The new params of the post</param>
+ /// <param name="authorization">JWT Bearer token</param>
+ /// <returns>The post's Id</returns>
[HttpPut]
public async Task<IActionResult> Update(Guid userId, [FromForm] UpdatePostWebModel updatePostWebModel, [FromHeader] string authorization)
{
@@ -80,13 +102,19 @@ namespace DevHive.Web.Controllers
#endregion
#region Delete
+ /// <summary>
+ /// Delete a post. Creator only!
+ /// </summary>
+ /// <param name="postId">Post's Id</param>
+ /// <param name="authorization">JWT Bearer token</param>
+ /// <returns>Ok result</returns>
[HttpDelete]
- public async Task<IActionResult> Delete(Guid id, [FromHeader] string authorization)
+ public async Task<IActionResult> Delete(Guid postId, [FromHeader] string authorization)
{
- if (!await this._postService.ValidateJwtForPost(id, authorization))
+ if (!await this._postService.ValidateJwtForPost(postId, authorization))
return new UnauthorizedResult();
- return await this._postService.DeletePost(id) ?
+ return await this._postService.DeletePost(postId) ?
new OkResult() :
new BadRequestObjectResult("Could not delete Post");
}
diff --git a/src/Web/DevHive.Web/Controllers/ProfilePictureController.cs b/src/Web/DevHive.Web/Controllers/ProfilePictureController.cs
index d3971ff..2eec99e 100644
--- a/src/Web/DevHive.Web/Controllers/ProfilePictureController.cs
+++ b/src/Web/DevHive.Web/Controllers/ProfilePictureController.cs
@@ -1,16 +1,32 @@
using System;
using System.Threading.Tasks;
-using DevHive.Services.Models.User;
using DevHive.Web.Models.User;
using Microsoft.AspNetCore.Authorization;
using Microsoft.AspNetCore.Mvc;
namespace DevHive.Web.Controllers
{
+ /// <summary>
+ /// All endpoints for interacting with the profile picture layer
+ /// </summary>
[ApiController]
[Route("api/[controller]")]
public class ProfilePictureController
{
+ // private readonly ProfilePictureService _profilePictureService;
+
+ // public ProfilePictureController(ProfilePictureService profilePictureService)
+ // {
+ // this._profilePictureService = profilePictureService;
+ // }
+
+ /// <summary>
+ /// Alter the profile picture of a user
+ /// </summary>
+ /// <param name="userId">The user's Id</param>
+ /// <param name="updateProfilePictureWebModel">The new profile picture</param>
+ /// <param name="authorization">JWT Bearer Token</param>
+ /// <returns>???</returns>
[HttpPut]
[Route("ProfilePicture")]
[Authorize(Roles = "User,Admin")]
diff --git a/src/Web/DevHive.Web/Controllers/RoleController.cs b/src/Web/DevHive.Web/Controllers/RoleController.cs
index 1465795..ebb305e 100644
--- a/src/Web/DevHive.Web/Controllers/RoleController.cs
+++ b/src/Web/DevHive.Web/Controllers/RoleController.cs
@@ -9,6 +9,9 @@ using Microsoft.AspNetCore.Authorization;
namespace DevHive.Web.Controllers
{
+ /// <summary>
+ /// All endpoints for interacting with the roles layer
+ /// </summary>
[ApiController]
[Route("/api/[controller]")]
public class RoleController
@@ -22,6 +25,11 @@ namespace DevHive.Web.Controllers
this._roleMapper = mapper;
}
+ /// <summary>
+ /// Create a new role for the roles hierarchy. Admin only!
+ /// </summary>
+ /// <param name="createRoleWebModel">The new role's parametars</param>
+ /// <returns>The new role's Id</returns>
[HttpPost]
[Authorize(Roles = "Admin")]
public async Task<IActionResult> Create([FromBody] CreateRoleWebModel createRoleWebModel)
@@ -36,6 +44,11 @@ namespace DevHive.Web.Controllers
new OkObjectResult(new { Id = id });
}
+ /// <summary>
+ /// Get a role's full data, querying it by it's Id
+ /// </summary>
+ /// <param name="id">The role's Id</param>
+ /// <returns>Full info of the role</returns>
[HttpGet]
[Authorize(Roles = "User,Admin")]
public async Task<IActionResult> GetById(Guid id)
@@ -46,6 +59,12 @@ namespace DevHive.Web.Controllers
return new OkObjectResult(roleWebModel);
}
+ /// <summary>
+ /// Update a role's parametars. Admin only!
+ /// </summary>
+ /// <param name="id">The role's Id</param>
+ /// <param name="updateRoleWebModel">The new parametrats for that role</param>
+ /// <returns>Ok result</returns>
[HttpPut]
[Authorize(Roles = "Admin")]
public async Task<IActionResult> Update(Guid id, [FromBody] UpdateRoleWebModel updateRoleWebModel)
@@ -62,6 +81,11 @@ namespace DevHive.Web.Controllers
return new OkResult();
}
+ /// <summary>
+ /// Delete a role. Admin only!
+ /// </summary>
+ /// <param name="id">The role's Id</param>
+ /// <returns>Ok result</returns>
[HttpDelete]
[Authorize(Roles = "Admin")]
public async Task<IActionResult> Delete(Guid id)
diff --git a/src/Web/DevHive.Web/Controllers/TechnologyController.cs b/src/Web/DevHive.Web/Controllers/TechnologyController.cs
index e507899..ecf2bd7 100644
--- a/src/Web/DevHive.Web/Controllers/TechnologyController.cs
+++ b/src/Web/DevHive.Web/Controllers/TechnologyController.cs
@@ -10,6 +10,9 @@ using Microsoft.AspNetCore.Mvc;
namespace DevHive.Web.Controllers
{
+ /// <summary>
+ /// All endpoints for interacting with the technology layer
+ /// </summary>
[ApiController]
[Route("/api/[controller]")]
public class TechnologyController
@@ -23,6 +26,11 @@ namespace DevHive.Web.Controllers
this._technologyMapper = technologyMapper;
}
+ /// <summary>
+ /// Create a new technology, so users can have a choice. Admin only!
+ /// </summary>
+ /// <param name="createTechnologyWebModel">Data for the new technology</param>
+ /// <returns>The new technology's Id</returns>
[HttpPost]
[Authorize(Roles = "Admin")]
public async Task<IActionResult> Create([FromBody] CreateTechnologyWebModel createTechnologyWebModel)
@@ -36,6 +44,11 @@ namespace DevHive.Web.Controllers
new OkObjectResult(new { Id = id });
}
+ /// <summary>
+ /// Get technology's data by it's Id
+ /// </summary>
+ /// <param name="id">The technology's Id</param>
+ /// <returns>The technology's full data</returns>
[HttpGet]
[AllowAnonymous]
public async Task<IActionResult> GetById(Guid id)
@@ -46,6 +59,10 @@ namespace DevHive.Web.Controllers
return new OkObjectResult(readTechnologyWebModel);
}
+ /// <summary>
+ /// Get all technologies from our database
+ /// </summary>
+ /// <returns>All technologies</returns>
[HttpGet]
[Route("GetTechnologies")]
[Authorize(Roles = "User,Admin")]
@@ -57,6 +74,12 @@ namespace DevHive.Web.Controllers
return new OkObjectResult(languageWebModels);
}
+ /// <summary>
+ /// Alter a technology's parameters. Admin only!
+ /// </summary>
+ /// <param name="id">Technology's Id</param>
+ /// <param name="updateModel">The new parametars</param>
+ /// <returns>Ok result</returns>
[HttpPut]
[Authorize(Roles = "Admin")]
public async Task<IActionResult> Update(Guid id, [FromBody] UpdateTechnologyWebModel updateModel)
@@ -72,6 +95,11 @@ namespace DevHive.Web.Controllers
return new OkResult();
}
+ /// <summary>
+ /// Delete a etchnology from the database. Admin only!
+ /// </summary>
+ /// <param name="id">The technology's Id</param>
+ /// <returns>Ok result</returns>
[HttpDelete]
[Authorize(Roles = "Admin")]
public async Task<IActionResult> Delete(Guid id)
diff --git a/src/Web/DevHive.Web/Controllers/UserController.cs b/src/Web/DevHive.Web/Controllers/UserController.cs
index b01ecc1..4d01447 100644
--- a/src/Web/DevHive.Web/Controllers/UserController.cs
+++ b/src/Web/DevHive.Web/Controllers/UserController.cs
@@ -8,12 +8,16 @@ using Microsoft.AspNetCore.Mvc;
using DevHive.Common.Models.Identity;
using DevHive.Services.Interfaces;
using DevHive.Common.Jwt.Interfaces;
-using DevHive.Web.Models.Attributes;
+using NSwag.Annotations;
namespace DevHive.Web.Controllers
{
+ /// <summary>
+ /// All endpoints for integration with the User
+ /// </summary>
[ApiController]
[Route("/api/[controller]")]
+ [OpenApiController("User Controller")]
public class UserController : ControllerBase
{
private readonly IUserService _userService;
@@ -28,9 +32,15 @@ namespace DevHive.Web.Controllers
}
#region Authentication
+ /// <summary>
+ /// Login endpoint for the DevHive Social Platform
+ /// </summary>
+ /// <param name="loginModel">Login model with username and password</param>
+ /// <returns>A JWT Token for further validation</returns>
[HttpPost]
- [Route("Login")]
[AllowAnonymous]
+ [Route("Login")]
+ [OpenApiTags("Authorization")]
public async Task<IActionResult> Login([FromBody] LoginWebModel loginModel)
{
LoginServiceModel loginServiceModel = this._userMapper.Map<LoginServiceModel>(loginModel);
@@ -41,9 +51,15 @@ namespace DevHive.Web.Controllers
return new OkObjectResult(tokenWebModel);
}
+ /// <summary>
+ /// Register a new User in the DevHive Social Platform
+ /// </summary>
+ /// <param name="registerModel">Register model with the new data to provide</param>
+ /// <returns>A JWT Token for further validation</returns>
[HttpPost]
- [Route("Register")]
[AllowAnonymous]
+ [Route("Register")]
+ [OpenApiTag("Authorization")]
public async Task<IActionResult> Register([FromBody] RegisterWebModel registerModel)
{
RegisterServiceModel registerServiceModel = this._userMapper.Map<RegisterServiceModel>(registerModel);
@@ -56,6 +72,12 @@ namespace DevHive.Web.Controllers
#endregion
#region Read
+ /// <summary>
+ /// Get a User's information using the Guid
+ /// </summary>
+ /// <param name="id">User's Id</param>
+ /// <param name="authorization">The JWT Token, contained in the header and used for validation</param>
+ /// <returns>A full User's read model</returns>
[HttpGet]
[Authorize(Roles = "User,Admin")]
public async Task<IActionResult> GetById(Guid id, [FromHeader] string authorization)
@@ -69,6 +91,11 @@ namespace DevHive.Web.Controllers
return new OkObjectResult(userWebModel);
}
+ /// <summary>
+ /// Get a User's profile using his username. Does NOT require authorization
+ /// </summary>
+ /// <param name="username">User's username</param>
+ /// <returns>A trimmed version of the full User's read model</returns>
[HttpGet]
[Route("GetUser")]
[AllowAnonymous]
@@ -82,6 +109,13 @@ namespace DevHive.Web.Controllers
#endregion
#region Update
+ /// <summary>
+ /// Full update on User's data. A PUSTINQK can only edit his account
+ /// </summary>
+ /// <param name="id">The User's Id</param>
+ /// <param name="updateUserWebModel">A full User update model</param>
+ /// <param name="authorization">The JWT Token, contained in the header and used for validation</param>
+ /// <returns>A full User's read model</returns>
[HttpPut]
[Authorize(Roles = "User,Admin")]
public async Task<IActionResult> Update(Guid id, [FromBody] UpdateUserWebModel updateUserWebModel, [FromHeader] string authorization)
@@ -100,6 +134,12 @@ namespace DevHive.Web.Controllers
#endregion
#region Delete
+ /// <summary>
+ /// Delete a User with his Id. A PUSTINQK can only delete his account. An Admin can delete all accounts
+ /// </summary>
+ /// <param name="id">The User's Id</param>
+ /// <param name="authorization">The JWT Token, contained in the header and used for validation</param>
+ /// <returns>Ok, BadRequest or Unauthorized</returns>
[HttpDelete]
[Authorize(Roles = "User,Admin")]
public async Task<IActionResult> Delete(Guid id, [FromHeader] string authorization)
@@ -115,7 +155,13 @@ namespace DevHive.Web.Controllers
}
#endregion
+ /// <summary>
+ /// We don't talk about that, NIGGA!
+ /// </summary>
+ /// <param name="userId"></param>
+ /// <returns></returns>
[HttpPost]
+ [OpenApiIgnore]
[Authorize(Roles = "User,Admin")]
[Route("SuperSecretPromotionToAdmin")]
public async Task<IActionResult> SuperSecretPromotionToAdmin(Guid userId)
diff --git a/src/Web/DevHive.Web/DevHive.Web.csproj b/src/Web/DevHive.Web/DevHive.Web.csproj
index 38f21e6..39322ae 100644
--- a/src/Web/DevHive.Web/DevHive.Web.csproj
+++ b/src/Web/DevHive.Web/DevHive.Web.csproj
@@ -25,6 +25,9 @@
<PackageReference Include="NSwag.Generation.AspNetCore" Version="13.10.7"/>
<PackageReference Include="NSwag.Annotations" Version="13.10.7"/>
<PackageReference Include="NSwag.Core" Version="13.10.7"/>
+ <PackageReference Include="Swashbuckle.AspNetCore.Swagger" Version="6.1.0"/>
+ <PackageReference Include="Swashbuckle.AspNetCore.SwaggerGen" Version="6.1.0"/>
+ <PackageReference Include="NSwag.SwaggerGeneration.WebApi" Version="12.3.0"/>
</ItemGroup>
<ItemGroup>
<ProjectReference Include="..\DevHive.Web.Models\DevHive.Web.Models.csproj"/>
@@ -32,4 +35,4 @@
<ProjectReference Include="..\..\Common\DevHive.Common.Models\DevHive.Common.Models.csproj"/>
<ProjectReference Include="..\..\Common\DevHive.Common\DevHive.Common.csproj"/>
</ItemGroup>
-</Project>
+</Project> \ No newline at end of file