From db27bcc1f77f873568fdaf51b939e0a844e62ee2 Mon Sep 17 00:00:00 2001 From: Jose Date: Wed, 4 Mar 2026 22:10:45 +0100 Subject: [PATCH] fix: member editing unimplemented --- .../core/controller/CredentialController.java | 23 ++++++++------ .../huertos/client/HuertosWebClient.java | 30 ++++++++++++++++++- .../huertos/controller/MemberController.java | 9 ++++++ .../huertos/service/MemberService.java | 13 ++++++++ .../huertos/service/UserMetadataService.java | 2 +- 5 files changed, 66 insertions(+), 11 deletions(-) diff --git a/core/src/main/java/net/miarma/backend/core/controller/CredentialController.java b/core/src/main/java/net/miarma/backend/core/controller/CredentialController.java index fdb7129..7e2a9ce 100644 --- a/core/src/main/java/net/miarma/backend/core/controller/CredentialController.java +++ b/core/src/main/java/net/miarma/backend/core/controller/CredentialController.java @@ -44,14 +44,6 @@ public class CredentialController { ); } - @GetMapping("/test/{userId}") - public ResponseEntity test(@PathVariable("userId") UUID userId) { - CorePrincipal principal = (CorePrincipal) SecurityContextHolder.getContext().getAuthentication().getPrincipal(); - return ResponseEntity.ok( - userId.equals(principal.getUserId()) ? "OK" : "NO" - ); - } - @GetMapping("/user/{userId}") public ResponseEntity> getByUserId(@PathVariable("userId") UUID userId) { CorePrincipal principal = (CorePrincipal) SecurityContextHolder.getContext().getAuthentication().getPrincipal(); @@ -85,11 +77,24 @@ public class CredentialController { } return ResponseEntity.ok( CredentialMapper.toDto( - credentialService.update(credentialId, CredentialMapper.toEntity(dto)) + credentialService.update(credentialId, CredentialMapper.toEntity(dto)) ) ); } + @PutMapping("/{credential_id}/full") + @PreAuthorize("hasRole('ADMIN')") + public ResponseEntity updateFull( + @PathVariable("credential_id") UUID credentialId, + @RequestBody CredentialDto dto + ) { + return ResponseEntity.ok( + CredentialMapper.toDto( + credentialService.update(credentialId, CredentialMapper.toEntity(dto)) + ) + ); + } + @GetMapping("/{service_id}/{user_id}/status") public ResponseEntity getStatus(@PathVariable("user_id") UUID userId, @PathVariable("service_id") Byte serviceId) { return ResponseEntity.ok(credentialService.getStatus(userId, serviceId)); diff --git a/huertos/src/main/java/net/miarma/backend/huertos/client/HuertosWebClient.java b/huertos/src/main/java/net/miarma/backend/huertos/client/HuertosWebClient.java index b7650cf..427bf93 100644 --- a/huertos/src/main/java/net/miarma/backend/huertos/client/HuertosWebClient.java +++ b/huertos/src/main/java/net/miarma/backend/huertos/client/HuertosWebClient.java @@ -1,5 +1,6 @@ package net.miarma.backend.huertos.client; +import net.miarma.backend.huertos.dto.MemberDto; import net.miarma.backend.huertos.dto.RequestMetadataDto; import net.miarma.backend.huertos.model.RequestMetadata; import net.miarma.backend.huertos.util.UsernameGenerator; @@ -66,7 +67,6 @@ public class HuertosWebClient { } public UserWithCredentialDto createUser(RequestMetadataDto metadataDto) { - // 1. Crear el usuario CreateUserDto userDto = new CreateUserDto(metadataDto.displayName(), null); HttpEntity userRequestEntity = new HttpEntity<>(userDto); @@ -116,6 +116,34 @@ public class HuertosWebClient { return new UserWithCredentialDto(createdUser, createdCred); } + public void updateUser(UUID userId, UserWithCredentialDto dto) { + HttpEntity userRequestEntity = new HttpEntity<>(dto.user()); + ResponseEntity userResponse = restTemplate.exchange( + coreUrl + "/users/{user_id}", + HttpMethod.PUT, + userRequestEntity, + Void.class, + userId + ); + + if (!userResponse.getStatusCode().is2xxSuccessful()) { + handleError(userResponse); + } + + HttpEntity credRequestEntity = new HttpEntity<>(dto.account()); + ResponseEntity credResponse = restTemplate.exchange( + coreUrl + "/credentials/{credential_id}/full", + HttpMethod.PUT, + credRequestEntity, + Void.class, + dto.account().getCredentialId() + ); + + if (!credResponse.getStatusCode().is2xxSuccessful()) { + handleError(credResponse); + } + } + public void deleteUser(UUID userId) { ResponseEntity response = restTemplate.exchange( coreUrl + "/users/{user_id}", diff --git a/huertos/src/main/java/net/miarma/backend/huertos/controller/MemberController.java b/huertos/src/main/java/net/miarma/backend/huertos/controller/MemberController.java index 4a48c92..15b5995 100644 --- a/huertos/src/main/java/net/miarma/backend/huertos/controller/MemberController.java +++ b/huertos/src/main/java/net/miarma/backend/huertos/controller/MemberController.java @@ -122,4 +122,13 @@ public class MemberController { public ResponseEntity getByDni(@PathVariable("dni") String dni) { return ResponseEntity.ok(memberService.getByDni(dni)); } + + @PutMapping("/{user_id:[0-9a-fA-F\\-]{36}}") + @PreAuthorize("hasAnyRole('HUERTOS_ROLE_ADMIN', 'HUERTOS_ROLE_DEV')") + public ResponseEntity update( + @PathVariable("user_id") UUID userId, + @RequestBody MemberDto changes + ) { + return ResponseEntity.ok(memberService.update(userId, changes)); + } } \ No newline at end of file diff --git a/huertos/src/main/java/net/miarma/backend/huertos/service/MemberService.java b/huertos/src/main/java/net/miarma/backend/huertos/service/MemberService.java index 9f8666e..4b24e4d 100644 --- a/huertos/src/main/java/net/miarma/backend/huertos/service/MemberService.java +++ b/huertos/src/main/java/net/miarma/backend/huertos/service/MemberService.java @@ -8,7 +8,10 @@ import net.miarma.backend.huertos.mapper.UserMetadataMapper; import net.miarma.backend.huertos.mapper.IncomeMapper; import net.miarma.backend.huertos.mapper.view.VIncomesWithInfoMapper; + import net.miarma.backend.huertos.model.UserMetadata; import net.miarma.backend.huertos.security.NameCensorer; + import net.miarma.backlib.dto.CredentialDto; + import net.miarma.backlib.dto.UserDto; import net.miarma.backlib.dto.UserWithCredentialDto; import net.miarma.backlib.exception.NotFoundException; import org.springframework.cache.annotation.Cacheable; @@ -199,4 +202,14 @@ .map(DropdownDtoMapper::toDto) .toList(); } + + public MemberDto update(UUID userId, MemberDto changes) { + try { + huertosWebClient.updateUser(userId, new UserWithCredentialDto(changes.user(), changes.account())); + metadataService.update(userId, UserMetadataMapper.fromDto(changes.metadata())); + } catch (Exception e) { + throw new RuntimeException("No se pudo actualizar el socio"); + } + return changes; + } } diff --git a/huertos/src/main/java/net/miarma/backend/huertos/service/UserMetadataService.java b/huertos/src/main/java/net/miarma/backend/huertos/service/UserMetadataService.java index 4b18c93..eb96546 100644 --- a/huertos/src/main/java/net/miarma/backend/huertos/service/UserMetadataService.java +++ b/huertos/src/main/java/net/miarma/backend/huertos/service/UserMetadataService.java @@ -92,7 +92,7 @@ public class UserMetadataService { if (changes.getType() != null) metadata.setType(changes.getType()); if (changes.getRole() != null) metadata.setRole(changes.getRole()); if (changes.getNotes() != null) metadata.setNotes(changes.getNotes()); - if (changes.getAssignedAt() != null) metadata.setAssignedAt(changes.getAssignedAt()); + metadata.setAssignedAt(changes.getAssignedAt()); if (changes.getDeactivatedAt() != null) metadata.setDeactivatedAt(changes.getDeactivatedAt()); return repository.save(metadata);