Enemy classes and controllers
This commit is contained in:
58
EstusShots.Server/Controllers/EnemiesController.cs
Normal file
58
EstusShots.Server/Controllers/EnemiesController.cs
Normal file
@@ -0,0 +1,58 @@
|
|||||||
|
using System;
|
||||||
|
using System.Threading.Tasks;
|
||||||
|
using EstusShots.Server.Services;
|
||||||
|
using EstusShots.Shared.Interfaces;
|
||||||
|
using EstusShots.Shared.Models;
|
||||||
|
using EstusShots.Shared.Models.Parameters;
|
||||||
|
using Microsoft.AspNetCore.Mvc;
|
||||||
|
using Microsoft.Extensions.Logging;
|
||||||
|
|
||||||
|
namespace EstusShots.Server.Controllers
|
||||||
|
{
|
||||||
|
[ApiController]
|
||||||
|
[Route("/api/[controller]/[action]")]
|
||||||
|
public class EnemiesController : ControllerBase, IEnemiesController
|
||||||
|
{
|
||||||
|
private readonly EnemiesService _service;
|
||||||
|
private readonly ILogger _logger;
|
||||||
|
|
||||||
|
public EnemiesController(EnemiesService service, ILogger<EnemiesController> logger)
|
||||||
|
{
|
||||||
|
_service = service;
|
||||||
|
_logger = logger;
|
||||||
|
}
|
||||||
|
|
||||||
|
[HttpPost]
|
||||||
|
public async Task<ApiResponse<GetEnemiesResponse>> GetEnemies(GetEnemiesParameter parameter)
|
||||||
|
=> await ServiceCall(() => _service.GetEnemies(parameter));
|
||||||
|
|
||||||
|
[HttpPost]
|
||||||
|
public async Task<ApiResponse<GetEnemyResponse>> GetEnemy(GetEnemyParameter parameter)
|
||||||
|
=> await ServiceCall(() => _service.GetEnemy(parameter));
|
||||||
|
|
||||||
|
[HttpPost]
|
||||||
|
public async Task<ApiResponse<SaveEnemyResponse>> SaveEnemy(SaveEnemyParameter parameter)
|
||||||
|
=> await ServiceCall(() => _service.SaveEnemy(parameter));
|
||||||
|
|
||||||
|
[HttpPost]
|
||||||
|
public async Task<ApiResponse<DeleteEnemyResponse>> DeleteEnemy(DeleteEnemyParameter parameter)
|
||||||
|
=> await ServiceCall(() => _service.DeleteEnemy(parameter));
|
||||||
|
|
||||||
|
private async Task<ApiResponse<T>> ServiceCall<T>(Func<Task<ApiResponse<T>>> serviceCall)
|
||||||
|
where T : class, IApiResponse, new()
|
||||||
|
{
|
||||||
|
try
|
||||||
|
{
|
||||||
|
if (!ModelState.IsValid) _logger.LogError($"Model invalid");
|
||||||
|
_logger.LogInformation(
|
||||||
|
$"Request received from client '{Request.HttpContext.Connection.RemoteIpAddress}'");
|
||||||
|
return await serviceCall();
|
||||||
|
}
|
||||||
|
catch (Exception e)
|
||||||
|
{
|
||||||
|
_logger.LogError(e, "Exception Occured");
|
||||||
|
return new ApiResponse<T>(new OperationResult(e));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -18,6 +18,9 @@ namespace EstusShots.Server.Mapping
|
|||||||
|
|
||||||
CreateMap<Drink, Shared.Dto.Drink>();
|
CreateMap<Drink, Shared.Dto.Drink>();
|
||||||
CreateMap<Shared.Dto.Drink, Drink>();
|
CreateMap<Shared.Dto.Drink, Drink>();
|
||||||
|
|
||||||
|
CreateMap<Enemy, Shared.Dto.Enemy>();
|
||||||
|
CreateMap<Shared.Dto.Enemy, Enemy>();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -1,4 +1,5 @@
|
|||||||
using System;
|
using System;
|
||||||
|
using System.ComponentModel.DataAnnotations;
|
||||||
|
|
||||||
namespace EstusShots.Server.Models
|
namespace EstusShots.Server.Models
|
||||||
{
|
{
|
||||||
@@ -6,7 +7,7 @@ namespace EstusShots.Server.Models
|
|||||||
{
|
{
|
||||||
public Guid DrinkId { get; set; }
|
public Guid DrinkId { get; set; }
|
||||||
|
|
||||||
public string Name { get; set; } = default!;
|
[MaxLength(50)] public string Name { get; set; } = default!;
|
||||||
|
|
||||||
public double Vol { get; set; }
|
public double Vol { get; set; }
|
||||||
}
|
}
|
||||||
|
|||||||
20
EstusShots.Server/Models/Enemy.cs
Normal file
20
EstusShots.Server/Models/Enemy.cs
Normal file
@@ -0,0 +1,20 @@
|
|||||||
|
using System;
|
||||||
|
using System.ComponentModel.DataAnnotations;
|
||||||
|
|
||||||
|
namespace EstusShots.Server.Models
|
||||||
|
{
|
||||||
|
public class Enemy
|
||||||
|
{
|
||||||
|
public Guid EnemyId { get; set; }
|
||||||
|
|
||||||
|
[MaxLength(50)] public string Name { get; set; } = default!;
|
||||||
|
|
||||||
|
public bool Boss { get; set; }
|
||||||
|
|
||||||
|
public bool Defeated { get; set; }
|
||||||
|
|
||||||
|
public Guid? SeasonId { get; set; }
|
||||||
|
|
||||||
|
public Season? Season { get; set; }
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -19,5 +19,7 @@ namespace EstusShots.Server.Models
|
|||||||
public DateTime? End { get; set; }
|
public DateTime? End { get; set; }
|
||||||
|
|
||||||
public List<Episode> Episodes { get; set; } = default!;
|
public List<Episode> Episodes { get; set; } = default!;
|
||||||
|
|
||||||
|
public List<Enemy> Enemies { get; set; } = default!;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
43
EstusShots.Server/Services/EnemiesService.cs
Normal file
43
EstusShots.Server/Services/EnemiesService.cs
Normal file
@@ -0,0 +1,43 @@
|
|||||||
|
using System.Threading.Tasks;
|
||||||
|
using AutoMapper;
|
||||||
|
using EstusShots.Shared.Interfaces;
|
||||||
|
using EstusShots.Shared.Models;
|
||||||
|
using EstusShots.Shared.Models.Parameters;
|
||||||
|
using Microsoft.Extensions.Logging;
|
||||||
|
|
||||||
|
namespace EstusShots.Server.Services
|
||||||
|
{
|
||||||
|
public class EnemiesService : IEnemiesController
|
||||||
|
{
|
||||||
|
private readonly ILogger _logger;
|
||||||
|
private readonly IMapper _mapper;
|
||||||
|
private readonly EstusShotsContext _context;
|
||||||
|
|
||||||
|
public EnemiesService(ILogger<EnemiesService> logger, IMapper mapper, EstusShotsContext context)
|
||||||
|
{
|
||||||
|
_logger = logger;
|
||||||
|
_mapper = mapper;
|
||||||
|
_context = context;
|
||||||
|
}
|
||||||
|
|
||||||
|
public Task<ApiResponse<GetEnemiesResponse>> GetEnemies(GetEnemiesParameter parameter)
|
||||||
|
{
|
||||||
|
throw new System.NotImplementedException();
|
||||||
|
}
|
||||||
|
|
||||||
|
public Task<ApiResponse<GetEnemyResponse>> GetEnemy(GetEnemyParameter parameter)
|
||||||
|
{
|
||||||
|
throw new System.NotImplementedException();
|
||||||
|
}
|
||||||
|
|
||||||
|
public Task<ApiResponse<SaveEnemyResponse>> SaveEnemy(SaveEnemyParameter parameter)
|
||||||
|
{
|
||||||
|
throw new System.NotImplementedException();
|
||||||
|
}
|
||||||
|
|
||||||
|
public Task<ApiResponse<DeleteEnemyResponse>> DeleteEnemy(DeleteEnemyParameter parameter)
|
||||||
|
{
|
||||||
|
throw new System.NotImplementedException();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -49,6 +49,7 @@ namespace EstusShots.Server
|
|||||||
services.AddScoped<EpisodesService>();
|
services.AddScoped<EpisodesService>();
|
||||||
services.AddScoped<PlayersService>();
|
services.AddScoped<PlayersService>();
|
||||||
services.AddScoped<DrinksService>();
|
services.AddScoped<DrinksService>();
|
||||||
|
services.AddScoped<EnemiesService>();
|
||||||
}
|
}
|
||||||
|
|
||||||
// This method gets called by the runtime. Use this method to configure the HTTP request pipeline.
|
// This method gets called by the runtime. Use this method to configure the HTTP request pipeline.
|
||||||
|
|||||||
20
EstusShots.Shared/Dto/Enemy.cs
Normal file
20
EstusShots.Shared/Dto/Enemy.cs
Normal file
@@ -0,0 +1,20 @@
|
|||||||
|
using System;
|
||||||
|
using System.ComponentModel.DataAnnotations;
|
||||||
|
|
||||||
|
namespace EstusShots.Shared.Dto
|
||||||
|
{
|
||||||
|
public class Enemy
|
||||||
|
{
|
||||||
|
public Guid EnemyId { get; set; }
|
||||||
|
|
||||||
|
public string Name { get; set; }
|
||||||
|
|
||||||
|
public bool Boss { get; set; }
|
||||||
|
|
||||||
|
public bool Defeated { get; set; }
|
||||||
|
|
||||||
|
public Guid? SeasonId { get; set; }
|
||||||
|
|
||||||
|
public Season Season { get; set; }
|
||||||
|
}
|
||||||
|
}
|
||||||
40
EstusShots.Shared/Interfaces/IEnemiesController.cs
Normal file
40
EstusShots.Shared/Interfaces/IEnemiesController.cs
Normal file
@@ -0,0 +1,40 @@
|
|||||||
|
using System.Threading.Tasks;
|
||||||
|
using EstusShots.Shared.Models;
|
||||||
|
using EstusShots.Shared.Models.Parameters;
|
||||||
|
|
||||||
|
namespace EstusShots.Shared.Interfaces
|
||||||
|
{
|
||||||
|
/// <summary>
|
||||||
|
/// Load and manipulate Enemy objects
|
||||||
|
/// </summary>
|
||||||
|
public interface IEnemiesController
|
||||||
|
{
|
||||||
|
/// <summary>
|
||||||
|
/// Load all enemies or enemies for a specific season
|
||||||
|
/// </summary>
|
||||||
|
/// <param name="parameter">An <see cref="GetEnemiesParameter"/> instance</param>
|
||||||
|
/// <returns>An ApiResponse instance of type <see cref="GetEnemiesResponse"/></returns>
|
||||||
|
Task<ApiResponse<GetEnemiesResponse>> GetEnemies(GetEnemiesParameter parameter);
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Load detailed information on a single enemy
|
||||||
|
/// </summary>
|
||||||
|
/// <param name="parameter">An <see cref="GetEnemyParameter"/> instance</param>
|
||||||
|
/// <returns>An ApiResponse instance of type <see cref="GetEnemyResponse"/></returns>
|
||||||
|
Task<ApiResponse<GetEnemyResponse>> GetEnemy(GetEnemyParameter parameter);
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Creates or updates an enemy object
|
||||||
|
/// </summary>
|
||||||
|
/// <param name="parameter">An <see cref="SaveEnemyParameter"/> instance</param>
|
||||||
|
/// <returns>An ApiResponse instance of type <see cref="SaveEnemyResponse"/></returns>
|
||||||
|
Task<ApiResponse<SaveEnemyResponse>> SaveEnemy(SaveEnemyParameter parameter);
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Deletes an enemy object
|
||||||
|
/// </summary>
|
||||||
|
/// <param name="parameter">An <see cref="DeleteEnemyParameter"/> instance</param>
|
||||||
|
/// <returns>An ApiResponse instance of type <see cref="DeleteEnemyResponse"/></returns>
|
||||||
|
Task<ApiResponse<DeleteEnemyResponse>> DeleteEnemy(DeleteEnemyParameter parameter);
|
||||||
|
}
|
||||||
|
}
|
||||||
174
EstusShots.Shared/Models/Parameters/EnemyParameters.cs
Normal file
174
EstusShots.Shared/Models/Parameters/EnemyParameters.cs
Normal file
@@ -0,0 +1,174 @@
|
|||||||
|
using System;
|
||||||
|
using System.Collections.Generic;
|
||||||
|
using EstusShots.Shared.Dto;
|
||||||
|
using EstusShots.Shared.Interfaces;
|
||||||
|
|
||||||
|
namespace EstusShots.Shared.Models.Parameters
|
||||||
|
{
|
||||||
|
# region GetEnemies
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Parameter class for the GetEnemies API controller.
|
||||||
|
/// </summary>
|
||||||
|
public class GetEnemiesParameter : IApiParameter
|
||||||
|
{
|
||||||
|
/// <summary>
|
||||||
|
/// (Optional) Load enemies for this season
|
||||||
|
/// </summary>
|
||||||
|
public Guid SeasonId { get; set; }
|
||||||
|
|
||||||
|
public GetEnemiesParameter(Guid seasonId)
|
||||||
|
{
|
||||||
|
SeasonId = seasonId;
|
||||||
|
}
|
||||||
|
|
||||||
|
public GetEnemiesParameter()
|
||||||
|
{
|
||||||
|
SeasonId = Guid.Empty;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Parameter class returned from the GetEnemies API controller.
|
||||||
|
/// </summary>
|
||||||
|
public class GetEnemiesResponse : IApiResponse
|
||||||
|
{
|
||||||
|
/// <summary>
|
||||||
|
/// The loaded enemies
|
||||||
|
/// </summary>
|
||||||
|
public List<Enemy> Enemies { get; set; }
|
||||||
|
|
||||||
|
public GetEnemiesResponse(List<Enemy> enemies)
|
||||||
|
{
|
||||||
|
Enemies = enemies;
|
||||||
|
}
|
||||||
|
|
||||||
|
public GetEnemiesResponse()
|
||||||
|
{
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
# endregion
|
||||||
|
|
||||||
|
# region GetEnemy
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Parameter class for the GetEnemy API controller.
|
||||||
|
/// </summary>
|
||||||
|
public class GetEnemyParameter : IApiParameter
|
||||||
|
{
|
||||||
|
/// <summary>
|
||||||
|
/// ID of the enemy to load
|
||||||
|
/// </summary>
|
||||||
|
public Guid EnemyId { get; set; }
|
||||||
|
|
||||||
|
public GetEnemyParameter(Guid enemyId)
|
||||||
|
{
|
||||||
|
EnemyId = enemyId;
|
||||||
|
}
|
||||||
|
|
||||||
|
public GetEnemyParameter()
|
||||||
|
{
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Parameter class returned from the GetEnemy API controller.
|
||||||
|
/// </summary>
|
||||||
|
public class GetEnemyResponse : IApiResponse
|
||||||
|
{
|
||||||
|
/// <summary>
|
||||||
|
/// A detailed Enemy object
|
||||||
|
/// </summary>
|
||||||
|
public Enemy Enemy { get; set; }
|
||||||
|
|
||||||
|
public GetEnemyResponse(Enemy enemy)
|
||||||
|
{
|
||||||
|
Enemy = enemy;
|
||||||
|
}
|
||||||
|
|
||||||
|
public GetEnemyResponse()
|
||||||
|
{
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
# endregion
|
||||||
|
|
||||||
|
# region SaveEnemy
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Parameter class for the SaveEnemy API controller.
|
||||||
|
/// </summary>
|
||||||
|
public class SaveEnemyParameter : IApiParameter
|
||||||
|
{
|
||||||
|
/// <summary>
|
||||||
|
/// The enemy object to create or update
|
||||||
|
/// </summary>
|
||||||
|
public Enemy Enemy { get; set; }
|
||||||
|
|
||||||
|
public SaveEnemyParameter(Enemy enemy)
|
||||||
|
{
|
||||||
|
Enemy = enemy;
|
||||||
|
}
|
||||||
|
|
||||||
|
public SaveEnemyParameter()
|
||||||
|
{
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Parameter class returned from the SaveEnemy API controller.
|
||||||
|
/// </summary>
|
||||||
|
public class SaveEnemyResponse : IApiResponse
|
||||||
|
{
|
||||||
|
/// <summary>
|
||||||
|
/// ID of the created or updated enemy object
|
||||||
|
/// </summary>
|
||||||
|
public Guid EnemyId { get; set; }
|
||||||
|
|
||||||
|
public SaveEnemyResponse(Guid enemyId)
|
||||||
|
{
|
||||||
|
EnemyId = enemyId;
|
||||||
|
}
|
||||||
|
|
||||||
|
public SaveEnemyResponse()
|
||||||
|
{
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
# endregion
|
||||||
|
|
||||||
|
# region DeleteEnemy
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Parameter class for the DeleteEnemy API controller.
|
||||||
|
/// </summary>
|
||||||
|
public class DeleteEnemyParameter : IApiParameter
|
||||||
|
{
|
||||||
|
/// <summary>
|
||||||
|
/// ID of the enemy to delete
|
||||||
|
/// </summary>
|
||||||
|
public Guid EnemyId { get; set; }
|
||||||
|
|
||||||
|
public DeleteEnemyParameter(Guid enemyId)
|
||||||
|
{
|
||||||
|
EnemyId = enemyId;
|
||||||
|
}
|
||||||
|
|
||||||
|
public DeleteEnemyParameter()
|
||||||
|
{
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Parameter class returned from the DeleteEnemy API controller.
|
||||||
|
/// </summary>
|
||||||
|
public class DeleteEnemyResponse : IApiResponse
|
||||||
|
{
|
||||||
|
public DeleteEnemyResponse()
|
||||||
|
{
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
# endregion
|
||||||
|
}
|
||||||
Reference in New Issue
Block a user