RentalCommandMapper.java
package com.github.jenkaby.bikerental.rental.web.command.mapper;
import com.github.jenkaby.bikerental.rental.application.usecase.CreateRentalUseCase;
import com.github.jenkaby.bikerental.rental.application.usecase.ReturnEquipmentUseCase;
import com.github.jenkaby.bikerental.rental.web.command.dto.*;
import com.github.jenkaby.bikerental.rental.web.query.dto.RentalResponse;
import com.github.jenkaby.bikerental.rental.web.query.mapper.RentalQueryMapper;
import com.github.jenkaby.bikerental.shared.mapper.DiscountMapper;
import com.github.jenkaby.bikerental.shared.mapper.MoneyMapper;
import org.mapstruct.Mapper;
import org.springframework.beans.factory.annotation.Autowired;
import java.util.HashMap;
import java.util.Map;
@Mapper(uses = {MoneyMapper.class, RentalQueryMapper.class, DiscountMapper.class})
public abstract class RentalCommandMapper {
protected RentalQueryMapper rentalQueryMapper;
protected SettlementMapper settlementMapper;
@Autowired
public void setSettlementMapper(SettlementMapper settlementMapper) {
this.settlementMapper = settlementMapper;
}
@Autowired
public void setQueryMapper(RentalQueryMapper queryMapper) {
this.rentalQueryMapper = queryMapper;
}
public abstract CreateRentalUseCase.CreateRentalCommand toCreateCommand(CreateRentalRequest request);
public abstract ReturnEquipmentUseCase.ReturnEquipmentCommand toReturnCommand(ReturnEquipmentRequest request);
public RentalReturnResponse toReturnResponse(ReturnEquipmentUseCase.ReturnEquipmentResult result) {
RentalResponse rentalResponse = rentalQueryMapper.toResponse(result.rental());
var settlementResponse = settlementMapper.toResponse(result.settlementInfo());
return new RentalReturnResponse(rentalResponse, settlementResponse);
}
public Map<String, Object> toPatchMap(RentalUpdateJsonPatchRequest request) {
Map<String, Object> patch = new HashMap<>();
for (RentalPatchOperation operation : request.getOperations()) {
String path = operation.getPath();
String fieldName = path.startsWith("/") ? path.substring(1) : path;
if (operation.getOp() != null) {
patch.put(fieldName, operation.getValue());
}
}
return patch;
}
}