public async Task <ActionResult <UULResponse> > AddHabitant(HabitantDTO habitantDTO) // TODO check rules before adding { var currentUser = HttpContext.User; UULResponse response; try { var userInfo = SecHelper.GetUserInfo(currentUser.Claims); var user = await _context.Users.Where(u => u.Login.Equals(userInfo.Login) && u.ApartmentCode.Equals(userInfo.ApartmentCode)).SingleOrDefaultAsync(); if (user == null) { return(Error.ProfileNotFound.CreateErrorResponse(_logger, "AddHabitant")); } var habitant = new Habitant(habitantDTO) { User = user }; _context.Habitants.Add(habitant); await _context.SaveChangesAsync(); var habitants = await _context.Habitants.Where(h => h.User.ID == user.ID).Select(h => new HabitantDTO(h)).ToListAsync(); userInfo.IsActivated = user.IsActivated; userInfo.Habitants = habitants; response = new UULResponse() { Success = true, Message = "Habitant was added", Data = userInfo }; } catch (Exception e) { response = Error.ProfileAddHabitantFailed.CreateErrorResponse(_logger, "AddHabitant", e); } return(response); }
public async Task <ActionResult <UULResponse> > DeleteHabitant(HabitantDTO habitantDTO) { var currentUser = HttpContext.User; UULResponse response; try { var userInfo = SecHelper.GetUserInfo(currentUser.Claims); var user = await _context.Users.Where(u => u.Login.Equals(userInfo.Login) && u.ApartmentCode.Equals(userInfo.ApartmentCode)).FirstAsync(); var existentHabitants = await _context.Habitants.Where(h => h.User.ID == user.ID).Select(h => new HabitantDTO(h)).ToListAsync(); if (existentHabitants.Count <= 1) { return(Error.ProfileLastHabitantDeletion.CreateErrorResponse(_logger, "DeleteHabitant")); } var habitant = await _context.Habitants.FindAsync(habitantDTO.ID); _context.Habitants.Remove(habitant); await _context.SaveChangesAsync(); var habitants = await _context.Habitants.Where(h => h.User.ID == user.ID).Select(h => new HabitantDTO(h)).ToListAsync(); userInfo.IsActivated = user.IsActivated; userInfo.Habitants = habitants; response = new UULResponse() { Success = true, Message = "Habitant was deleted", Data = userInfo }; } catch (Exception e) { response = Error.ProfileDeleteHabitantFailed.CreateErrorResponse(_logger, "DeleteHabitant", e); } return(response); }
public async Task <ActionResult <UULResponse> > EditHabitant(HabitantDTO habitantDTO) { var currentUser = HttpContext.User; UULResponse response; try { var userInfo = SecHelper.GetUserInfo(currentUser.Claims); var user = await _context.Users.Where(u => u.Login.Equals(userInfo.Login) && u.ApartmentCode.Equals(userInfo.ApartmentCode)).SingleOrDefaultAsync(); if (user == null) { return(Error.ProfileNotFound.CreateErrorResponse(_logger, "EditHabitant")); } var habitant = await _context.Habitants.FindAsync(habitantDTO.ID); if (habitant == null) { return(Error.ProfileHabitantLookupFailed.CreateErrorResponse(_logger, "EditHabitant")); } habitant.Name = habitantDTO.Name; habitant.AvatarSrc = habitantDTO.AvatarSrc; _context.Habitants.Update(habitant); await _context.SaveChangesAsync(); var habitants = await _context.Habitants.Where(h => h.User.ID == user.ID).Select(h => new HabitantDTO(h)).ToListAsync(); userInfo.IsActivated = user.IsActivated; userInfo.Habitants = habitants; response = new UULResponse() { Success = true, Message = "Habitant was updated", Data = userInfo }; } catch (Exception e) { response = Error.ProfileEditHabitantFailed.CreateErrorResponse(_logger, "EditHabitant", e); } return(response); }