Ejemplo n.º 1
0
        public IActionResult AccessDevice([FromBody] DeviceAccessViewModel model)
        {
            var user = User.GetUser(_context);

            var device = _context.Devices.Find(model.DeviceId);

            if (device == null)
            {
                return(NotFound(new NotFoundError("Device not found!")));
            }

            var accessUser = _context
                             .Users
                             .Where(p => p.Email == model.UserName || p.UserName == model.UserName)
                             .FirstOrDefault();

            if (accessUser == null)
            {
                return(NotFound(new NotFoundError("A user with such login or email does not exist.")));
            }

            var userHasController = _context.UserHasControllers
                                    .Where(p => p.ControllerId == device.ControllerId)
                                    .Where(p => p.UserId == user.Id)
                                    .Where(p => p.IsAdmin)
                                    .FirstOrDefault();

            if (userHasController == null)
            {
                return(Unauthorized(new UnauthorizedError()));
            }

            var accessUserHasController = _context.UserHasControllers
                                          .Where(p => p.ControllerId == device.ControllerId)
                                          .Where(p => p.UserId == accessUser.Id)
                                          .FirstOrDefault();

            if (accessUserHasController == null)
            {
                return(Unauthorized(new UnauthorizedError("User hasn`t access to your controller!")));
            }

            var userHasDevice = _context
                                .UserHasDevices
                                .Where(p => p.DeviceId == device.Id)
                                .Where(p => p.UsersHaveControllerId == accessUserHasController.Id)
                                .FirstOrDefault();

            if (userHasDevice != null)
            {
                return(StatusCode(500, new InternalServerError("User have been alerady added")));
            }

            var accessUserHasDevice = new UserHasDevice
            {
                DeviceId = device.Id,
                UsersHaveControllerId = accessUserHasController.Id
            };

            _context.UserHasDevices.Add(accessUserHasDevice);
            _context.SaveChanges();
            accessUserHasDevice.UserHasController      = _context.UserHasControllers.Find(accessUserHasDevice.UsersHaveControllerId);
            accessUserHasDevice.UserHasController.User = _context.Users.Find(accessUserHasDevice.UserHasController.UserId);

            return(Json(accessUserHasDevice.Adapt <UserHasDeviceViewModel>()));
        }