|
4 | 4 |
|
5 | 5 | import java.util.Optional; |
6 | 6 |
|
| 7 | +import org.springframework.beans.BeanUtils; |
7 | 8 | import org.springframework.beans.factory.annotation.Autowired; |
8 | 9 | import org.springframework.messaging.simp.SimpMessagingTemplate; |
9 | 10 |
|
@@ -65,16 +66,19 @@ public FeatureProposal create(Idea idea) { |
65 | 66 | } |
66 | 67 |
|
67 | 68 | @Override |
68 | | - public FeatureProposal update(FeatureProposal featureProposal) { |
69 | | - for (Idea idea : featureProposal.getIdeas()) { |
| 69 | + public FeatureProposal update(FeatureProposal featureProposalToUpdate) { |
| 70 | + FeatureProposal persistedFeatureProposal = featureProposalRepo.findOne(featureProposalToUpdate.getId()); |
| 71 | + // NOTE: ignore voters on update to avoid concurrency issue of save after votes occur |
| 72 | + BeanUtils.copyProperties(featureProposalToUpdate, persistedFeatureProposal, "voters"); |
| 73 | + for (Idea idea : persistedFeatureProposal.getIdeas()) { |
70 | 74 | idea.setState(IdeaState.ELEVATED); |
71 | | - idea.setFeatureProposal(featureProposal); |
| 75 | + idea.setFeatureProposal(persistedFeatureProposal); |
72 | 76 | idea = ideaRepo.save(idea); |
73 | 77 | simpMessagingTemplate.convertAndSend("/channel/ideas/update", new ApiResponse(SUCCESS, idea)); |
74 | 78 | } |
75 | | - featureProposal = featureProposalRepo.save(featureProposal); |
76 | | - simpMessagingTemplate.convertAndSend("/channel/feature-proposals/update", new ApiResponse(SUCCESS, featureProposal)); |
77 | | - return featureProposal; |
| 79 | + persistedFeatureProposal = featureProposalRepo.save(persistedFeatureProposal); |
| 80 | + simpMessagingTemplate.convertAndSend("/channel/feature-proposals/update", new ApiResponse(SUCCESS, persistedFeatureProposal)); |
| 81 | + return persistedFeatureProposal; |
78 | 82 | } |
79 | 83 |
|
80 | 84 | @Override |
|
0 commit comments