diff --git a/BoardGamesNook.Services/GameResultService.cs b/BoardGamesNook.Services/GameResultService.cs index edd68b1..9b85568 100644 --- a/BoardGamesNook.Services/GameResultService.cs +++ b/BoardGamesNook.Services/GameResultService.cs @@ -11,16 +11,18 @@ namespace BoardGamesNook.Services { public class GameResultService : IGameResultService { + private readonly IBoardGameRepository _boardGameRepository; private readonly IGameResultRepository _gameResultRepository; private readonly IGamerRepository _gamerRepository; private readonly IGameTableRepository _gameTableRepository; public GameResultService(IGameResultRepository gameResultRepository, IGamerRepository gamerRepository, - IGameTableRepository gameTableRepository) + IGameTableRepository gameTableRepository, IBoardGameRepository boardGameRepository) { _gameResultRepository = gameResultRepository; _gamerRepository = gamerRepository; _gameTableRepository = gameTableRepository; + _boardGameRepository = boardGameRepository; } public IEnumerable GetAllGameResults() @@ -40,13 +42,22 @@ public IEnumerable GetAllByGamerNickname(string nickname) return MapGameResultListToGameResultDtoList(gameResultList); } - public void AddGameResult(GameResult gameResult) + public void AddGameResult(GameResultDto gameResultDto, Gamer gamer) { + var gameResult = MapGameResultDtoToGameResultWithReferences(gameResultDto, gamer); _gameResultRepository.Add(gameResult); } - public void AddGameResults(List gameResults) + public void AddGameResults(List gameResultDtoList, Gamer gamer) { + var gameResults = new List(); + foreach (var gameResultDto in gameResultDtoList) + { + var gameResult = MapGameResultDtoToGameResultWithReferences(gameResultDto, gamer); + gameResult.CreatedGamerId = gamer.Id; + gameResults.Add(gameResult); + } + _gameResultRepository.AddMany(gameResults); } @@ -74,6 +85,21 @@ public GameResultDto GetGameResult(int id) return gameResultDto; } + private GameResult MapGameResultDtoToGameResultWithReferences(GameResultDto gameResultDto, Gamer gamer) + { + GameTable gameTable = null; + if (gameResultDto.GameTableId.HasValue) + gameTable = _gameTableRepository.Get(gameResultDto.GameTableId.Value); + + var boardGame = _boardGameRepository.Get(gameResultDto.BoardGameId); + + var gameResult = Mapper.Map(gameResultDto); + Mapper.Map(gamer, gameResult); + Mapper.Map(gameTable, gameResult); + Mapper.Map(boardGame, gameResult); + return gameResult; + } + private IEnumerable MapGameResultListToGameResultDtoList(List gameResultList) { var gameResultDtoList = diff --git a/BoardGamesNook.Services/Interfaces/IGameResultService.cs b/BoardGamesNook.Services/Interfaces/IGameResultService.cs index a442576..d719710 100644 --- a/BoardGamesNook.Services/Interfaces/IGameResultService.cs +++ b/BoardGamesNook.Services/Interfaces/IGameResultService.cs @@ -14,9 +14,9 @@ public interface IGameResultService IEnumerable GetAllByGamerNickname(string nickname); - void AddGameResult(GameResult gameResult); + void AddGameResult(GameResultDto gameResult, Gamer gamer); - void AddGameResults(List gameResults); + void AddGameResults(List gameResults, Gamer gamer); void EditGameResult(GameResult gameResult); diff --git a/BoardGamesNook.Services/MapperProfiles/GameResultDtoProfile.cs b/BoardGamesNook.Services/MapperProfiles/GameResultDtoProfile.cs index c9cb784..9a0ca49 100644 --- a/BoardGamesNook.Services/MapperProfiles/GameResultDtoProfile.cs +++ b/BoardGamesNook.Services/MapperProfiles/GameResultDtoProfile.cs @@ -12,9 +12,24 @@ public GameResultDtoProfile() .ForMember(dest => dest.GamerId, opt => opt.MapFrom(src => src.Gamer.Id)) .ForMember(dest => dest.GamerNickname, opt => opt.MapFrom(src => src.Gamer.Nickname)); + CreateMap() + .ForPath(dest => dest.Id, opt => opt.MapFrom(src => src.Id)) + .ForPath(dest => dest.Gamer.Id, opt => opt.MapFrom(src => src.GamerId)) + .ForPath(dest => dest.Gamer.Nickname, opt => opt.MapFrom(src => src.GamerNickname)); + CreateMap() .ForMember(dest => dest.GamerId, opt => opt.MapFrom(src => src.Id)) .ForMember(dest => dest.GamerNickname, opt => opt.MapFrom(src => src.Nickname)); + + CreateMap() + .ForMember(dest => dest.GamerId, opt => opt.MapFrom(src => src.Id)) + .ForMember(dest => dest.Gamer, opt => opt.MapFrom(src => src)); + + CreateMap() + .ForMember(dest => dest.GameTable, opt => opt.MapFrom(src => src)); + + CreateMap() + .ForMember(dest => dest.BoardGame, opt => opt.MapFrom(src => src)); } } } \ No newline at end of file diff --git a/BoardGamesNook.Tests/GameResultTest.cs b/BoardGamesNook.Tests/GameResultTest.cs index f021fc1..353159b 100644 --- a/BoardGamesNook.Tests/GameResultTest.cs +++ b/BoardGamesNook.Tests/GameResultTest.cs @@ -5,6 +5,7 @@ using BoardGamesNook.Model; using BoardGamesNook.Repository.Interfaces; using BoardGamesNook.Services; +using BoardGamesNook.Services.Models; using Microsoft.VisualStudio.TestTools.UnitTesting; using Moq; @@ -13,6 +14,36 @@ namespace BoardGamesNook.Tests [TestClass] public class GameResultTest { + private static readonly Guid _testGuid1 = Guid.NewGuid(); + private static readonly Guid _testGuid2 = Guid.NewGuid(); + + private static readonly Gamer _testGamer1 = new Gamer + { + Id = _testGuid1 + }; + + private static readonly Gamer _testGamer2 = new Gamer + { + Id = _testGuid2 + }; + + private static readonly GameTable _testGameTable1 = new GameTable + { + Id = 1 + }; + + private static readonly GameTable _testGameTable2 = new GameTable + { + Id = 2 + }; + + private static readonly BoardGame _testBoardGame = new BoardGame + { + Id = 1 + }; + + private readonly Mock _boardGameRepositoryMock; + private readonly Mock _gameResultRepositoryMock; private readonly Mock _gamerRepositoryMock; private readonly Mock _gameTableRepositoryMock; @@ -21,9 +52,67 @@ public class GameResultTest { Id = 1, GameTableId = 1, - GameTable = new GameTable(), - GamerId = Guid.NewGuid(), - Gamer = new Gamer() + GameTable = _testGameTable1, + GamerId = _testGuid1, + Gamer = _testGamer1, + BoardGameId = 1, + BoardGame = _testBoardGame + }; + + private readonly GameResultDto _testGameResultDto = new GameResultDto + { + Id = 1, + GameTableId = 1, + GamerId = _testGuid1.ToString(), + CreatedGamerId = _testGamer1.Id.ToString(), + CreatedGamerNickname = _testGamer1.Nickname, + BoardGameId = 1 + }; + + private readonly List _testGameResultDtoList = new List + { + new GameResultDto + { + Id = 1, + GameTableId = 1, + GamerId = _testGuid1.ToString(), + CreatedGamerId = _testGamer1.Id.ToString(), + CreatedGamerNickname = _testGamer1.Nickname, + BoardGameId = 1 + }, + new GameResultDto + { + Id = 2, + GameTableId = 2, + GamerId = _testGuid2.ToString(), + CreatedGamerId = _testGamer1.Id.ToString(), + CreatedGamerNickname = _testGamer1.Nickname, + BoardGameId = 1 + } + }; + + private readonly List _testGameResultList = new List + { + new GameResult + { + Id = 1, + GameTableId = 1, + GameTable = _testGameTable1, + GamerId = _testGuid1, + Gamer = _testGamer1, + BoardGameId = 1, + BoardGame = _testBoardGame + }, + new GameResult + { + Id = 2, + GameTableId = 2, + GameTable = _testGameTable1, + GamerId = _testGuid2, + Gamer = _testGamer2, + BoardGameId = 1, + BoardGame = _testBoardGame + } }; public GameResultTest() @@ -31,6 +120,7 @@ public GameResultTest() _gameResultRepositoryMock = new Mock(); _gamerRepositoryMock = new Mock(); _gameTableRepositoryMock = new Mock(); + _boardGameRepositoryMock = new Mock(); } [TestMethod] @@ -39,7 +129,7 @@ public void GetGameResultList() //Arrange _gameResultRepositoryMock.Setup(x => x.GetAll()).Returns(new List {new GameResult()}); var gameResultService = new GameResultService(_gameResultRepositoryMock.Object, _gamerRepositoryMock.Object, - _gameTableRepositoryMock.Object); + _gameTableRepositoryMock.Object, _boardGameRepositoryMock.Object); Mapper.Reset(); Mapper.Initialize(cfg => { cfg.AddServicesProfiles(); }); //Act @@ -54,12 +144,61 @@ public void AddGameResultToGameResultsList() { //Arrange _gameResultRepositoryMock.Setup(mock => mock.Add(It.IsAny())); + _gameTableRepositoryMock.Setup(mock => mock.Get(It.IsAny())).Returns(_testGameTable1); + _boardGameRepositoryMock.Setup(mock => mock.Get(It.IsAny())).Returns(_testBoardGame); var gameResultService = new GameResultService(_gameResultRepositoryMock.Object, _gamerRepositoryMock.Object, - _gameTableRepositoryMock.Object); + _gameTableRepositoryMock.Object, + _boardGameRepositoryMock.Object + ); + + Mapper.Reset(); + Mapper.Initialize(cfg => { cfg.AddServicesProfiles(); }); //Act - gameResultService.AddGameResult(_testGameResult); + gameResultService.AddGameResult(_testGameResultDto, _testGamer1); //Assert - _gameResultRepositoryMock.Verify(mock => mock.Add(It.Is(x => x.Equals(_testGameResult))), + _gameResultRepositoryMock.Verify(mock => mock.Add(It.Is( + x => x.GameTableId == _testGameResult.GameTableId && + x.GameTable.Id == _testGameResult.GameTable.Id && + x.GamerId == _testGameResult.GamerId && + x.Gamer == _testGameResult.Gamer && + x.Place == _testGameResult.Place && + x.PlayersNumber == _testGameResult.PlayersNumber && + x.BoardGameId == _testGameResult.BoardGameId && + x.BoardGame.Id == _testGameResult.BoardGame.Id && + x.Active == _testGameResult.Active + )), + Times.Once()); + } + + [TestMethod] + public void AddManyGameResultToGameResultsList() + { + //Arrange + _gameResultRepositoryMock.Setup(mock => mock.AddMany(It.IsAny>())); + _gameTableRepositoryMock.Setup(mock => mock.Get(1)).Returns(_testGameTable1); + _gameTableRepositoryMock.Setup(mock => mock.Get(2)).Returns(_testGameTable2); + _boardGameRepositoryMock.Setup(mock => mock.Get(It.IsAny())).Returns(_testBoardGame); + var gameResultService = new GameResultService(_gameResultRepositoryMock.Object, _gamerRepositoryMock.Object, + _gameTableRepositoryMock.Object, _boardGameRepositoryMock.Object); + Mapper.Reset(); + Mapper.Initialize(cfg => { cfg.AddServicesProfiles(); }); + //Act + gameResultService.AddGameResults(_testGameResultDtoList, _testGamer1); + //Assert + _gameResultRepositoryMock.Verify( + mock => mock.AddMany(It.Is>( + x => x.Count == _testGameResultList.Count && + x[0].BoardGameId == + _testGameResultList[0].BoardGameId && + x[0].BoardGame.Id == + _testGameResultList[0].BoardGame.Id && + x[0].GameTableId == + _testGameResultList[0].GameTableId && + x[0].GameTable.Id == + _testGameResultList[0].GameTable.Id && + x[0].GamerId == _testGameResultList[0].GamerId && + x[0].Gamer.Id == _testGameResultList[0].Gamer.Id + )), Times.Once()); } @@ -71,7 +210,7 @@ public void GetGameResult() _gamerRepositoryMock.Setup(mock => mock.Get(It.IsAny())).Returns(new Gamer()); _gameTableRepositoryMock.Setup(mock => mock.Get(It.IsAny())).Returns(new GameTable()); var gameResultService = new GameResultService(_gameResultRepositoryMock.Object, _gamerRepositoryMock.Object, - _gameTableRepositoryMock.Object); + _gameTableRepositoryMock.Object, _boardGameRepositoryMock.Object); Mapper.Reset(); Mapper.Initialize(cfg => { cfg.AddServicesProfiles(); }); //Act @@ -89,7 +228,7 @@ public void GetAllByNickname() _gameResultRepositoryMock.Setup(mock => mock.GetAllByGamerNickname(It.IsAny())) .Returns(new List {new GameResult()}); var gameResultService = new GameResultService(_gameResultRepositoryMock.Object, _gamerRepositoryMock.Object, - _gameTableRepositoryMock.Object); + _gameTableRepositoryMock.Object, _boardGameRepositoryMock.Object); Mapper.Reset(); Mapper.Initialize(cfg => { cfg.AddServicesProfiles(); }); //Act @@ -109,7 +248,7 @@ public void GetByTable() mock.GetAllByTableId(It.IsAny())) .Returns(new List {new GameResult()}); var gameResultService = new GameResultService(_gameResultRepositoryMock.Object, _gamerRepositoryMock.Object, - _gameTableRepositoryMock.Object); + _gameTableRepositoryMock.Object, _boardGameRepositoryMock.Object); //Act var gameResults = gameResultService.GetAllGameResultsByTableId(_testGameResult.GameTableId.Value); @@ -126,7 +265,7 @@ public void EditGameResult() //Arrange _gameResultRepositoryMock.Setup(mock => mock.Edit(It.IsAny())); var gameResultService = new GameResultService(_gameResultRepositoryMock.Object, _gamerRepositoryMock.Object, - _gameTableRepositoryMock.Object); + _gameTableRepositoryMock.Object, _boardGameRepositoryMock.Object); //Act gameResultService.EditGameResult(_testGameResult); //Assert @@ -140,7 +279,7 @@ public void DeactivateGameResult() //Arrange _gameResultRepositoryMock.Setup(mock => mock.Deactivate(It.IsAny())); var gameResultService = new GameResultService(_gameResultRepositoryMock.Object, _gamerRepositoryMock.Object, - _gameTableRepositoryMock.Object); + _gameTableRepositoryMock.Object, _boardGameRepositoryMock.Object); //Act gameResultService.DeactivateGameResult(_testGameResult.Id); //Assert diff --git a/BoardGamesNook.Tests/GameTableServiceTest.cs b/BoardGamesNook.Tests/GameTableServiceTest.cs index 2433ea7..971a89b 100644 --- a/BoardGamesNook.Tests/GameTableServiceTest.cs +++ b/BoardGamesNook.Tests/GameTableServiceTest.cs @@ -14,6 +14,7 @@ namespace BoardGamesNook.Tests [TestClass] public class GameTableServiceTest { + private static readonly Guid testUserId = Guid.NewGuid(); private readonly Mock _boardGameRepositoryMock; private readonly Mock _gameParticipationRepositoryMock; private readonly Mock _gameResultRepositoryMock; @@ -25,7 +26,7 @@ public class GameTableServiceTest new GameParticipation { Id = 1, - CreatedGamerId = Guid.NewGuid(), + CreatedGamerId = testUserId, Gamer = new Gamer(), GameTable = new GameTable(), GameTableId = 1, @@ -37,6 +38,7 @@ public class GameTableServiceTest { Id = 1, BoardGames = new List(), + CreatedGamerId = testUserId, GameParticipations = null, Active = true }; diff --git a/BoardGamesNook/BoardGamesNook.csproj b/BoardGamesNook/BoardGamesNook.csproj index 2ef0bdd..93b9708 100644 --- a/BoardGamesNook/BoardGamesNook.csproj +++ b/BoardGamesNook/BoardGamesNook.csproj @@ -242,8 +242,8 @@ - + diff --git a/BoardGamesNook/Controllers/GameResultController.cs b/BoardGamesNook/Controllers/GameResultController.cs index 3ee248f..8de9359 100644 --- a/BoardGamesNook/Controllers/GameResultController.cs +++ b/BoardGamesNook/Controllers/GameResultController.cs @@ -5,6 +5,7 @@ using AutoMapper; using BoardGamesNook.Model; using BoardGamesNook.Services.Interfaces; +using BoardGamesNook.Services.Models; using BoardGamesNook.ViewModels.GameResult; namespace BoardGamesNook.Controllers @@ -75,8 +76,8 @@ public JsonResult Add(GameResultViewModel gameResultViewModel) if (!(Session["gamer"] is Gamer gamer)) return Json(Errors.GamerNotLoggedIn, JsonRequestBehavior.AllowGet); - var gameResult = GetGameResultObj(gameResultViewModel, gamer); - _gameResultService.AddGameResult(gameResult); + var gameResultDto = Mapper.Map(gameResultViewModel); + _gameResultService.AddGameResult(gameResultDto, gamer); return Json(null, JsonRequestBehavior.AllowGet); } @@ -91,8 +92,8 @@ public JsonResult AddMany(GameResultViewModel[] gameResultViewModels) if (!(Session["gamer"] is Gamer gamer)) return Json(Errors.GamerNotLoggedIn, JsonRequestBehavior.AllowGet); - var gameResults = GetGameResultObjs(gameResultViewModels, gamer); - _gameResultService.AddGameResults(gameResults); + var gameResultDtoList = Mapper.Map>(gameResultViewModels); + _gameResultService.AddGameResults(gameResultDtoList, gamer); return Json(null, JsonRequestBehavior.AllowGet); } @@ -120,19 +121,6 @@ public JsonResult Deactivate(int id) return Json(null, JsonRequestBehavior.AllowGet); } - - private List GetGameResultObjs(IEnumerable gameResultViewModels, Gamer gamer) - { - var result = new List(); - foreach (var gameResultViewModel in gameResultViewModels) - { - var obj = GetGameResultObj(gameResultViewModel, gamer); - result.Add(obj); - } - - return result; - } - private GameResult GetGameResultObj(GameResultViewModel gameResultViewModel, Gamer gamer) { var result = Mapper.Map(gameResultViewModel); diff --git a/BoardGamesNook/Controllers/GameTableController.cs b/BoardGamesNook/Controllers/GameTableController.cs index 8b0cccc..c568246 100644 --- a/BoardGamesNook/Controllers/GameTableController.cs +++ b/BoardGamesNook/Controllers/GameTableController.cs @@ -103,12 +103,12 @@ private GameTable GetGameTable(GameTableViewModel gameTableViewModel, Gamer game } [HttpPost] - public JsonResult Edit(EditTableBoardGameViewModel editTableBoardGame) + public JsonResult Edit(int gameTableId, List tableBoardGameId) { if (!(Session["gamer"] is Gamer)) return Json(Errors.GamerNotLoggedIn, JsonRequestBehavior.AllowGet); - _gameTableService.EditGameTable(editTableBoardGame.Id, editTableBoardGame.TableBoardGameIdList); + _gameTableService.EditGameTable(gameTableId, tableBoardGameId); return Json(null, JsonRequestBehavior.AllowGet); } diff --git a/BoardGamesNook/Global.asax.cs b/BoardGamesNook/Global.asax.cs index 5d4c075..d31713b 100644 --- a/BoardGamesNook/Global.asax.cs +++ b/BoardGamesNook/Global.asax.cs @@ -12,10 +12,10 @@ using BoardGamesNook.Repository.Interfaces; using BoardGamesNook.Services; using BoardGamesNook.Services.Interfaces; +using FluentValidation.Mvc; using SimpleAuthentication.Core; using SimpleAuthentication.Mvc; using SimpleAuthentication.Mvc.Caching; -using FluentValidation.Mvc; namespace BoardGamesNook { @@ -64,11 +64,11 @@ public static void InitializeAutoMapper() { cfg.AddProfile(); cfg.AddProfile(); + cfg.AddProfile(); cfg.AddProfile(); cfg.AddProfile(); cfg.AddProfile(); cfg.AddProfile(); - cfg.AddProfile(); cfg.AddServicesProfiles(); } ); diff --git a/BoardGamesNook/src/about/about.component.html b/BoardGamesNook/src/about/about.component.html index c8bba66..31a5632 100644 --- a/BoardGamesNook/src/about/about.component.html +++ b/BoardGamesNook/src/about/about.component.html @@ -1,10 +1,10 @@ 
-
+
Aplikacja BoardGamesNook została utworzona na potrzeby konkursu Daj Się Poznać 2017. -
+
Jest ona przeznaczona dla wielbicieli gier planszowych. -
+
Użytkownicy mogą tworzyć swoje zbiory gier planszowych, zapisywać wyniki ostatnich gier oraz organizować rozgrywki z innymi użytkownikami. -
- Jeśli chcesz dołączyć się do tworzenia tej zacnej aplikacji lub zgłosić uwagi, skontaktuj się z autorką mailowo. +
+ Jeśli chcesz dołączyć się do tworzenia tej zacnej aplikacji lub zgłosić uwagi, skontaktuj się z autorką mailowo: programmergirlblog@gmail.com.
\ No newline at end of file diff --git a/BoardGamesNook/src/gameTables/gameTable-add.component.ts b/BoardGamesNook/src/gameTables/gameTable-add.component.ts index 1924069..68d5b37 100644 --- a/BoardGamesNook/src/gameTables/gameTable-add.component.ts +++ b/BoardGamesNook/src/gameTables/gameTable-add.component.ts @@ -7,6 +7,8 @@ import { GameTable } from "./gameTable"; import { Common } from "./../Common"; import { TableBoardGame } from "./tableBoardGame"; import {GamerService} from "../gamers/gamer.service"; +import {Gamer} from "../gamers/gamer"; +import {BoardGame} from "../boardGames/boardGame"; @Component({ selector: "gameTable-add", @@ -17,6 +19,9 @@ export class GameTableAddComponent implements OnInit { availableTableBoardGames: TableBoardGame[]; selectedTableBoardGame: TableBoardGame; + selectedGamer: Gamer; + selectedBoardGame: BoardGame; + constructor( private gameTableService: GameTableService, private gamerService: GamerService, diff --git a/BoardGamesNook/src/gameTables/gameTable.service.ts b/BoardGamesNook/src/gameTables/gameTable.service.ts index 8522e24..d382f84 100644 --- a/BoardGamesNook/src/gameTables/gameTable.service.ts +++ b/BoardGamesNook/src/gameTables/gameTable.service.ts @@ -28,14 +28,14 @@ export class GameTableService { } getGameTablesByGamerNickname(gamerNickname: string): Observable { - if (gamerNickname !== null && gamerNickname !== "") { - const urlWithNickname = `${this._getGameTableListByGamerNicknameUrl}`; - return this.http.get(urlWithNickname, + if (gamerNickname != null && gamerNickname !== "") { + var url = `${this._getGameTableListByGamerNicknameUrl}`; + return this.http.get(url, { params: new HttpParams().set("nickname", gamerNickname) }); } else { - const url = `${this._getGameTableListUrl}`; + var url = `${this._getGameTableListUrl}`; return this.http.get(url); } } diff --git a/BoardGamesNook/src/gamerBoardGames/gamerBoardGame-list.component.html b/BoardGamesNook/src/gamerBoardGames/gamerBoardGame-list.component.html index 7918bae..8fed06b 100644 --- a/BoardGamesNook/src/gamerBoardGames/gamerBoardGame-list.component.html +++ b/BoardGamesNook/src/gamerBoardGames/gamerBoardGame-list.component.html @@ -1,7 +1,7 @@ 
  • @@ -21,7 +21,7 @@

-
+