Esempio n. 1
0
        public async Task <IActionResult> Put(int id,
                                              [FromBody] UserModel model)
        {
            try
            {
                if (!ModelState.IsValid)
                {
                    return(BadRequest(ModelState));
                }
                if (model.Id != id)
                {
                    return(BadRequest("Changing id is impossible"));
                }

                var usr = _repo.GetUser(id);
                if (usr == null)
                {
                    return(NotFound());
                }

                if (usr.FirstName.Equals(model.FirstName) &&
                    usr.LastName.Equals(model.LastName) &&
                    id != usr.Id)
                {
                    return(BadRequest("User with requested name exists."));
                }

                var newNameOccured = (usr.FirstName != model.FirstName) || (usr.LastName != model.LastName);
                var events         = _repo.GetAllEventsOfHost(usr);

                usr.FirstName = model.FirstName;
                usr.LastName  = model.LastName;
                usr.Title     = model.Title;
                usr.Pose      = model.Pose;
                usr.Headline  = model.Headline;
                usr.Phone     = model.Phone;
                usr.Email     = model.Email;
                usr.Linkedin  = model.Linkedin;
                usr.Location  = model.Location;
                usr.Tags      = model.Tags;

                _repo.Update(usr);

                if (!await _repo.SaveAllAsync())
                {
                    return(BadRequest("Could not update user"));
                }

                if (!newNameOccured)
                {
                    return(Ok(Mapper.Map <UserModel>(usr)));
                }

                // Updating info of related events

                if (events.Count() == 0)
                {
                    return(Ok(Mapper.Map <UserModel>(usr)));
                }
                foreach (var ev in events)
                {
                    ev.HostFirstName = usr.FirstName;
                    ev.HostLastName  = usr.LastName;
                }
                _repo.UpdateMany(events);

                if (await _repo.SaveAllAsync())
                {
                    return(Ok(Mapper.Map <UserModel>(usr)));
                }
                else
                {
                    return(BadRequest("User updated but related events not"));
                }
            }
            catch (Exception ex)
            {
                _logger.LogError($"Exception thrown while updating user: {ex}");
            }

            return(BadRequest("Could not update user"));
        }