public async Task <MonumentPreviewDto> Handle(UpdateMonumentCommand request, CancellationToken cancellationToken) { var monumentEntity = await _dbContext.Monuments .Include(s => s.Address) .FirstOrDefaultAsync(s => s.Id == request.MonumentId); if (monumentEntity is null) { throw new MonumentsManagerAppException(ExceptionType.EntityNotFound, $"Entity of type MonumentEntity with id {request.MonumentId} does not exists"); } monumentEntity.FormOfProtection = request.FormOfProtection; monumentEntity.Name = request.Name; monumentEntity.ConstructionDate = request.ConstructionDate; monumentEntity.Address = new AddressEntity() { Area = request.Address.Area, City = request.Address.City, Commune = request.Address.Commune, District = request.Address.District, Province = request.Address.Province, Street = request.Address.Street, StreetNumber = request.Address.StreetNumber }; await _dbContext.SaveChangesAsync(); return(monumentEntity.ToPreviewDto(monumentEntity.Pictures.FirstOrDefault())); }
public async Task <Unit> Handle(PromoteUserCommand request, CancellationToken cancellationToken) { var userContextEntity = await _dbContext.Users.FindAsync(_context.UserId); if (userContextEntity.Email == request.Email) { throw new MonumentsManagerAppException(ExceptionType.CannotPromoteYourself, "You can promote different user"); } var userEntity = await _dbContext.Users.FirstOrDefaultAsync(s => s.Email == request.Email); if (userEntity is null) { throw new MonumentsManagerAppException(ExceptionType.EntityNotFound, $"There is no user with mail {request.Email}"); } else if (userEntity.Role == UserRole.Administrator) { throw new MonumentsManagerAppException(ExceptionType.UserAlreadyPromoted, $"User {request.Email} is already promoted to Administrator role"); } userEntity.Role = UserRole.Administrator; await _dbContext.SaveChangesAsync(); return(Unit.Value); }
public async Task <MonumentPreviewDto> Handle(CreateMonumentCommand request, CancellationToken cancellationToken) { var monumentEntity = new MonumentEntity() { UserId = _context.UserId, FormOfProtection = request.FormOfProtection, ConstructionDate = request.ConstructionDate, Name = request.Name, Address = new AddressEntity() { Area = request.Address.Area, City = request.Address.City, Commune = request.Address.Commune, District = request.Address.District, Province = request.Address.Province, Street = request.Address.Street, StreetNumber = request.Address.StreetNumber } }; var result = await _dbContext.Monuments.AddAsync(monumentEntity, cancellationToken); await _dbContext.SaveChangesAsync(); return(result.Entity.ToPreviewDto(new PictureEntity())); }
public async Task <Unit> Handle(DeleteMonumentCommand request, CancellationToken cancellationToken) { var entity = await _dbContext.Monuments.FindAsync(request.MonumentId); if (entity is null) { throw new MonumentsManagerAppException(ExceptionType.EntityNotFound, $"Entity of type MonumentEntity with id {request.MonumentId} does not exists"); } _dbContext.Monuments.Remove(entity); var addressEntity = await _dbContext.Addresses .FirstOrDefaultAsync(s => s.MonumentId == request.MonumentId); _dbContext.Addresses.Remove(addressEntity); var pictures = await _dbContext.Pictures.Where(s => s.MonumentId == request.MonumentId) .ToListAsync(); _dbContext.Pictures.RemoveRange(pictures); await _dbContext.SaveChangesAsync(); return(Unit.Value); }
public async Task <int> Handle(CreateUserCommand request, CancellationToken cancellationToken) { if (await _dbContext.Users.AnyAsync(s => s.Email == request.Email)) { throw new MonumentsManagerAppException(ExceptionType.UserAlreadyExists, $"User with email {request.Email} already exists"); } if (!await _emailSender.TrySendWelcomeMailAsync(request.Email)) { throw new MonumentsManagerAppException(ExceptionType.CannotSendEmail, $"Cannot send welcome mail to {request.Email}"); } var entity = new UserEntity() { Password = _passwordEncryptor.Encrypt(request.Password), Email = request.Email, JobTitle = request.JobTitle, LastLoggedIn = DateTime.UtcNow }; var result = await _dbContext.AddAsync(entity, cancellationToken); await _dbContext.SaveChangesAsync(); return(result.Entity.Id); }
public async Task <Unit> Handle(UpdateUserCommand request, CancellationToken cancellationToken) { var entity = await _dbContext.Users.FindAsync(request.Id); if (entity is null) { throw new MonumentsManagerAppException(ExceptionType.EntityNotFound, $"Entity of type UserEntity with id {request.Id} does not exists"); } entity.JobTitle = request.JobTitle; entity.FirstName = request.FirstName; entity.LastName = request.LastName; if (!string.IsNullOrEmpty(request.Password)) { entity.Password = _passwordEncryptor.Encrypt(request.Password); var userContext = await _dbContext.Users.FindAsync(_applicationContext.UserId); await _emailSender.SendPasswordHasBeenChangedByAdministrator(entity.Email, userContext.Email); } _dbContext.Users.Update(entity); await _dbContext.SaveChangesAsync(); return(Unit.Value); }
public async Task <Unit> Handle(DeletePictureCommand request, CancellationToken cancellationToken) { var pictureEntity = new PictureEntity() { Id = request.PictureId }; _dbContext.Pictures.Remove(pictureEntity); await _dbContext.SaveChangesAsync(); return(Unit.Value); }
public async Task <Unit> Handle(ChangePasswordByRecoveryKeyCommand request, CancellationToken cancellationToken) { var decryptedRecoveryKey = _stringEncoder.Decrypt(request.RecoveryKey); var encrytedUserDto = JsonConvert.DeserializeObject <EncryptedUserDto>(decryptedRecoveryKey); var userEntity = await _dbContext.Users.FindAsync(encrytedUserDto.Id); if (userEntity is null || userEntity.Password != encrytedUserDto.Password) { throw new MonumentsManagerAppException(ExceptionType.RecoveryKeyValidationFailed, $"Recovery key is invalid for user with id {userEntity.Id}"); } userEntity.Password = _passwordEncryptor.Encrypt(request.Password); await _dbContext.SaveChangesAsync(); return(Unit.Value); }
public async Task <PictureDto> Handle(CreatePictureCommand request, CancellationToken cancellationToken) { var monumentEntity = await _dbContext.Monuments .FindAsync(request.MonumentId); if (monumentEntity is null) { throw new MonumentsManagerAppException(ExceptionType.EntityNotFound, $"Entity of type MonumentEntity with id {request.MonumentId} does not exists"); } var pictureEntity = _pictureFactory.Create(request); monumentEntity.Pictures.Add(pictureEntity); await _dbContext.SaveChangesAsync(); return(pictureEntity.ToDto()); }
public async Task <Unit> Handle(DeleteUserCommand request, CancellationToken cancellationToken) { var entity = await _dbContext.Users.FindAsync(request.Id); if (entity is null) { throw new MonumentsManagerAppException(ExceptionType.EntityNotFound, $"Entity of type UserEntity with id {request.Id} does not exists"); } if (_context.UserId == request.Id) { throw new MonumentsManagerAppException(ExceptionType.CannotDeleteCurrentUser, $"Cannot delete current user"); } _dbContext.Users.Remove(entity); await _dbContext.SaveChangesAsync(); return(Unit.Value); }
public async Task <UserDto> Handle(AuthenticateUserCommand request, CancellationToken cancellationToken) { var encryptedPassword = _passwordEncryptor.Encrypt(request.Password); var user = await _dbContext.Users .FirstOrDefaultAsync(s => s.Email == request.Email && s.Password == encryptedPassword); if (user is null) { return(null); } user.LastLoggedIn = DateTime.UtcNow; await _dbContext.SaveChangesAsync(); return(new UserDto() { Id = user.Id, JobTitle = user.JobTitle, Role = user.Role.ConvertTo <UserRoleDto>(), Email = user.Email }); }