From 296c2d2cb106b0f375a679890392a8449d8b72e5 Mon Sep 17 00:00:00 2001 From: Coldot <41678750+Coldot@users.noreply.github.com> Date: Fri, 18 Jul 2025 22:39:10 +0900 Subject: [PATCH 1/5] Add null checks for UUID conversion methods in UUIDHelper --- .../com/example/gp_backend_data/utils/UUIDHelper.java | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/src/main/java/com/example/gp_backend_data/utils/UUIDHelper.java b/src/main/java/com/example/gp_backend_data/utils/UUIDHelper.java index 2da7b33..733884d 100644 --- a/src/main/java/com/example/gp_backend_data/utils/UUIDHelper.java +++ b/src/main/java/com/example/gp_backend_data/utils/UUIDHelper.java @@ -8,6 +8,10 @@ @Component public class UUIDHelper { public byte[] convertUUIDToByteArray(UUID uuid) { + if (uuid == null) { + return null; + } + ByteBuffer bb = ByteBuffer.wrap(new byte[16]); bb.putLong(uuid.getMostSignificantBits()); bb.putLong(uuid.getLeastSignificantBits()); @@ -15,6 +19,10 @@ public byte[] convertUUIDToByteArray(UUID uuid) { } public UUID convertByteArrayToUUID(byte[] bytes) { + if (bytes == null) { + return null; + } + ByteBuffer byteBuffer = ByteBuffer.wrap(bytes); long high = byteBuffer.getLong(); long low = byteBuffer.getLong(); From 9ea30a6d3dad77011c26dffd71291202776733ce Mon Sep 17 00:00:00 2001 From: Coldot <41678750+Coldot@users.noreply.github.com> Date: Fri, 18 Jul 2025 22:39:38 +0900 Subject: [PATCH 2/5] feat: Enhance SpaceService to support sharing functionality --- .../space/service/SpaceService.java | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/src/main/java/com/example/gp_backend_data/space/service/SpaceService.java b/src/main/java/com/example/gp_backend_data/space/service/SpaceService.java index 325c40d..87a0eac 100644 --- a/src/main/java/com/example/gp_backend_data/space/service/SpaceService.java +++ b/src/main/java/com/example/gp_backend_data/space/service/SpaceService.java @@ -52,6 +52,8 @@ public List getSpaces(UUID userId, String sortBy){ .title(space.getTitle()) .createdAt(space.getCreatedAt()) .lastVisitedAt(space.getLastVisitedAt()) + .isShared(space.isShared()) + .sharingId(uuidHelper.convertByteArrayToUUID(space.getSharingId())) .build()) .toList(); } @@ -61,7 +63,15 @@ public SpaceResponse updateSpace(UUID userId, UUID spaceId, SpaceUpdateRequest r Space space = spaceRepository.findBySpaceIdAndUserId(uuidHelper.convertUUIDToByteArray(spaceId), uuidHelper.convertUUIDToByteArray(userId)) .orElseThrow(() -> new RuntimeException("Space not found")); - space.updateTitle(request.getTitle()); + if (request.getTitle() != null) { + space.updateTitle(request.getTitle()); + } + + if (request.getIsShared() != null) { + // `isShared` 여부에 따라 sharingId 자동 할당됨 + space.updateSharingStatusWithId(request.getIsShared(), uuidHelper); + } + space = spaceRepository.saveAndFlush(space); return SpaceResponse.builder() @@ -69,6 +79,8 @@ public SpaceResponse updateSpace(UUID userId, UUID spaceId, SpaceUpdateRequest r .title(space.getTitle()) .createdAt(space.getCreatedAt()) .lastVisitedAt(space.getLastVisitedAt()) + .isShared(space.isShared()) + .sharingId(uuidHelper.convertByteArrayToUUID(space.getSharingId())) .build(); } From 4b472bed94712f1ee53225c0629eaade57a748b0 Mon Sep 17 00:00:00 2001 From: Coldot <41678750+Coldot@users.noreply.github.com> Date: Fri, 18 Jul 2025 22:39:49 +0900 Subject: [PATCH 3/5] feat: Add sharing functionality to Space entity --- .../space/domain/entity/Space.java | 23 +++++++++++++++++-- 1 file changed, 21 insertions(+), 2 deletions(-) diff --git a/src/main/java/com/example/gp_backend_data/space/domain/entity/Space.java b/src/main/java/com/example/gp_backend_data/space/domain/entity/Space.java index 6930322..e229e5e 100644 --- a/src/main/java/com/example/gp_backend_data/space/domain/entity/Space.java +++ b/src/main/java/com/example/gp_backend_data/space/domain/entity/Space.java @@ -1,10 +1,10 @@ package com.example.gp_backend_data.space.domain.entity; +import com.example.gp_backend_data.utils.UUIDHelper; import jakarta.persistence.*; import lombok.*; +import org.hibernate.annotations.ColumnDefault; import org.hibernate.annotations.CreationTimestamp; -import org.hibernate.annotations.JdbcTypeCode; -import org.hibernate.type.SqlTypes; import java.time.LocalDateTime; import java.util.UUID; @@ -36,8 +36,27 @@ public class Space { @Column(name = "last_visited_at", nullable = false) private LocalDateTime lastVisitedAt; + @Column(name = "is_shared", nullable = false) + @ColumnDefault("false") + @Builder.Default + private boolean isShared = false; + + @Column(name = "sharing_id", nullable = true, unique = true) + private byte[] sharingId; + public void updateTitle(String title) { this.title = title; this.lastVisitedAt = LocalDateTime.now(); } + + public void updateSharingStatusWithId(boolean isShared, UUIDHelper uuidHelper) { + this.isShared = isShared; + this.lastVisitedAt = LocalDateTime.now(); + + if (isShared && this.sharingId == null) { + this.sharingId = uuidHelper.convertUUIDToByteArray(UUID.randomUUID()); + } else if (!isShared) { + this.sharingId = null; + } + } } From b7482a9018d9a8342593027c828e7564f1b4c79d Mon Sep 17 00:00:00 2001 From: Coldot <41678750+Coldot@users.noreply.github.com> Date: Fri, 18 Jul 2025 22:39:53 +0900 Subject: [PATCH 4/5] feat: Add isShared property to SpaceResponse for sharing functionality --- .../space/domain/dto/response/SpaceResponse.java | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/src/main/java/com/example/gp_backend_data/space/domain/dto/response/SpaceResponse.java b/src/main/java/com/example/gp_backend_data/space/domain/dto/response/SpaceResponse.java index 99b8396..cdde1ab 100644 --- a/src/main/java/com/example/gp_backend_data/space/domain/dto/response/SpaceResponse.java +++ b/src/main/java/com/example/gp_backend_data/space/domain/dto/response/SpaceResponse.java @@ -1,5 +1,6 @@ package com.example.gp_backend_data.space.domain.dto.response; +import com.fasterxml.jackson.annotation.JsonProperty; import lombok.*; import java.time.LocalDateTime; @@ -15,4 +16,7 @@ public class SpaceResponse { private String title; private LocalDateTime createdAt; private LocalDateTime lastVisitedAt; + @JsonProperty("isShared") + private boolean isShared; + private UUID sharingId; } From 9cb3407e74aec9873570c6342eb2de3d4c831170 Mon Sep 17 00:00:00 2001 From: Coldot <41678750+Coldot@users.noreply.github.com> Date: Fri, 18 Jul 2025 22:39:59 +0900 Subject: [PATCH 5/5] feat: Add isShared property to SpaceUpdateRequest for sharing functionality --- .../space/domain/dto/request/SpaceUpdateRequest.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/java/com/example/gp_backend_data/space/domain/dto/request/SpaceUpdateRequest.java b/src/main/java/com/example/gp_backend_data/space/domain/dto/request/SpaceUpdateRequest.java index abc98dd..43d458d 100644 --- a/src/main/java/com/example/gp_backend_data/space/domain/dto/request/SpaceUpdateRequest.java +++ b/src/main/java/com/example/gp_backend_data/space/domain/dto/request/SpaceUpdateRequest.java @@ -11,5 +11,5 @@ @AllArgsConstructor public class SpaceUpdateRequest { private String title; - + private Boolean isShared; }