Skip to content

Commit 3fef267

Browse files
authored
Merge pull request #34 from MapSee-Lab/main
๐Ÿš€ Deploy 20260223-v0.1.30
2 parents 17dd586 + 21d570b commit 3fef267

11 files changed

Lines changed: 47 additions & 27 deletions

File tree

โ€ŽMS-Common/src/main/java/kr/suhsaechan/mapsy/common/exception/constant/ErrorCode.javaโ€Ž

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -115,7 +115,7 @@ public enum ErrorCode {
115115
CANNOT_DELETE_SAVED_PLACE(HttpStatus.BAD_REQUEST, "์ž„์‹œ ์ €์žฅ๋œ ์žฅ์†Œ๋งŒ ์‚ญ์ œํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค."),
116116

117117
CANNOT_UPDATE_UNSAVED_PLACE(HttpStatus.BAD_REQUEST, "์ €์žฅ๋œ ์žฅ์†Œ๋งŒ ์ˆ˜์ •ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค."),
118-
118+
119119
INVALID_RATING(HttpStatus.BAD_REQUEST, "๋ณ„์ ์€ 1-5 ์‚ฌ์ด์˜ ๊ฐ’์ด์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค."),
120120

121121
// Folder

โ€ŽMS-Place/src/main/java/kr/suhsaechan/mapsy/place/dto/BookmarkDto.javaโ€Ž

Lines changed: 0 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -22,9 +22,6 @@ public class BookmarkDto {
2222
@Schema(description = "์žฅ์†Œ ์ •๋ณด")
2323
private PlaceDto place;
2424

25-
@Schema(description = "ํด๋”๋ช…", example = "๊ฐ€๊ณ  ์‹ถ์€ ๊ณณ")
26-
private String folder;
27-
2825
@Schema(description = "๋ฉ”๋ชจ", example = "์นœ๊ตฌ๋ž‘ ๊ฐ™์ด ๊ฐ€๊ธฐ")
2926
private String memo;
3027

@@ -48,7 +45,6 @@ public static BookmarkDto from(MemberPlace memberPlace) {
4845
return BookmarkDto.builder()
4946
.memberPlaceId(memberPlace.getId())
5047
.place(PlaceDto.from(memberPlace.getPlace()))
51-
.folder(memberPlace.getFolder())
5248
.memo(memberPlace.getMemo())
5349
.rating(memberPlace.getRating())
5450
.visited(memberPlace.getVisited())

โ€ŽMS-Place/src/main/java/kr/suhsaechan/mapsy/place/dto/UpdateBookmarkRequest.javaโ€Ž

Lines changed: 0 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -14,9 +14,6 @@
1414
@Schema(description = "๋ถ๋งˆํฌ ์ˆ˜์ • ์š”์ฒญ")
1515
public class UpdateBookmarkRequest {
1616

17-
@Schema(description = "ํด๋”๋ช… (null์ด๋ฉด ๋ณ€๊ฒฝํ•˜์ง€ ์•Š์Œ)", example = "๊ฐ€๊ณ  ์‹ถ์€ ๊ณณ")
18-
private String folder;
19-
2017
@Schema(description = "๋ฉ”๋ชจ (null์ด๋ฉด ๋ณ€๊ฒฝํ•˜์ง€ ์•Š์Œ)", example = "์นœ๊ตฌ๋ž‘ ๊ฐ™์ด ๊ฐ€๊ธฐ")
2118
private String memo;
2219

โ€ŽMS-Place/src/main/java/kr/suhsaechan/mapsy/place/entity/Folder.javaโ€Ž

Lines changed: 8 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -19,12 +19,10 @@
1919
import lombok.Builder;
2020
import lombok.Getter;
2121
import lombok.NoArgsConstructor;
22-
import lombok.Setter;
2322

2423
@Entity
2524
@Builder
2625
@Getter
27-
@Setter
2826
@NoArgsConstructor(access = AccessLevel.PROTECTED)
2927
@AllArgsConstructor(access = AccessLevel.PRIVATE)
3028
public class Folder extends SoftDeletableBaseEntity {
@@ -56,6 +54,14 @@ public class Folder extends SoftDeletableBaseEntity {
5654
@Builder.Default
5755
private Boolean isDefault = false;
5856

57+
public void updateName(String name) {
58+
this.name = name;
59+
}
60+
61+
public void updateVisibility(FolderVisibility visibility) {
62+
this.visibility = visibility;
63+
}
64+
5965
@PrePersist
6066
protected void onCreate() {
6167
if (name == null) {

โ€ŽMS-Place/src/main/java/kr/suhsaechan/mapsy/place/repository/FolderPlaceRepository.javaโ€Ž

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,8 @@ public interface FolderPlaceRepository extends JpaRepository<FolderPlace, UUID>
2323

2424
Optional<FolderPlace> findByFolderAndPlaceAndDeletedAtIsNull(Folder folder, Place place);
2525

26+
Optional<FolderPlace> findByFolderAndPlace(Folder folder, Place place);
27+
2628
boolean existsByFolderAndPlaceAndDeletedAtIsNull(Folder folder, Place place);
2729

2830
List<FolderPlace> findByFolderAndDeletedAtIsNull(Folder folder);

โ€ŽMS-Place/src/main/java/kr/suhsaechan/mapsy/place/service/FolderService.javaโ€Ž

Lines changed: 30 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,7 @@
2222
import kr.suhsaechan.mapsy.place.repository.FolderRepository;
2323
import kr.suhsaechan.mapsy.place.repository.PlaceRepository;
2424
import java.util.List;
25+
import java.util.Optional;
2526
import java.util.UUID;
2627
import java.util.stream.Collectors;
2728
import lombok.RequiredArgsConstructor;
@@ -84,10 +85,10 @@ public UpdateFolderResponse updateFolder(Member member, UUID folderId, UpdateFol
8485
Folder folder = getFolderWithOwnerValidation(folderId, member);
8586

8687
if (request.getName() != null) {
87-
folder.setName(request.getName());
88+
folder.updateName(request.getName());
8889
}
8990
if (request.getVisibility() != null) {
90-
folder.setVisibility(request.getVisibility());
91+
folder.updateVisibility(request.getVisibility());
9192
}
9293

9394
Folder savedFolder = folderRepository.save(folder);
@@ -151,9 +152,20 @@ public AddFolderPlaceResponse addPlaceToFolder(Member member, UUID folderId, Add
151152
Place place = placeRepository.findById(request.getPlaceId())
152153
.orElseThrow(() -> new CustomException(ErrorCode.PLACE_NOT_FOUND));
153154

154-
// ์ค‘๋ณต ์ฒดํฌ
155-
if (folderPlaceRepository.existsByFolderAndPlaceAndDeletedAtIsNull(folder, place)) {
156-
throw new CustomException(ErrorCode.FOLDER_PLACE_ALREADY_EXISTS);
155+
// ๊ธฐ์กด ๋ ˆ์ฝ”๋“œ ์กฐํšŒ (Soft Delete ํฌํ•จ)
156+
Optional<FolderPlace> existingFolderPlace = folderPlaceRepository.findByFolderAndPlace(folder, place);
157+
158+
if (existingFolderPlace.isPresent()) {
159+
FolderPlace fp = existingFolderPlace.get();
160+
if (fp.isActive()) {
161+
// ์ด๋ฏธ ํ™œ์„ฑ ์ƒํƒœ๋ฉด ์ค‘๋ณต ์—๋Ÿฌ
162+
throw new CustomException(ErrorCode.FOLDER_PLACE_ALREADY_EXISTS);
163+
}
164+
// Soft Delete๋œ ๋ ˆ์ฝ”๋“œ ๋ณต์›
165+
fp.restore();
166+
FolderPlace restoredFolderPlace = folderPlaceRepository.save(fp);
167+
log.info("Place restored to folder: folderPlaceId={}", restoredFolderPlace.getId());
168+
return AddFolderPlaceResponse.from(restoredFolderPlace);
157169
}
158170

159171
int maxPosition = folderPlaceRepository.findMaxPositionByFolder(folder);
@@ -211,9 +223,19 @@ public void addPlaceToDefaultFolder(Member member, Place place) {
211223
Folder defaultFolder = folderRepository.findByOwnerAndIsDefaultTrueAndDeletedAtIsNull(member)
212224
.orElseGet(() -> createDefaultFolder(member));
213225

214-
// ์ด๋ฏธ ๊ธฐ๋ณธ ํด๋”์— ์žˆ์œผ๋ฉด ์Šคํ‚ต
215-
if (folderPlaceRepository.existsByFolderAndPlaceAndDeletedAtIsNull(defaultFolder, place)) {
216-
log.debug("Place already in default folder: placeId={}", place.getId());
226+
// ๊ธฐ์กด ๋ ˆ์ฝ”๋“œ ์กฐํšŒ (Soft Delete ํฌํ•จ)
227+
Optional<FolderPlace> existingFolderPlace = folderPlaceRepository.findByFolderAndPlace(defaultFolder, place);
228+
229+
if (existingFolderPlace.isPresent()) {
230+
FolderPlace fp = existingFolderPlace.get();
231+
if (fp.isActive()) {
232+
log.debug("Place already in default folder: placeId={}", place.getId());
233+
return;
234+
}
235+
// Soft Delete๋œ ๋ ˆ์ฝ”๋“œ ๋ณต์›
236+
fp.restore();
237+
folderPlaceRepository.save(fp);
238+
log.info("Place restored to default folder: placeId={}", place.getId());
217239
return;
218240
}
219241

โ€ŽMS-Place/src/main/java/kr/suhsaechan/mapsy/place/service/MemberPlaceService.javaโ€Ž

Lines changed: 0 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -266,9 +266,6 @@ public BookmarkDto updateBookmark(UUID memberId, UUID memberPlaceId, UpdateBookm
266266
}
267267

268268
// 3. ํ•„๋“œ๋ณ„ ์ˆ˜์ • (null์ด ์•„๋‹Œ ๊ฒฝ์šฐ๋งŒ)
269-
if (request.getFolder() != null) {
270-
memberPlace.updateFolder(request.getFolder());
271-
}
272269
if (request.getMemo() != null) {
273270
memberPlace.updateMemo(request.getMemo());
274271
}

โ€ŽMS-Web/src/main/java/kr/suhsaechan/mapsy/web/controller/FolderController.javaโ€Ž

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -96,7 +96,7 @@ public ResponseEntity<GetFolderPlacesResponse> getFolderPlaces(
9696
public ResponseEntity<AddFolderPlaceResponse> addPlaceToFolder(
9797
@AuthenticationPrincipal CustomUserDetails userDetails,
9898
@PathVariable UUID folderId,
99-
@RequestBody AddFolderPlaceRequest request
99+
@Valid @RequestBody AddFolderPlaceRequest request
100100
) {
101101
log.info("Add place to folder request from member: {}, folderId: {}, placeId: {}",
102102
userDetails.getMemberId(), folderId, request.getPlaceId());

โ€ŽREADME.mdโ€Ž

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22

33
<!-- ์ˆ˜์ •ํ•˜์ง€๋งˆ์„ธ์š” ์ž๋™์œผ๋กœ ๋™๊ธฐํ™” ๋ฉ๋‹ˆ๋‹ค -->
44
<!-- AUTO-VERSION-SECTION: DO NOT EDIT MANUALLY -->
5-
## ์ตœ์‹  ๋ฒ„์ „ : v0.1.28 (2026-02-23)
5+
## ์ตœ์‹  ๋ฒ„์ „ : v0.1.29 (2026-02-23)
66

77
[์ „์ฒด ๋ฒ„์ „ ๊ธฐ๋ก ๋ณด๊ธฐ](CHANGELOG.md)
88

โ€Žbuild.gradleโ€Ž

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,7 @@ bootJar {
1010

1111
allprojects {
1212
group = 'kr.suhsaechan.mapsy'
13-
version = '0.1.29'
13+
version = '0.1.30'
1414

1515
repositories {
1616
mavenCentral()

0 commit comments

Comments
ย (0)