polishing the workspace migration
This commit is contained in:
@@ -55,7 +55,7 @@ public class RecipientGroupService {
|
||||
* 5. Return the batch + any row-level errors
|
||||
*/
|
||||
@Transactional
|
||||
public GroupCreateFromFileResult createFromFile(MultipartFile file, GroupCreateFromFileRequest request, String userId) {
|
||||
public GroupCreateFromFileResult createFromFile(MultipartFile file, GroupCreateFromFileRequest request, UUID workspaceId) {
|
||||
ParseResult parseResult = parseCsv(file);
|
||||
|
||||
if(!parseResult.parseErrors.isEmpty()) {
|
||||
@@ -77,7 +77,7 @@ public class RecipientGroupService {
|
||||
.name(row.name)
|
||||
.account(row.account)
|
||||
.phoneNumber(row.phone)
|
||||
.userId(userId)
|
||||
.workspaceId(workspaceId)
|
||||
.build();
|
||||
recipients.add(recipient);
|
||||
}
|
||||
@@ -86,15 +86,15 @@ public class RecipientGroupService {
|
||||
RecipientGroup group = RecipientGroup.builder()
|
||||
.name(request.getGroupName())
|
||||
.description(request.getDescription())
|
||||
.userId(userId)
|
||||
.workspaceId(workspaceId)
|
||||
.build();
|
||||
|
||||
RecipientGroup savedGroup = recipientGroupRepository.save(group);
|
||||
|
||||
List<RecipientGroupMember> members = addMembers(savedGroup.getId(), userId, recipients);
|
||||
List<RecipientGroupMember> members = addMembers(savedGroup.getId(), workspaceId, recipients);
|
||||
|
||||
// Step 3: create group batch (inline to avoid circular dependency with GroupBatchService)
|
||||
GroupBatch batch = createBatchInline(savedGroup.getId(), userId, request, members);
|
||||
GroupBatch batch = createBatchInline(savedGroup.getId(), workspaceId, request, members);
|
||||
|
||||
// Step 4: update batch items with bill/provider fields from CSV
|
||||
List<GroupBatchItem> batchItems = groupBatchItemRepository.findAllByGroupBatchId(batch.getId());
|
||||
@@ -136,7 +136,7 @@ public class RecipientGroupService {
|
||||
}
|
||||
|
||||
// Return the updated batch + errors
|
||||
GroupBatch resultBatch = groupBatchRepository.findByIdAndUserId(batch.getId(), userId)
|
||||
GroupBatch resultBatch = groupBatchRepository.findByIdAndWorkspaceId(batch.getId(), workspaceId)
|
||||
.orElseThrow(() -> new ApiException("Batch not found after creation"));
|
||||
|
||||
return GroupCreateFromFileResult.builder()
|
||||
@@ -152,12 +152,12 @@ public class RecipientGroupService {
|
||||
* Create a GroupBatch and its items directly (mirrors GroupBatchService.createBatch logic
|
||||
* but without circular dependency).
|
||||
*/
|
||||
private GroupBatch createBatchInline(UUID recipientGroupId, String userId,
|
||||
private GroupBatch createBatchInline(UUID recipientGroupId, UUID workspaceId,
|
||||
GroupCreateFromFileRequest request,
|
||||
List<RecipientGroupMember> members) {
|
||||
GroupBatch batch = GroupBatch.builder()
|
||||
.recipientGroupId(recipientGroupId)
|
||||
.userId(userId)
|
||||
.workspaceId(workspaceId)
|
||||
.description(request.getDescription())
|
||||
.requestedBy(request.getRequestedBy())
|
||||
.currency(request.getCurrency())
|
||||
@@ -384,25 +384,26 @@ public class RecipientGroupService {
|
||||
RecipientGroup savedGroup = recipientGroupRepository.save(group);
|
||||
|
||||
if (recipients != null && !recipients.isEmpty()) {
|
||||
addMembers(savedGroup.getId(), savedGroup.getUserId(), recipients);
|
||||
addMembers(savedGroup.getId(), savedGroup.getWorkspaceId(), recipients);
|
||||
}
|
||||
|
||||
return savedGroup;
|
||||
}
|
||||
|
||||
@Transactional
|
||||
public List<RecipientGroupMember> addMembers(UUID groupId, String userId, List<Recipient> recipients) {
|
||||
get(groupId, userId);
|
||||
public List<RecipientGroupMember> addMembers(UUID groupId, UUID workspaceId, List<Recipient> recipients) {
|
||||
get(groupId, workspaceId);
|
||||
List<RecipientGroupMember> added = new ArrayList<>();
|
||||
for (Recipient incomingRecipient : recipients) {
|
||||
Recipient recipient = resolveOrCreateRecipient(incomingRecipient, userId);
|
||||
Recipient recipient = resolveOrCreateRecipient(incomingRecipient, workspaceId);
|
||||
|
||||
RecipientGroupMember member = RecipientGroupMember.builder()
|
||||
.recipientGroupId(groupId)
|
||||
.recipientUid(recipient.getId())
|
||||
.recipient(recipient)
|
||||
.account(recipient.getAccount())
|
||||
.userId(userId)
|
||||
.workspaceId(workspaceId)
|
||||
.userId(incomingRecipient.getUserId())
|
||||
.build();
|
||||
added.add(recipientGroupMemberRepository.save(member));
|
||||
}
|
||||
@@ -413,25 +414,25 @@ public class RecipientGroupService {
|
||||
return recipientGroupRepository.findAll(spec, pageable);
|
||||
}
|
||||
|
||||
public List<RecipientGroup> list(String userId) {
|
||||
return recipientGroupRepository.findAllByUserId(userId);
|
||||
public List<RecipientGroup> list(UUID workspaceId) {
|
||||
return recipientGroupRepository.findAllByWorkspaceId(workspaceId);
|
||||
}
|
||||
|
||||
public RecipientGroup get(UUID groupId, String userId) {
|
||||
return recipientGroupRepository.findByIdAndUserId(groupId, userId)
|
||||
public RecipientGroup get(UUID groupId, UUID workspaceId) {
|
||||
return recipientGroupRepository.findByIdAndWorkspaceId(groupId, workspaceId)
|
||||
.orElseThrow(() -> new ApiException("Recipient group not found"));
|
||||
}
|
||||
|
||||
public RecipientGroup update(UUID groupId, String userId, String name, String description) {
|
||||
RecipientGroup group = get(groupId, userId);
|
||||
public RecipientGroup update(UUID groupId, UUID workspaceId, String name, String description) {
|
||||
RecipientGroup group = get(groupId, workspaceId);
|
||||
group.setName(name);
|
||||
group.setDescription(description);
|
||||
return recipientGroupRepository.save(group);
|
||||
}
|
||||
|
||||
@Transactional
|
||||
public void delete(UUID groupId, String userId) {
|
||||
RecipientGroup group = get(groupId, userId);
|
||||
public void delete(UUID groupId, UUID workspaceId) {
|
||||
RecipientGroup group = get(groupId, workspaceId);
|
||||
group.setDeleted(true);
|
||||
recipientGroupRepository.save(group);
|
||||
|
||||
@@ -441,14 +442,14 @@ public class RecipientGroupService {
|
||||
}
|
||||
|
||||
@Transactional
|
||||
public List<RecipientGroupMember> addMembersByIds(UUID groupId, String userId, List<UUID> recipientIds) {
|
||||
get(groupId, userId);
|
||||
public List<RecipientGroupMember> addMembersByIds(UUID groupId, UUID workspaceId, List<UUID> recipientIds) {
|
||||
get(groupId, workspaceId);
|
||||
List<RecipientGroupMember> added = new ArrayList<>();
|
||||
for (UUID recipientId : recipientIds) {
|
||||
Recipient recipient = recipientRepository.findById(recipientId)
|
||||
.orElseThrow(() -> new ApiException("Recipient not found: " + recipientId));
|
||||
if (!userId.equals(recipient.getUserId())) {
|
||||
throw new ApiException("Recipient does not belong to user");
|
||||
if (!workspaceId.equals(recipient.getWorkspaceId())) {
|
||||
throw new ApiException("Recipient does not belong to workspace");
|
||||
}
|
||||
if (recipientGroupMemberRepository.existsByRecipientGroupIdAndRecipientId(groupId, recipientId)) {
|
||||
continue;
|
||||
@@ -458,23 +459,23 @@ public class RecipientGroupService {
|
||||
.recipientUid(recipientId)
|
||||
.recipient(recipient)
|
||||
.account(recipient.getAccount())
|
||||
.userId(userId)
|
||||
.workspaceId(workspaceId)
|
||||
.build();
|
||||
added.add(recipientGroupMemberRepository.save(member));
|
||||
}
|
||||
return added;
|
||||
}
|
||||
|
||||
private Recipient resolveOrCreateRecipient(Recipient incomingRecipient, String fallbackUserId) {
|
||||
private Recipient resolveOrCreateRecipient(Recipient incomingRecipient, UUID fallbackWorkspaceId) {
|
||||
if (incomingRecipient == null || incomingRecipient.getAccount() == null || incomingRecipient.getAccount().isBlank()) {
|
||||
throw new ApiException("Recipient account is required");
|
||||
}
|
||||
|
||||
String recipientUserId = incomingRecipient.getUserId() == null || incomingRecipient.getUserId().isBlank()
|
||||
? fallbackUserId
|
||||
: incomingRecipient.getUserId();
|
||||
UUID recipientWorkspaceId = incomingRecipient.getWorkspaceId() == null
|
||||
? fallbackWorkspaceId
|
||||
: incomingRecipient.getWorkspaceId();
|
||||
|
||||
List<Recipient> existing = recipientRepository.findByAccountAndUserId(incomingRecipient.getAccount(), recipientUserId);
|
||||
List<Recipient> existing = recipientRepository.findByAccountAndWorkspaceId(incomingRecipient.getAccount(), recipientWorkspaceId);
|
||||
if (!existing.isEmpty()) {
|
||||
Recipient recipient = existing.get(0);
|
||||
recipient.setName(incomingRecipient.getName());
|
||||
@@ -483,13 +484,13 @@ public class RecipientGroupService {
|
||||
}
|
||||
|
||||
incomingRecipient.setId(null);
|
||||
incomingRecipient.setUserId(recipientUserId);
|
||||
incomingRecipient.setWorkspaceId(recipientWorkspaceId);
|
||||
return recipientRepository.save(incomingRecipient);
|
||||
}
|
||||
|
||||
@Transactional
|
||||
public void removeMember(UUID groupId, UUID recipientId, String userId) {
|
||||
get(groupId, userId);
|
||||
public void removeMember(UUID groupId, UUID recipientId, UUID workspaceId) {
|
||||
get(groupId, workspaceId);
|
||||
List<RecipientGroupMember> members = recipientGroupMemberRepository.findAllByRecipientGroupId(groupId);
|
||||
RecipientGroupMember target = members.stream()
|
||||
.filter(item -> recipientId.equals(item.getRecipientUid()))
|
||||
@@ -499,8 +500,8 @@ public class RecipientGroupService {
|
||||
recipientGroupMemberRepository.save(target);
|
||||
}
|
||||
|
||||
public List<RecipientGroupMember> members(UUID groupId, String userId) {
|
||||
get(groupId, userId);
|
||||
public List<RecipientGroupMember> members(UUID groupId, UUID workspaceId) {
|
||||
get(groupId, workspaceId);
|
||||
return recipientGroupMemberRepository.findAllByRecipientGroupId(groupId);
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user