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; } 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; } 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; + } + } } 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(); } 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();