aboutsummaryrefslogtreecommitdiff
path: root/src/Web/DevHive.Web/Controllers/RatingController.cs
diff options
context:
space:
mode:
authorSyndamia <kamen.d.mladenov@protonmail.com>2021-03-13 15:07:51 +0200
committerSyndamia <kamen.d.mladenov@protonmail.com>2021-03-13 15:07:51 +0200
commit75d57f305f2ed1ecf8b82bd62d4bb8f17c06303b (patch)
treeb721fe307d22a7a89f8ee13b3e557df4a2e2bbab /src/Web/DevHive.Web/Controllers/RatingController.cs
parent503a23c04355624b133161c9356b139f2e4500f6 (diff)
parent4add0831649f6e534d3883aa0e0e7f380d8042c7 (diff)
downloadDevHive-75d57f305f2ed1ecf8b82bd62d4bb8f17c06303b.tar
DevHive-75d57f305f2ed1ecf8b82bd62d4bb8f17c06303b.tar.gz
DevHive-75d57f305f2ed1ecf8b82bd62d4bb8f17c06303b.zip
Merge branch 'dev' of github.com:Team-Kaleidoscope/DevHive into unit_test_refactoring
Diffstat (limited to 'src/Web/DevHive.Web/Controllers/RatingController.cs')
-rw-r--r--src/Web/DevHive.Web/Controllers/RatingController.cs99
1 files changed, 99 insertions, 0 deletions
diff --git a/src/Web/DevHive.Web/Controllers/RatingController.cs b/src/Web/DevHive.Web/Controllers/RatingController.cs
new file mode 100644
index 0000000..5716b85
--- /dev/null
+++ b/src/Web/DevHive.Web/Controllers/RatingController.cs
@@ -0,0 +1,99 @@
+using System;
+using System.Threading.Tasks;
+using AutoMapper;
+using DevHive.Common.Jwt.Interfaces;
+using DevHive.Services.Interfaces;
+using DevHive.Services.Models.Post.Rating;
+using DevHive.Web.Models.Rating;
+using Microsoft.AspNetCore.Authorization;
+using Microsoft.AspNetCore.Mvc;
+
+namespace DevHive.Web.Controllers
+{
+ [ApiController]
+ //[Authorize(Roles = "Admin,User")]
+ [Route("api/[controller]")]
+ public class RatingController
+ {
+ private readonly IRatingService _rateService;
+ private readonly IUserService _userService;
+ private readonly IMapper _mapper;
+ private readonly IJwtService _jwtService;
+
+ public RatingController(IRatingService rateService, IUserService userService, IMapper mapper, IJwtService jwtService)
+ {
+ this._rateService = rateService;
+ this._userService = userService;
+ this._mapper = mapper;
+ this._jwtService = jwtService;
+ }
+
+ [HttpPost]
+ public async Task<IActionResult> RatePost(Guid userId, [FromBody] CreateRatingWebModel createRatingWebModel, [FromHeader] string authorization)
+ {
+ if (!this._jwtService.ValidateToken(userId, authorization))
+ return new UnauthorizedResult();
+
+ CreateRatingServiceModel ratePostServiceModel = this._mapper.Map<CreateRatingServiceModel>(createRatingWebModel);
+ ratePostServiceModel.UserId = userId;
+
+ Guid id = await this._rateService.RatePost(ratePostServiceModel);
+
+ if (Guid.Empty == id)
+ return new BadRequestResult();
+
+ return new OkObjectResult(new { Id = id });
+ }
+
+ [HttpGet]
+ public async Task<IActionResult> GetRatingById(Guid id)
+ {
+ ReadRatingServiceModel readRatingServiceModel = await this._rateService.GetRatingById(id);
+ ReadRatingWebModel readPostRatingWebModel = this._mapper.Map<ReadRatingWebModel>(readRatingServiceModel);
+
+ return new OkObjectResult(readPostRatingWebModel);
+ }
+
+ [HttpGet]
+ [Route("GetByUserAndPost")]
+ public async Task<IActionResult> GetRatingByUserAndPost(Guid userId, Guid postId)
+ {
+ ReadRatingServiceModel readRatingServiceModel = await this._rateService.GetRatingByPostAndUser(userId, postId);
+ ReadRatingWebModel readPostRatingWebModel = this._mapper.Map<ReadRatingWebModel>(readRatingServiceModel);
+
+ return new OkObjectResult(readPostRatingWebModel);
+ }
+
+ [HttpPut]
+ public async Task<IActionResult> UpdateRating(Guid userId, [FromBody] UpdateRatingWebModel updateRatingWebModel, [FromHeader] string authorization)
+ {
+ if (!this._jwtService.ValidateToken(userId, authorization))
+ return new UnauthorizedResult();
+
+ UpdateRatingServiceModel updateRatingServiceModel =
+ this._mapper.Map<UpdateRatingServiceModel>(updateRatingWebModel);
+ updateRatingServiceModel.UserId = userId;
+
+ ReadRatingServiceModel readRatingServiceModel = await this._rateService.UpdateRating(updateRatingServiceModel);
+
+ if (readRatingServiceModel == null)
+ return new BadRequestResult();
+ else
+ {
+ ReadRatingWebModel readRatingWebModel = this._mapper.Map<ReadRatingWebModel>(readRatingServiceModel);
+ return new OkObjectResult(readRatingWebModel);
+ }
+ }
+
+ [HttpDelete]
+ public async Task<IActionResult> DeleteTating(Guid userId, Guid ratingId, [FromHeader] string authorization)
+ {
+ if (!this._jwtService.ValidateToken(userId, authorization))
+ return new UnauthorizedResult();
+
+ return await this._rateService.DeleteRating(ratingId) ?
+ new OkResult() :
+ new BadRequestObjectResult("Could not delete Rating");
+ }
+ }
+}