Add Token & TokensService.cs
This commit is contained in:
parent
0d1e880d18
commit
e2d3ef888d
15 changed files with 117 additions and 13 deletions
|
@ -14,6 +14,7 @@ using Microsoft.Extensions.DependencyInjection;
|
||||||
using Microsoft.Extensions.Options;
|
using Microsoft.Extensions.Options;
|
||||||
using MongoDB.Bson;
|
using MongoDB.Bson;
|
||||||
using MongoDB.Driver;
|
using MongoDB.Driver;
|
||||||
|
using Retroactiune.DataTransferObjects;
|
||||||
using Retroactiune.IntegrationTests.Retroactiune.WebAPI.Fixtures;
|
using Retroactiune.IntegrationTests.Retroactiune.WebAPI.Fixtures;
|
||||||
using Retroactiune.Models;
|
using Retroactiune.Models;
|
||||||
using Retroactiune.Settings;
|
using Retroactiune.Settings;
|
||||||
|
|
|
@ -10,7 +10,7 @@ namespace Retroactiune.IntegrationTests.Retroactiune.WebAPI.Fixtures
|
||||||
{
|
{
|
||||||
public class MongoDbFixture : IAsyncDisposable
|
public class MongoDbFixture : IAsyncDisposable
|
||||||
{
|
{
|
||||||
private IMongoDbSettings _settings;
|
private readonly IMongoDbSettings _settings;
|
||||||
public IMongoDatabase Database { get; }
|
public IMongoDatabase Database { get; }
|
||||||
|
|
||||||
public IMongoCollection<FeedbackReceiver> FeedbackReceiverCollection =>
|
public IMongoCollection<FeedbackReceiver> FeedbackReceiverCollection =>
|
||||||
|
|
|
@ -5,6 +5,7 @@ using AutoFixture.Xunit2;
|
||||||
using Microsoft.AspNetCore.Mvc;
|
using Microsoft.AspNetCore.Mvc;
|
||||||
using Moq;
|
using Moq;
|
||||||
using Retroactiune.Controllers;
|
using Retroactiune.Controllers;
|
||||||
|
using Retroactiune.DataTransferObjects;
|
||||||
using Retroactiune.Models;
|
using Retroactiune.Models;
|
||||||
using Retroactiune.Services;
|
using Retroactiune.Services;
|
||||||
using Xunit;
|
using Xunit;
|
||||||
|
|
|
@ -7,6 +7,7 @@ using AutoMapper;
|
||||||
using Microsoft.AspNetCore.Http;
|
using Microsoft.AspNetCore.Http;
|
||||||
using Microsoft.AspNetCore.Mvc;
|
using Microsoft.AspNetCore.Mvc;
|
||||||
using Microsoft.Extensions.Options;
|
using Microsoft.Extensions.Options;
|
||||||
|
using Retroactiune.DataTransferObjects;
|
||||||
using Retroactiune.Models;
|
using Retroactiune.Models;
|
||||||
using Retroactiune.Services;
|
using Retroactiune.Services;
|
||||||
|
|
||||||
|
@ -34,10 +35,10 @@ namespace Retroactiune.Controllers
|
||||||
/// </summary>
|
/// </summary>
|
||||||
/// <param name="items">The list of FeedbackReceivers</param>
|
/// <param name="items">The list of FeedbackReceivers</param>
|
||||||
/// <returns>A BasicResponse indicating success.</returns>
|
/// <returns>A BasicResponse indicating success.</returns>
|
||||||
/// <response code="201">Returns the newly created item</response>
|
/// <response code="200">Returns an ok message.</response>
|
||||||
/// <response code="400">If the items is invalid</response>
|
/// <response code="400">If the items is invalid</response>
|
||||||
[HttpPost]
|
[HttpPost]
|
||||||
[ProducesResponseType(typeof(BasicResponse), StatusCodes.Status201Created)]
|
[ProducesResponseType(typeof(BasicResponse), StatusCodes.Status200OK)]
|
||||||
[ProducesResponseType(StatusCodes.Status400BadRequest)]
|
[ProducesResponseType(StatusCodes.Status400BadRequest)]
|
||||||
public async Task<IActionResult> Post([Required] IEnumerable<FeedbackReceiverInDto> items)
|
public async Task<IActionResult> Post([Required] IEnumerable<FeedbackReceiverInDto> items)
|
||||||
{
|
{
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
namespace Retroactiune.Models
|
namespace Retroactiune.DataTransferObjects
|
||||||
{
|
{
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Simple response model that contains a message.
|
/// Simple response model that contains a message.
|
|
@ -1,6 +1,7 @@
|
||||||
using System.ComponentModel.DataAnnotations;
|
using System.ComponentModel.DataAnnotations;
|
||||||
|
using Retroactiune.Models;
|
||||||
|
|
||||||
namespace Retroactiune.Models
|
namespace Retroactiune.DataTransferObjects
|
||||||
{
|
{
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// FeedbackReceiverInDto is the DTO for <see cref="FeedbackReceiver"/>, used in incoming requests.
|
/// FeedbackReceiverInDto is the DTO for <see cref="FeedbackReceiver"/>, used in incoming requests.
|
||||||
|
@ -13,11 +14,4 @@ namespace Retroactiune.Models
|
||||||
[Required]
|
[Required]
|
||||||
public string Description { get; set; }
|
public string Description { get; set; }
|
||||||
}
|
}
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// FeedbackReceiverDto is the DTO for <see cref="FeedbackReceiver"/>, used in outgoing requests.
|
|
||||||
/// </summary>
|
|
||||||
public class FeedbackReceiverOutDto : FeedbackReceiver
|
|
||||||
{
|
|
||||||
}
|
|
||||||
}
|
}
|
|
@ -0,0 +1,11 @@
|
||||||
|
using Retroactiune.Models;
|
||||||
|
|
||||||
|
namespace Retroactiune.DataTransferObjects
|
||||||
|
{
|
||||||
|
/// <summary>
|
||||||
|
/// FeedbackReceiverDto is the DTO for <see cref="FeedbackReceiver"/>, used in outgoing requests.
|
||||||
|
/// </summary>
|
||||||
|
public class FeedbackReceiverOutDto : FeedbackReceiver
|
||||||
|
{
|
||||||
|
}
|
||||||
|
}
|
21
Retroactiune.WebAPI/DataTransferObjects/GenerateTokensDto.cs
Normal file
21
Retroactiune.WebAPI/DataTransferObjects/GenerateTokensDto.cs
Normal file
|
@ -0,0 +1,21 @@
|
||||||
|
using System;
|
||||||
|
using System.ComponentModel.DataAnnotations;
|
||||||
|
using Retroactiune.DataAnnotations;
|
||||||
|
|
||||||
|
namespace Retroactiune.DataTransferObjects
|
||||||
|
{
|
||||||
|
/// <summary>
|
||||||
|
/// GenerateTokensDto is the payload that is sent by the user for generating tokens.
|
||||||
|
/// </summary>
|
||||||
|
public class GenerateTokensDto
|
||||||
|
{
|
||||||
|
[Range(1, 1000, ErrorMessage = "numberOfTokens is out of range, allowed ranges [1-1000]")]
|
||||||
|
public int NumberOfTokens { get; set; } = 1;
|
||||||
|
|
||||||
|
[Required, StringLength(24, ErrorMessage = "invalid guid, must be 24 characters", MinimumLength = 24)]
|
||||||
|
public string FeedbackReceiverId { get; set; }
|
||||||
|
|
||||||
|
[DatetimeNotInThePast(ErrorMessage = "expiryTime cannot be in the past!")]
|
||||||
|
public DateTime? ExpiryTime { get; set; } = null;
|
||||||
|
}
|
||||||
|
}
|
|
@ -1,4 +1,5 @@
|
||||||
using AutoMapper;
|
using AutoMapper;
|
||||||
|
using Retroactiune.DataTransferObjects;
|
||||||
using Retroactiune.Models;
|
using Retroactiune.Models;
|
||||||
|
|
||||||
namespace Retroactiune
|
namespace Retroactiune
|
||||||
|
|
7
Retroactiune.WebAPI/Models/Feedback.cs
Normal file
7
Retroactiune.WebAPI/Models/Feedback.cs
Normal file
|
@ -0,0 +1,7 @@
|
||||||
|
namespace Retroactiune.Models
|
||||||
|
{
|
||||||
|
public class Feedback
|
||||||
|
{
|
||||||
|
// TODO: Entity model for feedback.
|
||||||
|
}
|
||||||
|
}
|
|
@ -6,7 +6,7 @@ using MongoDB.Bson.Serialization.Attributes;
|
||||||
namespace Retroactiune.Models
|
namespace Retroactiune.Models
|
||||||
{
|
{
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// FeedbackReceiver is the thing that receives feedback.
|
/// FeedbackReceiver is the entity that receives feedback from the users.
|
||||||
/// </summary>
|
/// </summary>
|
||||||
public class FeedbackReceiver
|
public class FeedbackReceiver
|
||||||
{
|
{
|
||||||
|
|
30
Retroactiune.WebAPI/Models/Token.cs
Normal file
30
Retroactiune.WebAPI/Models/Token.cs
Normal file
|
@ -0,0 +1,30 @@
|
||||||
|
using System;
|
||||||
|
using System.Text.Json.Serialization;
|
||||||
|
using MongoDB.Bson;
|
||||||
|
using MongoDB.Bson.Serialization.Attributes;
|
||||||
|
|
||||||
|
namespace Retroactiune.Models
|
||||||
|
{
|
||||||
|
/// <summary>
|
||||||
|
/// Token represents a token.
|
||||||
|
/// Token is used to authorize a <see cref="Feedback"/> for the <see cref="FeedbackReceiver"/>.
|
||||||
|
/// </summary>
|
||||||
|
public class Token
|
||||||
|
{
|
||||||
|
[BsonId, JsonPropertyName("id")]
|
||||||
|
[BsonRepresentation(BsonType.ObjectId)]
|
||||||
|
public string Id { get; set; }
|
||||||
|
|
||||||
|
[BsonRepresentation(BsonType.ObjectId), JsonPropertyName("feedback_receiver_id")]
|
||||||
|
public string FeedbackReceiverId { get; set; }
|
||||||
|
|
||||||
|
[JsonPropertyName("time_used")]
|
||||||
|
public DateTime? TimeUsed { get; set; }
|
||||||
|
|
||||||
|
[JsonPropertyName("created_at")]
|
||||||
|
public DateTime CreatedAt { get; set; }
|
||||||
|
|
||||||
|
[JsonPropertyName("expiry_time")]
|
||||||
|
public DateTime? ExpiryTime { get; set; }
|
||||||
|
}
|
||||||
|
}
|
11
Retroactiune.WebAPI/Services/ITokensService.cs
Normal file
11
Retroactiune.WebAPI/Services/ITokensService.cs
Normal file
|
@ -0,0 +1,11 @@
|
||||||
|
using System.Collections.Generic;
|
||||||
|
using System.Threading.Tasks;
|
||||||
|
using Retroactiune.Models;
|
||||||
|
|
||||||
|
namespace Retroactiune.Services
|
||||||
|
{
|
||||||
|
public interface ITokensService
|
||||||
|
{
|
||||||
|
public Task CreateManyAsync(IEnumerable<Token> items);
|
||||||
|
}
|
||||||
|
}
|
25
Retroactiune.WebAPI/Services/TokensService.cs
Normal file
25
Retroactiune.WebAPI/Services/TokensService.cs
Normal file
|
@ -0,0 +1,25 @@
|
||||||
|
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
|
||||||
|
{
|
||||||
|
private readonly IMongoCollection<Token> _collection;
|
||||||
|
|
||||||
|
public TokensService(IMongoClient client, IMongoDbSettings settings)
|
||||||
|
{
|
||||||
|
var database = client.GetDatabase(settings.DatabaseName);
|
||||||
|
_collection = database.GetCollection<Token>(settings.TokensCollectionName);
|
||||||
|
}
|
||||||
|
|
||||||
|
public async Task CreateManyAsync(IEnumerable<Token> items)
|
||||||
|
{
|
||||||
|
throw new System.NotImplementedException();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
|
@ -38,6 +38,7 @@ namespace Retroactiune
|
||||||
|
|
||||||
// Services
|
// Services
|
||||||
services.AddSingleton<IFeedbackReceiverService, FeedbackReceiverService>();
|
services.AddSingleton<IFeedbackReceiverService, FeedbackReceiverService>();
|
||||||
|
services.AddSingleton<ITokensService, TokensService>();
|
||||||
services.AddSingleton<IMongoClient, MongoClient>(i =>
|
services.AddSingleton<IMongoClient, MongoClient>(i =>
|
||||||
{
|
{
|
||||||
var settings = i.GetService<IOptions<RetroactiuneDbSettings>>();
|
var settings = i.GetService<IOptions<RetroactiuneDbSettings>>();
|
||||||
|
|
Loading…
Reference in a new issue