Created
September 16, 2022 17:32
-
-
Save benjaminvanrenterghem/9fbc275b9ed3f99c94429517b833700f to your computer and use it in GitHub Desktop.
CQRS update commando
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
// #1 De Request, definieert als doel het bekomen van een Response<StageProfileResponseDTO> bij afhandeling | |
public class UpdateStageProfileCommand : IRequest<Response<StageProfileResponseDTO>> { | |
public StageProfileRequestDTO ProfileRequestDTO { get; set; } | |
public ParsedJwtToken ParsedJwtToken { get; set; } | |
} | |
// #2 De Request Handler, maakt gebruik van bovenstaande Request en definieert hetzelfde doel | |
public class UpdateStageProfileCommandHandler : IRequestHandler<UpdateStageProfileCommand, Response<StageProfileResponseDTO>> { | |
// #3 Om met de databank te interageren wordt gebruik gemaakt van generieke repositories | |
private readonly IGenericReadRepository<User> _userReadRepository; | |
private readonly IGenericReadRepository<StageProfile> _profileReadRepository; | |
private readonly IGenericWriteRepository<StageProfile> _profileWriteRepository; | |
private readonly IMapper _mapper; | |
// #4 Door middel van geregistreerde ASP.NET IServiceCollection services worden de generieke repositories dependency injected | |
public UpdateStageProfileCommandHandler(IGenericReadRepository<User> userReadRepository, IGenericReadRepository<StageProfile> profileReadRepository, IGenericWriteRepository<StageProfile> profileWriteRepository, IMapper mapper) { | |
_userReadRepository = userReadRepository; | |
_profileReadRepository = profileReadRepository; | |
_profileWriteRepository = profileWriteRepository; | |
_mapper = mapper; | |
} | |
// #5 We handelen het ontvangen verzoek af | |
public async Task<Response<StageProfileResponseDTO>> Handle(UpdateStageProfileCommand request, CancellationToken cancellationToken) { | |
var req = request.ProfileRequestDTO; | |
var jwt = request.ParsedJwtToken; | |
StageProfile? existingProfile = _profileReadRepository.GetAllWithLazyLoading(p => p.Id == (req.Id ?? -1)).FirstOrDefault(); | |
if (existingProfile == null) { | |
return new Response<StageProfileResponseDTO>().AddError("StageProfile could not be found"); | |
} | |
if (!jwt.ClearanceLevels.Contains(ClearanceLevel.Management)) { | |
if (existingProfile.OwnerId != jwt.UserId) { | |
return new Response<StageProfileResponseDTO>().AddError("Unpriviliged: you are not the owner of this profile"); | |
} | |
} else { | |
var aspiringOwner = _userReadRepository.GetById(req.OwnerUserId); | |
if(aspiringOwner == null) { | |
return new Response<StageProfileResponseDTO>().AddError("Newly appointed owner does not exist"); | |
} | |
} | |
// #6 Door middel van Automapper wordt een Entity omgezet naar een Response DTO | |
StageProfile updatedProfile = _mapper.Map<StageProfile>(req); | |
_profileWriteRepository.Update(existingProfile, updatedProfile); | |
_profileWriteRepository.Save(); | |
// #7 We retourneren een Response<StageProfileResponseDTO> | |
return new Response<StageProfileResponseDTO>( | |
_mapper.Map<StageProfileResponseDTO>( | |
existingProfile | |
) | |
); | |
} | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment