Player models and interfaces
This commit is contained in:
@@ -1,4 +1,6 @@
|
|||||||
using System;
|
using System;
|
||||||
|
using System.Collections;
|
||||||
|
using System.Collections.Generic;
|
||||||
using System.ComponentModel.DataAnnotations;
|
using System.ComponentModel.DataAnnotations;
|
||||||
|
|
||||||
namespace EstusShots.Server.Models
|
namespace EstusShots.Server.Models
|
||||||
@@ -20,5 +22,7 @@ namespace EstusShots.Server.Models
|
|||||||
public Guid SeasonId { get; set; }
|
public Guid SeasonId { get; set; }
|
||||||
|
|
||||||
public Season Season { get; set; } = default!;
|
public Season Season { get; set; } = default!;
|
||||||
|
|
||||||
|
public ICollection<EpisodePlayers> EpisodePlayers { get; set; } = default!;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
13
EstusShots.Server/Models/EpisodePlayers.cs
Normal file
13
EstusShots.Server/Models/EpisodePlayers.cs
Normal file
@@ -0,0 +1,13 @@
|
|||||||
|
using System;
|
||||||
|
|
||||||
|
namespace EstusShots.Server.Models
|
||||||
|
{
|
||||||
|
public class EpisodePlayers
|
||||||
|
{
|
||||||
|
public Guid EpisodeId { get; set; } = default!;
|
||||||
|
public Episode Episode { get; set; } = default!;
|
||||||
|
|
||||||
|
public Guid PlayerId { get; set; } = default!;
|
||||||
|
public Player Player { get; set; } = default!;
|
||||||
|
}
|
||||||
|
}
|
||||||
23
EstusShots.Server/Models/Player.cs
Normal file
23
EstusShots.Server/Models/Player.cs
Normal file
@@ -0,0 +1,23 @@
|
|||||||
|
using System;
|
||||||
|
using System.Collections.Generic;
|
||||||
|
using System.ComponentModel.DataAnnotations;
|
||||||
|
|
||||||
|
namespace EstusShots.Server.Models
|
||||||
|
{
|
||||||
|
public class Player
|
||||||
|
{
|
||||||
|
public Guid PlayerId { get; set; }
|
||||||
|
|
||||||
|
[MaxLength(4)] public string? HexId { get; set; }
|
||||||
|
|
||||||
|
[MaxLength(30)] public string Name { get; set; } = default!;
|
||||||
|
|
||||||
|
[MaxLength(30)] public string Alias { get; set; } = default!;
|
||||||
|
|
||||||
|
public bool Anonymous { get; set; }
|
||||||
|
|
||||||
|
public string DisplayName => Anonymous ? Alias : Name;
|
||||||
|
|
||||||
|
public ICollection<EpisodePlayers> EpisodePlayers { get; set; } = default!;
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -12,11 +12,25 @@ namespace EstusShots.Server.Services
|
|||||||
|
|
||||||
public DbSet<Season> Seasons { get; set; } = default!;
|
public DbSet<Season> Seasons { get; set; } = default!;
|
||||||
public DbSet<Episode> Episodes { get; set; } = default!;
|
public DbSet<Episode> Episodes { get; set; } = default!;
|
||||||
|
public DbSet<Player> Players { get; set; } = default!;
|
||||||
|
|
||||||
protected override void OnModelCreating(ModelBuilder modelBuilder)
|
protected override void OnModelCreating(ModelBuilder modelBuilder)
|
||||||
{
|
{
|
||||||
modelBuilder.Entity<Season>().ToTable(nameof(Season));
|
modelBuilder.Entity<Season>().ToTable(nameof(Season));
|
||||||
modelBuilder.Entity<Episode>().ToTable(nameof(Episode));
|
modelBuilder.Entity<Episode>().ToTable(nameof(Episode));
|
||||||
|
|
||||||
|
modelBuilder.Entity<EpisodePlayers>()
|
||||||
|
.HasKey(t => new {t.EpisodeId, t.PlayerId});
|
||||||
|
|
||||||
|
modelBuilder.Entity<EpisodePlayers>()
|
||||||
|
.HasOne(pt => pt.Episode)
|
||||||
|
.WithMany(p => p.EpisodePlayers)
|
||||||
|
.HasForeignKey(pt => pt.EpisodeId);
|
||||||
|
|
||||||
|
modelBuilder.Entity<EpisodePlayers>()
|
||||||
|
.HasOne(pt => pt.Player)
|
||||||
|
.WithMany(t => t.EpisodePlayers)
|
||||||
|
.HasForeignKey(pt => pt.PlayerId);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
19
EstusShots.Shared/Dto/Player.cs
Normal file
19
EstusShots.Shared/Dto/Player.cs
Normal file
@@ -0,0 +1,19 @@
|
|||||||
|
using System;
|
||||||
|
|
||||||
|
namespace EstusShots.Shared.Dto
|
||||||
|
{
|
||||||
|
public class Player
|
||||||
|
{
|
||||||
|
public Guid PlayerId { get; set; }
|
||||||
|
|
||||||
|
public string HexId { get; set; }
|
||||||
|
|
||||||
|
public string Name { get; set; }
|
||||||
|
|
||||||
|
public string Alias { get; set; }
|
||||||
|
|
||||||
|
public bool Anonymous { get; set; }
|
||||||
|
|
||||||
|
public string DisplayName => Anonymous ? Alias : Name;
|
||||||
|
}
|
||||||
|
}
|
||||||
40
EstusShots.Shared/Interfaces/IPlayersController.cs
Normal file
40
EstusShots.Shared/Interfaces/IPlayersController.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 player objects
|
||||||
|
/// </summary>
|
||||||
|
public interface IPlayersController
|
||||||
|
{
|
||||||
|
/// <summary>
|
||||||
|
/// Loads a list of all players in the database
|
||||||
|
/// </summary>
|
||||||
|
/// <param name="parameter">An <see cref="GetPlayersParameter"/> instance</param>
|
||||||
|
/// <returns>An ApiResponse instance of type <see cref="GetPlayersResponse"/></returns>
|
||||||
|
Task<ApiResponse<GetPlayersResponse>> GetPlayers(GetPlayersParameter parameter);
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Loads detailed information on a single player
|
||||||
|
/// </summary>
|
||||||
|
/// <param name="parameter">An <see cref="GetPlayerDetailsParameter"/> instance</param>
|
||||||
|
/// <returns>An ApiResponse instance of type <see cref="GetPlayerDetailsResponse"/></returns>
|
||||||
|
Task<ApiResponse<GetPlayerDetailsResponse>> GetPlayerDetails(GetPlayerDetailsParameter parameter);
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Creates or updates a player object
|
||||||
|
/// </summary>
|
||||||
|
/// <param name="parameter">An <see cref="SavePlayerParameter"/> instance</param>
|
||||||
|
/// <returns>An ApiResponse instance of type <see cref="SavePlayerResponse"/></returns>
|
||||||
|
Task<ApiResponse<SavePlayerResponse>> SavePlayer(SavePlayerParameter parameter);
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Deletes a player
|
||||||
|
/// </summary>
|
||||||
|
/// <param name="parameter">An <see cref="DeletePlayerParameter"/> instance</param>
|
||||||
|
/// <returns>An ApiResponse instance of type <see cref="DeletePlayerResponse"/></returns>
|
||||||
|
Task<ApiResponse<DeletePlayerResponse>> DeletePlayers(DeletePlayerParameter parameter);
|
||||||
|
}
|
||||||
|
}
|
||||||
163
EstusShots.Shared/Models/Parameters/PlayerParameters.cs
Normal file
163
EstusShots.Shared/Models/Parameters/PlayerParameters.cs
Normal file
@@ -0,0 +1,163 @@
|
|||||||
|
using System;
|
||||||
|
using System.Collections.Generic;
|
||||||
|
using EstusShots.Shared.Dto;
|
||||||
|
using EstusShots.Shared.Interfaces;
|
||||||
|
|
||||||
|
namespace EstusShots.Shared.Models.Parameters
|
||||||
|
{
|
||||||
|
# region GetPlayers
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Parameter class for the GetPlayers API controller.
|
||||||
|
/// </summary>
|
||||||
|
public class GetPlayersParameter : IApiParameter
|
||||||
|
{
|
||||||
|
public GetPlayersParameter()
|
||||||
|
{
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Parameter class returned from the GetPlayers API controller.
|
||||||
|
/// </summary>
|
||||||
|
public class GetPlayersResponse : IApiResponse
|
||||||
|
{
|
||||||
|
/// <summary>
|
||||||
|
/// All players in the database
|
||||||
|
/// </summary>
|
||||||
|
public List<Player> Players { get; set; }
|
||||||
|
|
||||||
|
public GetPlayersResponse(List<Player> players)
|
||||||
|
{
|
||||||
|
Players = players;
|
||||||
|
}
|
||||||
|
|
||||||
|
public GetPlayersResponse()
|
||||||
|
{
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
# endregion
|
||||||
|
|
||||||
|
# region GetPlayerDetails
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Parameter class for the GetPlayerDetails API controller.
|
||||||
|
/// </summary>
|
||||||
|
public class GetPlayerDetailsParameter : IApiParameter
|
||||||
|
{
|
||||||
|
/// <summary>
|
||||||
|
/// ID of the player that should be loaded
|
||||||
|
/// </summary>
|
||||||
|
public Guid PlayerId { get; set; }
|
||||||
|
|
||||||
|
public GetPlayerDetailsParameter(Guid playerId)
|
||||||
|
{
|
||||||
|
PlayerId = playerId;
|
||||||
|
}
|
||||||
|
|
||||||
|
public GetPlayerDetailsParameter()
|
||||||
|
{
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Parameter class returned from the GetPlayerDetails API controller.
|
||||||
|
/// </summary>
|
||||||
|
public class GetPlayerDetailsResponse : IApiResponse
|
||||||
|
{
|
||||||
|
/// <summary>
|
||||||
|
/// The loaded player
|
||||||
|
/// </summary>
|
||||||
|
public Player Player { get; set; }
|
||||||
|
|
||||||
|
public GetPlayerDetailsResponse(Player player)
|
||||||
|
{
|
||||||
|
Player = player;
|
||||||
|
}
|
||||||
|
|
||||||
|
public GetPlayerDetailsResponse()
|
||||||
|
{
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
# endregion
|
||||||
|
|
||||||
|
# region SavePlayer
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Parameter class for the SavePlayer API controller.
|
||||||
|
/// </summary>
|
||||||
|
public class SavePlayerParameter : IApiParameter
|
||||||
|
{
|
||||||
|
/// <summary>
|
||||||
|
/// The player to save
|
||||||
|
/// </summary>
|
||||||
|
public Player Player { get; set; }
|
||||||
|
|
||||||
|
public SavePlayerParameter(Player player)
|
||||||
|
{
|
||||||
|
Player = player;
|
||||||
|
}
|
||||||
|
|
||||||
|
public SavePlayerParameter()
|
||||||
|
{
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Parameter class returned from the SavePlayer API controller.
|
||||||
|
/// </summary>
|
||||||
|
public class SavePlayerResponse : IApiResponse
|
||||||
|
{
|
||||||
|
/// <summary>
|
||||||
|
/// ID of the newly created or updated player
|
||||||
|
/// </summary>
|
||||||
|
public Guid PlayerId { get; set; }
|
||||||
|
|
||||||
|
public SavePlayerResponse(Guid playerId)
|
||||||
|
{
|
||||||
|
PlayerId = playerId;
|
||||||
|
}
|
||||||
|
|
||||||
|
public SavePlayerResponse()
|
||||||
|
{
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
# endregion
|
||||||
|
|
||||||
|
# region DeletePlayer
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Parameter class for the DeletePlayer API controller.
|
||||||
|
/// </summary>
|
||||||
|
public class DeletePlayerParameter : IApiParameter
|
||||||
|
{
|
||||||
|
/// <summary>
|
||||||
|
/// ID of the player that should be deleted
|
||||||
|
/// </summary>
|
||||||
|
public Guid PlayerId { get; set; }
|
||||||
|
|
||||||
|
public DeletePlayerParameter(Guid playerId)
|
||||||
|
{
|
||||||
|
PlayerId = playerId;
|
||||||
|
}
|
||||||
|
|
||||||
|
public DeletePlayerParameter()
|
||||||
|
{
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Parameter class returned from the DeletePlayer API controller.
|
||||||
|
/// </summary>
|
||||||
|
public class DeletePlayerResponse : IApiResponse
|
||||||
|
{
|
||||||
|
public DeletePlayerResponse()
|
||||||
|
{
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
# endregion
|
||||||
|
}
|
||||||
Reference in New Issue
Block a user