Implement GenerateTokens (POST) in TokensController.cs
This commit is contained in:
parent
0d9a60c869
commit
348e69cd88
3 changed files with 84 additions and 7 deletions
58
Retroactiune.WebAPI/Controllers/TokensController.cs
Normal file
58
Retroactiune.WebAPI/Controllers/TokensController.cs
Normal file
|
@ -0,0 +1,58 @@
|
|||
using System.ComponentModel.DataAnnotations;
|
||||
using System.Linq;
|
||||
using System.Threading.Tasks;
|
||||
using Microsoft.AspNetCore.Http;
|
||||
using Microsoft.AspNetCore.Mvc;
|
||||
using Retroactiune.DataTransferObjects;
|
||||
using Retroactiune.Services;
|
||||
|
||||
namespace Retroactiune.Controllers
|
||||
{
|
||||
[ApiController]
|
||||
[Route("api/v1/[controller]")]
|
||||
public class TokensController : ControllerBase
|
||||
{
|
||||
// TODO: Add tokens, list tokens (unused, used), delete tokens.
|
||||
|
||||
private readonly IFeedbackReceiverService _feedbackReceiverService;
|
||||
private readonly ITokensService _tokensService;
|
||||
|
||||
public TokensController(IFeedbackReceiverService feedbackReceiverService, ITokensService tokensService)
|
||||
{
|
||||
_feedbackReceiverService = feedbackReceiverService;
|
||||
_tokensService = tokensService;
|
||||
}
|
||||
|
||||
// TODO: Test unit & integrations.
|
||||
/// <summary>
|
||||
/// Creates a new batch of tokens, the tokens are tied to a FeedbackReceiver and are used by the client
|
||||
/// when leaving Feedback.
|
||||
/// </summary>
|
||||
/// <param name="generateTokensDto">The list of FeedbackReceivers</param>
|
||||
/// <returns>A BasicResponse indicating success.</returns>
|
||||
/// <response code="200">Returns ok.</response>
|
||||
/// <response code="400">If the items is invalid</response>
|
||||
[HttpPost]
|
||||
[ProducesResponseType(typeof(BasicResponse), StatusCodes.Status201Created)]
|
||||
[ProducesResponseType(StatusCodes.Status400BadRequest)]
|
||||
public async Task<IActionResult> GenerateTokens([Required] GenerateTokensDto generateTokensDto)
|
||||
{
|
||||
var feedbackReceiverId = generateTokensDto.FeedbackReceiverId;
|
||||
var result = await _feedbackReceiverService.FindAsync(
|
||||
new[] {feedbackReceiverId});
|
||||
if (!result.Any())
|
||||
{
|
||||
return BadRequest(new BasicResponse
|
||||
{
|
||||
Message = $"Invalid FeedbackReceiverId {generateTokensDto.FeedbackReceiverId}."
|
||||
});
|
||||
}
|
||||
|
||||
await _tokensService.GenerateTokensAsync(generateTokensDto.NumberOfTokens, feedbackReceiverId, generateTokensDto.ExpiryTime);
|
||||
return Ok(new BasicResponse
|
||||
{
|
||||
Message = "Tokens generated."
|
||||
});
|
||||
}
|
||||
}
|
||||
}
|
|
@ -1,11 +1,11 @@
|
|||
using System.Collections.Generic;
|
||||
using System;
|
||||
using System.Threading.Tasks;
|
||||
using Retroactiune.Models;
|
||||
|
||||
namespace Retroactiune.Services
|
||||
{
|
||||
public interface ITokensService
|
||||
{
|
||||
public Task CreateManyAsync(IEnumerable<Token> items);
|
||||
public Task GenerateTokensAsync(int numberOfTokens, string feedbackReceiverGuid,
|
||||
DateTime? expiryTime = null);
|
||||
}
|
||||
}
|
|
@ -1,10 +1,10 @@
|
|||
using System.Collections.Generic;
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Threading.Tasks;
|
||||
using MongoDB.Driver;
|
||||
using Retroactiune.Models;
|
||||
using Retroactiune.Settings;
|
||||
|
||||
// TODO: Test
|
||||
namespace Retroactiune.Services
|
||||
{
|
||||
public class TokensService : ITokensService
|
||||
|
@ -17,9 +17,28 @@ namespace Retroactiune.Services
|
|||
_collection = database.GetCollection<Token>(settings.TokensCollectionName);
|
||||
}
|
||||
|
||||
public async Task CreateManyAsync(IEnumerable<Token> items)
|
||||
public async Task GenerateTokensAsync(int numberOfTokens, string feedbackReceiverGuid,
|
||||
DateTime? expiryTime = null)
|
||||
{
|
||||
throw new System.NotImplementedException();
|
||||
// TODO: Test unit
|
||||
if (numberOfTokens <= 0)
|
||||
{
|
||||
throw new ArgumentException("numberOfTokens must be positive");
|
||||
}
|
||||
|
||||
var token = new List<Token>();
|
||||
for (var i = 0; i < numberOfTokens; i++)
|
||||
{
|
||||
token.Add(new Token
|
||||
{
|
||||
CreatedAt = DateTime.UtcNow,
|
||||
FeedbackReceiverId = feedbackReceiverGuid,
|
||||
ExpiryTime = null,
|
||||
TimeUsed = null
|
||||
});
|
||||
}
|
||||
|
||||
await _collection.InsertManyAsync(token);
|
||||
}
|
||||
}
|
||||
}
|
Loading…
Reference in a new issue