Есть ли способ обновить ресурс основной детали только в одном запросе PUT вместо обновления каждой детали в разных запросах? - PullRequest
0 голосов
/ 07 ноября 2019

Я пишу клиент-серверное веб-приложение с начальной загрузкой, которое имеет ресурс master-detail, и я хочу знать, есть ли способ обновить весь ресурс (master и detail / s) только за один вызовPUT метод.

Я уже обновил главный ресурс за один вызов, а каждую деталь - за другой. Я не знаю, является ли это правильным способом.

Вот мой метод обновления для моего основного ресурса:

public PaymentDTO update(Integer id, PaymentDTO payment) {
    final PaymentDTO toUpdate = convertDomainToDto(paymentDao.findById(id).get());
    toUpdate.setBillType(payment.getBillType());
    toUpdate.setDate(payment.getDate());
    toUpdate.setDocumentType(payment.getDocumentType());
    toUpdate.setNumber(payment.getNumber());
    toUpdate.setPersonalDebtId(payment.getPersonalDebtId());
    toUpdate.setProviderId(payment.getProviderId());
    toUpdate.setStamping(payment.getStamping());
    toUpdate.setTotal(payment.getTotal());
    toUpdate.setWorkId(payment.getWorkId());
    toUpdate.setDetails(payment.getDetails());

    save(toUpdate);

    return toUpdate;
}

метод обновления для подробного ресурса:

public PaymentDetailDTO updateDetail(Integer id, PaymentDetailDTO paymentDetail) {
    final PaymentDetailDTO toUpdate = convertToDetailDto(paymentDetailDao.findById(id).get());
    toUpdate.setPaymentConceptId(paymentDetail.getPaymentConceptId());
    toUpdate.setQuantity(paymentDetail.getQuantity());
    toUpdate.setUnitPrice(paymentDetail.getUnitPrice());

    paymentDetailDao.save(convertToDetailDomain(toUpdate));

    return toUpdate;
}

и метод сохранения:

public PaymentDTO save(PaymentDTO dto) {
    List<PaymentDetailDTO> detailsDto = dto.getDetails();
    final PaymentDomain payment = convertDtoToDomain(dto);
    paymentDao.save(payment);

    detailsDto.forEach(detail -> detail.setPaymentId(payment.getId()));
    List<PaymentDetailDomain> detailsDomain = convertToDetailDomainList(detailsDto);
    detailsDomain.forEach(domain -> paymentDetailDao.save(domain));
    payment.setPayment_details(detailsDomain);

    return convertDomainToDto(payment);
}

Когда я пытаюсь обновить все в одном вызове, детали, которые уже есть, не обновляются, и детали, которые я хочу обновить с его новыми атрибутамисохраняется как новая деталь.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...