public async Task <IActionResult> PostAsync([FromBody] PassageRequest request)
        {
            var currentCardDto = (await _cardManager
                                  .GetAllAsync(uniqueNumbers: new string[] { request.CardUniqueNumber }))
                                 .FirstOrDefault();

            if (currentCardDto is null)
            {
                return(NotFound());
            }

            var currentDoorReaderDto = (await _doorReaderManager
                                        .GetAllAsync(
                                            serialNumbers: new string[] { request.DoorReaderSerialNumber },
                                            includes: new string[] { nameof(DoorReader.Door) }))
                                       .FirstOrDefault();

            if (currentDoorReaderDto is null)
            {
                return(NotFound());
            }

            var doorActionStatus = DoorActionStatusType.Success;

            if (currentCardDto.Status == CardStatusType.Locked)
            {
                doorActionStatus = DoorActionStatusType.Error;
            }

            if (currentDoorReaderDto.Door.Status != DoorStatusType.Active)
            {
                doorActionStatus = DoorActionStatusType.Error;
            }

            if (currentCardDto.Level < currentDoorReaderDto.Door.Level)
            {
                doorActionStatus = DoorActionStatusType.Denied;
            }

            var doorActionDto = new DoorActionDto
            {
                CardId       = currentCardDto.Id,
                DoorReaderId = currentDoorReaderDto.Id,
                Status       = doorActionStatus,
                TimeStamp    = DateTime.Now,
            };

            await _doorActionManager.AddAsync(doorActionDto);

            await _commitManager.SaveAsync();

            return(doorActionStatus != DoorActionStatusType.Success
                ? BadRequest()
                : Ok());
        }
示例#2
0
        public void GetAllAsync_CardsExist_CardsRetrieved()
        {
            // Arrange
            var card1 = new Card
            {
                Id           = 1,
                UserId       = "QWERTY123",
                UniqueNumber = "123-45",
                Status       = CardStatusType.Active,
                Level        = LevelType.Admin,
            };

            var card2 = new Card
            {
                Id           = 2,
                UserId       = "QWERTY321",
                UniqueNumber = "123-67",
                Status       = CardStatusType.Active,
                Level        = LevelType.Admin,
            };

            _applicationContext.Cards.AddRange(card1, card2);
            _applicationContext.SaveChanges();

            // Act
            var receivedCardDtos = _cardManager
                                   .GetAllAsync()
                                   .GetAwaiter()
                                   .GetResult();

            // Assert
            Assert.Single(receivedCardDtos.Where(cardDto => cardDto.Id == card1.Id));
            Assert.Single(receivedCardDtos.Where(cardDto => cardDto.Id == card2.Id));
        }
        public async Task <IActionResult> List(DateTime?dateFilter, int?page)
        {
            const int defaultPage = 1;
            const int pageSize    = 10;

            var pageFilter = new PageHelper
            {
                Page     = page ?? defaultPage,
                PageSize = pageSize,
            };

            var user = await _userManager.GetUserAsync(User);

            var personCardIds = (await _cardManager.GetAllAsync(
                                     employeeIds: new string[] { user.Id }))
                                .Select(cardDto => cardDto.Id)
                                .ToArray();

            var doorActionDtosByPerson = (await _doorActionManager.GetAllAsync(
                                              pageFilter: pageFilter,
                                              dateFilter: dateFilter,
                                              cardIds: personCardIds,
                                              includes: new string[]
            {
                nameof(DoorActionDto.Card),
                nameof(DoorActionDto.DoorReader),
                nameof(DoorReader.Door)
            }))
                                         .OrderBy(doorActionDto => doorActionDto.TimeStamp);

            return(View(new DoorActionIndexViewModel
            {
                DoorActionViewModels = _mapper.Map <IEnumerable <DoorActionViewModel> >(doorActionDtosByPerson),
                PageViewModel = new PageViewModel(
                    await _doorActionManager.GetTotalCountAsync(
                        dateFilter: dateFilter,
                        cardIds: personCardIds),
                    pageFilter.Page,
                    pageFilter.PageSize),
                DateFilter = dateFilter.HasValue
                    ? dateFilter.Value.ToString("yyyy-MM-dd")
                    : null
            }));
        }
 public async Task <IActionResult> GetCardsAsync() =>
 Ok(await _cardManager.GetAllAsync());