Esempio n. 1
0
        public async Task <IActionResult> Post([FromBody] NewDeckCommand newDeckCommand)
        {
            newDeckCommand.Email = HttpContext.Request.Headers["Email"];
            var result = await _mediator.Send(newDeckCommand);

            if (result.IsSuccess)
            {
                return((IActionResult)Ok(result.Value));
            }

            return(NotFound(result.Error));
        }
Esempio n. 2
0
        public async Task <Result <Deck> > Handle(NewDeckCommand request, CancellationToken cancellationToken)
        {
            var user = await _context.UserDbs
                       .Include(u => u.Deck)
                       .Include(d => d.Deck.Tiles)
                       .AsNoTracking()
                       .FirstOrDefaultAsync(
                u => u.Email == request.Email, cancellationToken);

            if (user == null)
            {
                //create user and deck
                var logicDeck = new LogicDeck(4);

                do
                {
                    logicDeck.Unsort();
                } while (!logicDeck.CheckWinIsPossible());
                logicDeck.Tiles         = logicDeck.Tiles.OrderBy(t => t.Pos).ToList();
                logicDeck.User.Email    = request.Email;
                logicDeck.User.UserName = request.UserName;

                var deckDb = _mapper.Map <DeckDb>(logicDeck);
                _context.Add(deckDb);
                try
                {
                    await _context.SaveChangesAsync(cancellationToken).ConfigureAwait(false);

                    return(Result.Ok <Deck>(_mapper.Map <Deck>(deckDb)));
                }
                catch (DbUpdateException ex)
                {
                    return(Result.Fail <Deck>(ex.Message));
                }
            }

            //reset deck
            try
            {
                var deckDb = user.Deck;

                var logicDeck = _mapper.Map <LogicDeck>(deckDb);
                logicDeck.User.Email    = request.Email;
                logicDeck.User.UserName = request.UserName;
                do
                {
                    logicDeck.Unsort();
                } while (!logicDeck.CheckWinIsPossible());
                logicDeck.Tiles   = logicDeck.Tiles.OrderBy(t => t.Pos).ToList();
                logicDeck.Victory = false;
                logicDeck.Score   = 0;
                _context.Update(_mapper.Map <DeckDb>(logicDeck));
                await _context.SaveChangesAsync(cancellationToken).ConfigureAwait(false);

                return(Result.Ok <Deck>(_mapper.Map <Deck>(logicDeck)));
            }
            catch (DbUpdateException ex)
            {
                return(Result.Fail <Deck>(ex.Message));
            }
        }