Ich habe ein eingehendes Datenübertragungsobjekt (ProductRequestDto), das Codes/natürliche Schlüssel für einige Beziehungen (wie imageCodes und CountryCode) verwendet. Meine interne Persistenzentität (Produkt) verwendet Fremdschlüssel-IDs für dieselben Beziehungen (imageIds und CountryId).
Bevor die Produktentität zur Persistenz an den ProductService übergeben wird, muss ich:
- die natürlichen Schlüssel (z. B. CountryCode) in Fremdschlüssel-IDs (z. B. CountryId) übersetzen/nachschlagen. Diese Suche erfordert wahrscheinlich einen separaten Repository-/Dienstaufruf (z. B. countryRepository.findByCode(countryCode)).
- Ordnen Sie die verbleibenden Eigenschaften von ProductRequestDto der Produktentität zu.
Sollte sie sich im Mapper befinden Fassade oder die Service-Ebene?
Wenn ich einen Validierungsdienst hätte, der den Benutzer überprüfen und darauf aufmerksam machen müsste, dass er widersprüchliche oder zu viele Bilder hat, wohin würde das gehören?
Vielen Dank!
Code: Select all
@Getter
@Setter
public class ProductRequestDto {
private Long id;
private String code;
private String name;
private String description;
private BigDecimal price;
private Set imageCodes; //Here as codes
private String countryCode; //Here as code
private Boolean active;
private Instant createdAt;
private Instant updatedAt;
}
@Getter
@Setter
public class Product {
private Long id;
private String code;
private String name;
private String description;
private BigDecimal price;
private Set imageIds; //Here as image ids (fk)
private Long countryId; //Here as country Id (fk)
private Boolean active;
private Instant createdAt;
private Instant updatedAt;
}
@RestController
@RequestMapping("/api")
public class ProductResource {
private final ProductFacade productFacade;
@Autowired
public ProductResource(ProductFacade productFacade) {
this.productFacade = productFacade;
}
@PostMapping("/v1/products")
public ProductResponseDto createProduct(@RequestBody CreateProductDto createProductDto){
return productFacade.createProduct(createProductDto);
}
}
@Component
public class ProductFacade {
private final ProductService productService;
private final ProductMapper productMapper;
@Autowired
public ProductFacade(ProductService productService, ProductMapper productMapper) {
this.productService = productService;
this.productMapper = productMapper;
}
public ProductResponseDto createProduct(ProductRequestDto dto) {
Product product = productMapper.toProduct(dto);
Product createdProduct = productService.createProduct(product);
return productMapper.toProductDto(createdProduct);
}
}
@Component
public class ProductService {
private final ProductRepository productRepository;
@Autowired
public ProductService(ProductRepository productRepository) {
this.productRepository = productRepository;
}
public Product createProduct(Product product) {
return productRepository.createProduct(product);
}
}
Mobile version