public async Task <ActionResult <ResultModel <Domain.Client.DTO.UserLogged> > > LoginAsync([FromBody] Domain.Client.DTO.User user)
        {
            var objetc = new ResultModel <Domain.Client.DTO.UserLogged>();

            _object = await _userRepository.Login(user.Identification, user.Password);

            if (_object.Sucess)
            {
                var userLoggedDTO = new WorkShop.Domain.Client.DTO.UserLogged()
                {
                    UserId     = _object.Object.Id,
                    DataLogged = DateTime.UtcNow
                };
                await _userLoggedEvent.CreateSession(userLoggedDTO);

                objetc.Sucess = true;
                objetc.Object = userLoggedDTO;
            }
            else
            {
                objetc.Sucess = false;
            }

            objetc.Message.AddRange(_object.Message);

            return(objetc);
        }
        public async Task <ActionResult <string[]> > GetAsync()
        {
            var user = new Domain.Client.DTO.User()
            {
                Identification = "Anderson8", Password = "******"
            };

            // _object = await _userRepository.Insert(user);

            // return _object.Message.ToArray();

            _object = await _userRepository.Login(user.Identification, user.Password);

            if (_object.Sucess)
            {
                var userLoggedDTO = new WorkShop.Domain.Client.DTO.UserLogged()
                {
                    UserId     = _object.Object.Id,
                    DataLogged = DateTime.UtcNow
                };
                await _userLoggedEvent.PingAsync(userLoggedDTO);
            }

            return(Ok(_object.Message.ToArray()));
        }
        public async Task <WorkShop.Domain.Client.DTO.UserLogged> PingAsync([FromQuery] string key, [FromQuery] Guid userId)
        {
            var userLogged = new WorkShop.Domain.Client.DTO.UserLogged()
            {
                Hash   = key,
                UserId = userId
            };

            return(await _userLoggedEvent.PingAsync(userLogged));
        }
        public async Task CreateSession(WorkShop.Domain.Client.DTO.UserLogged userLoggedDTO)
        {
            var userLogged = new UserLogged(userLoggedDTO.UserId,
                                            userLoggedDTO.DataLogged,
                                            userLoggedDTO.Ip);

            _IUserLoggedRepository.Add(userLogged);

            await _IUserLoggedRepository.SaveChangesAsync();

            userLoggedDTO.DataCheck  = userLogged.DataCheck;
            userLoggedDTO.DataLogged = userLogged.DataLogged;
            userLoggedDTO.Hash       = userLogged.Hash;
            userLoggedDTO.Ip         = userLogged.Ip;
            userLoggedDTO.UserId     = userLogged.UserId;
        }
        public async Task <WorkShop.Domain.Client.DTO.UserLogged> PingAsync(WorkShop.Domain.Client.DTO.UserLogged userLoggedDTO)
        {
            var checkUserLogged = (await _IUserLoggedRepository.FindAsync(x => userLoggedDTO.UserId == x.UserId &&
                                                                          x.Hash == userLoggedDTO.Hash)).FirstOrDefault();

            UserLogged userLogged = null;

            if (checkUserLogged != null)
            {
                userLogged = checkUserLogged;
                userLogged.SetDataCheck();
                _IUserLoggedRepository.Update(userLogged);

                await _IUserLoggedRepository.SaveChangesAsync();

                userLoggedDTO.DataCheck  = userLogged.DataCheck;
                userLoggedDTO.DataLogged = userLogged.DataLogged;
                userLoggedDTO.Hash       = userLogged.Hash;
                userLoggedDTO.Ip         = userLogged.Ip;
                userLoggedDTO.UserId     = userLogged.UserId;
            }
            else
            {
                userLoggedDTO = null;
            }

            var dateExclud = DateTime.UtcNow.AddSeconds(-300);
            var excluds    = await _IUserLoggedRepository.FindAsync(x => x.DataLogged <= dateExclud);

            foreach (var exclud in excluds)
            {
                await _IUserLoggedRepository.Remove(exclud.Id);
            }

            await _IUserLoggedRepository.SaveChangesAsync();

            return(userLoggedDTO);
        }