implement character controller methods
This commit is contained in:
@@ -1,4 +1,7 @@
|
||||
using Microsoft.AspNetCore.Mvc;
|
||||
using MongoDB.Bson;
|
||||
using server.Models;
|
||||
using server.Persistence.Repositories;
|
||||
|
||||
namespace server.Controllers.v1
|
||||
{
|
||||
@@ -8,5 +11,77 @@ namespace server.Controllers.v1
|
||||
[Produces("application/json")]
|
||||
public class CharactersController : ControllerBase
|
||||
{
|
||||
private readonly ICharacterRepository _characterRepository;
|
||||
|
||||
public CharactersController(ICharacterRepository characterRepository)
|
||||
{
|
||||
_characterRepository = characterRepository;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Gets a collection of characters.
|
||||
/// </summary>
|
||||
/// <param name="filter">Filter parameters passed from query string.</param>
|
||||
/// <response code="200">Returns the collection of characters requested.</response>
|
||||
/// <response code="400">Not a valid request.</response>
|
||||
/// <response code="500">Failed to get characters.</response>
|
||||
/// <returns>Returns a collection of characters.</returns>
|
||||
[MapToApiVersion("1.0")]
|
||||
[HttpGet]
|
||||
[ProducesResponseType(typeof(List<Character>), StatusCodes.Status200OK)]
|
||||
[ProducesResponseType(typeof(ValidationProblemDetails), StatusCodes.Status400BadRequest)]
|
||||
[ProducesResponseType(typeof(ProblemDetails), StatusCodes.Status500InternalServerError)]
|
||||
public async Task<ActionResult<List<Character>>> GetCharactersAsync([FromQuery] CharacterFilter? filter)
|
||||
{
|
||||
try
|
||||
{
|
||||
var character = await _characterRepository.GetCharactersAsync(filter);
|
||||
return Ok(character);
|
||||
}
|
||||
catch (Exception e)
|
||||
{
|
||||
Console.WriteLine(e);
|
||||
return Problem(detail: "Failed to get characters", statusCode: 500);
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Gets a character by its id.
|
||||
/// </summary>
|
||||
/// <param name="id">The id of the character being requested.</param>
|
||||
/// <response code="200">Returns the character requested.</response>
|
||||
/// <response code="400">Not a valid request.</response>
|
||||
/// <response code="404">Character with the given id not found.</response>
|
||||
/// <response code="500">Failed to get character.</response>
|
||||
/// <returns>Returns a character.</returns>
|
||||
[MapToApiVersion("1.0")]
|
||||
[HttpGet("{id}")]
|
||||
[ProducesResponseType(typeof(Character), StatusCodes.Status200OK)]
|
||||
[ProducesResponseType(typeof(ValidationProblemDetails), StatusCodes.Status400BadRequest)]
|
||||
[ProducesResponseType(typeof(ProblemDetails), StatusCodes.Status404NotFound)]
|
||||
[ProducesResponseType(typeof(ProblemDetails), StatusCodes.Status500InternalServerError)]
|
||||
public async Task<ActionResult<Character>> GetCharacterByIdAsync(string id)
|
||||
{
|
||||
|
||||
if (!ObjectId.TryParse(id, out _))
|
||||
{
|
||||
ModelState.AddModelError(nameof(id), $"{id} is not a valid id");
|
||||
return ValidationProblem();
|
||||
}
|
||||
|
||||
try
|
||||
{
|
||||
var quote = await _characterRepository.GetCharacterByIdAsync(id);
|
||||
|
||||
return quote == null ?
|
||||
Problem(detail: $"Could not find character {id}", statusCode: 404) :
|
||||
Ok(quote);
|
||||
}
|
||||
catch (Exception e)
|
||||
{
|
||||
Console.WriteLine(e);
|
||||
return Problem(detail: "Failed to get character", statusCode: 500);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -0,0 +1,13 @@
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using System.Text;
|
||||
using System.Threading.Tasks;
|
||||
|
||||
namespace server.Models
|
||||
{
|
||||
public class CharacterFilter
|
||||
{
|
||||
// TODO: Build character filter model
|
||||
}
|
||||
}
|
||||
+1
-1
@@ -2,7 +2,7 @@
|
||||
using Microsoft.OpenApi.Models;
|
||||
using Swashbuckle.AspNetCore.SwaggerGen;
|
||||
|
||||
namespace server.Filters
|
||||
namespace server.Options.Filters
|
||||
{
|
||||
public class ApiVersionOperationFilter : IOperationFilter
|
||||
{
|
||||
@@ -1,6 +1,19 @@
|
||||
namespace server.Persistence.Repositories
|
||||
using server.Models;
|
||||
|
||||
namespace server.Persistence.Repositories
|
||||
{
|
||||
public class CharacterRepository : ICharacterRepository
|
||||
{
|
||||
// TODO: Implement getcharactersasync
|
||||
public Task<List<Character>> GetCharactersAsync(CharacterFilter filter)
|
||||
{
|
||||
throw new NotImplementedException();
|
||||
}
|
||||
|
||||
// TODO: Implement getcharacterbyidasync
|
||||
public Task<Character> GetCharacterByIdAsync(string id)
|
||||
{
|
||||
throw new NotImplementedException();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,13 +1,10 @@
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using System.Text;
|
||||
using System.Threading.Tasks;
|
||||
using server.Models;
|
||||
|
||||
namespace server.Persistence.Repositories
|
||||
{
|
||||
public interface ICharacterRepository
|
||||
{
|
||||
|
||||
Task<List<Character>> GetCharactersAsync(CharacterFilter filter);
|
||||
Task<Character> GetCharacterByIdAsync(string id);
|
||||
}
|
||||
}
|
||||
|
||||
+1
-1
@@ -2,13 +2,13 @@ using Microsoft.AspNetCore.Mvc;
|
||||
using Microsoft.AspNetCore.Mvc.ApiExplorer;
|
||||
using Microsoft.AspNetCore.Mvc.Versioning;
|
||||
using Microsoft.Extensions.Options;
|
||||
using server.Filters;
|
||||
using server.Options;
|
||||
using server.Persistence;
|
||||
using server.Persistence.Repositories;
|
||||
using server.Persistence.Seed;
|
||||
using System.Reflection;
|
||||
using AspNetCoreRateLimit;
|
||||
using server.Options.Filters;
|
||||
|
||||
if (args.Length == 2 && args[0].ToLower() == "seed")
|
||||
{
|
||||
|
||||
Reference in New Issue
Block a user