using System; using System.Collections.Generic; using System.Threading.Tasks; using Microsoft.AspNetCore.Mvc; using WHDataMgmt.Backend.Models; namespace WHDataMgmt.Backend.Controllers { [ApiController] [Route("api/league/{leagueId}/season/{seasonId}/[controller]")] public class MatchController : ControllerBase { private readonly IWisehockeyBackendCommunicator _backendCommunicator; public MatchController(IWisehockeyBackendCommunicator backendCommunicator) { _backendCommunicator = backendCommunicator; } [HttpGet] [ProducesResponseType(typeof(IEnumerable), 200)] public async Task>> GetMatches(Guid seasonId) { return Ok(await _backendCommunicator.GetMatches(seasonId)); } [HttpPost] [ProducesResponseType(typeof(IEnumerable), 200)] public async Task>> CreateMatches([FromBody] IEnumerable matches, Guid seasonId) { var success = await _backendCommunicator.AddMatches(matches); if (Equals(success, matches)) return Ok(); return new StatusCodeResult(500); } } } ########################### public Task> AddMatches(IEnumerable matches) { foreach (var match in matches) { match.Id = Guid.NewGuid(); _matches.Add(match); } return Task.FromResult(matches); } ########################### using System; using System.ComponentModel.DataAnnotations; using System.Runtime.InteropServices; namespace WHDataMgmt.Backend.Models { public enum MatchStatus { Upcoming, InProgress, Finished } public enum PlayoffPhase { FirstRound, QuarterFinals, SemiFinals, BronzeMatch, Final } public class Match { public Match(Guid id, Guid seasonId, DateTimeOffset startTime, DateTimeOffset endTime, long homeTeam, long awayTeam, MatchStatus status, int goalHome, int goalAway, long rinkId, PlayoffPhase playoffPhase, int playoffPair) { Id = id; SeasonId = seasonId; StartTime = startTime; EndTime = endTime; HomeTeam = homeTeam; AwayTeam = awayTeam; Status = status; GoalHome = goalHome; GoalAway = goalAway; RinkId = rinkId; PlayoffPhase = playoffPhase; PlayoffPair = playoffPair; } public Guid Id { get; set; } [Required] public Guid SeasonId { get; } [Required] public DateTimeOffset StartTime { get; } [Required] public DateTimeOffset EndTime { get; } [Required] public long HomeTeam { get; } [Required] public long AwayTeam { get; } [Required] public MatchStatus Status { get; } [Required] public int GoalHome { get; } [Required] public int GoalAway { get; } [Required] public long RinkId { get; } [Required] public PlayoffPhase PlayoffPhase { get; } [Required] public int PlayoffPair { get; } } }