Skip to content

Commit d0dfeb2

Browse files
committed
Merge branch 'main' of https://github.com/prgrms-web-devcourse-final-project/WEB1_1_Bongdari_BE into feature/19-get-community-board
# Conflicts: # src/main/java/com/somemore/global/exception/ExceptionMessage.java
2 parents ce7ec93 + 21e76f5 commit d0dfeb2

34 files changed

+1343
-122
lines changed

src/main/java/com/somemore/global/common/BaseEntity.java

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -33,4 +33,8 @@ public void prePersist() {
3333
this.deleted = false;
3434
}
3535
}
36+
37+
public void markAsDeleted() {
38+
this.deleted = true;
39+
}
3640
}

src/main/java/com/somemore/global/exception/ExceptionMessage.java

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,10 @@
99
public enum ExceptionMessage {
1010

1111
NOT_EXISTS_CENTER("존재하지 않는 기관 ID 입니다."),
12-
NOT_EXISTS_COMMUNITY_BOARD("삭제된 게시글 입니다.")
12+
NOT_EXISTS_COMMUNITY_BOARD("삭제된 게시글 입니다."),
13+
NOT_EXISTS_LOCATION("존재하지 않는 위치 ID 입니다."),
14+
NOT_EXISTS_RECRUIT_BOARD("존재하지 않는 봉사 모집글 ID 입니다."),
15+
UNAUTHORIZED_RECRUIT_BOARD("자신이 작성한 봉사 모집글이 아닙니다."),
1316
;
1417

1518
private final String message;

src/main/java/com/somemore/location/domain/Location.java

Lines changed: 11 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -4,12 +4,14 @@
44
import static lombok.AccessLevel.PROTECTED;
55

66
import com.somemore.global.common.BaseEntity;
7+
import com.somemore.location.dto.request.LocationUpdateRequestDto;
78
import jakarta.persistence.Column;
89
import jakarta.persistence.Entity;
910
import jakarta.persistence.GeneratedValue;
1011
import jakarta.persistence.Id;
1112
import jakarta.persistence.Table;
1213
import java.math.BigDecimal;
14+
import java.math.RoundingMode;
1315
import lombok.Builder;
1416
import lombok.Getter;
1517
import lombok.NoArgsConstructor;
@@ -36,7 +38,13 @@ public class Location extends BaseEntity {
3638
@Builder
3739
public Location(String address, BigDecimal latitude, BigDecimal longitude) {
3840
this.address = address;
39-
this.latitude = latitude;
40-
this.longitude = longitude;
41+
this.latitude = latitude.setScale(8, RoundingMode.HALF_UP);
42+
this.longitude = longitude.setScale(8, RoundingMode.HALF_UP);
4143
}
42-
}
44+
45+
public void updateWith(LocationUpdateRequestDto requestDto) {
46+
this.address = requestDto.address();
47+
this.latitude = requestDto.latitude().setScale(8, RoundingMode.HALF_UP);
48+
this.longitude = requestDto.longitude().setScale(8, RoundingMode.HALF_UP);
49+
}
50+
}
Lines changed: 31 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,31 @@
1+
package com.somemore.location.dto.request;
2+
3+
import com.fasterxml.jackson.databind.PropertyNamingStrategies.SnakeCaseStrategy;
4+
import com.fasterxml.jackson.databind.annotation.JsonNaming;
5+
import io.swagger.v3.oas.annotations.media.Schema;
6+
import jakarta.validation.constraints.DecimalMax;
7+
import jakarta.validation.constraints.DecimalMin;
8+
import jakarta.validation.constraints.NotBlank;
9+
import jakarta.validation.constraints.NotNull;
10+
import java.math.BigDecimal;
11+
import lombok.Builder;
12+
13+
@JsonNaming(SnakeCaseStrategy.class)
14+
@Builder
15+
public record LocationUpdateRequestDto(
16+
@Schema(description = "도로명 주소", example = "서울특별시 서초구 반포대로 45, 4층(서초동, 명정빌딩)")
17+
@NotBlank(message = "주소는 필수 입력 값입니다.")
18+
String address,
19+
@Schema(description = "주소에 해당하는 위도 정보", example = "37.4845373748015")
20+
@NotNull(message = "위도는 필수 입력 값입니다.")
21+
@DecimalMin(value = "33", message = "위도는 33도 이상이어야 합니다.")
22+
@DecimalMax(value = "39", message = "위도는 38도 이하이어야 합니다.")
23+
BigDecimal latitude,
24+
@Schema(description = "주소에 해당하는 경도 정보", example = "127.010842267696")
25+
@NotNull(message = "경도는 필수 입력 값입니다.")
26+
@DecimalMin(value = "124", message = "경도는 124도 이상이어야 합니다.")
27+
@DecimalMax(value = "132", message = "경도는 132도 이하이어야 합니다.")
28+
BigDecimal longitude
29+
) {
30+
31+
}

src/main/java/com/somemore/location/repository/LocationRepository.java

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,8 @@ public interface LocationRepository {
77

88
Location save(Location location);
99

10+
Location saveAndFlush(Location location);
11+
1012
Optional<Location> findById(Long id);
1113

1214
void deleteAllInBatch();

src/main/java/com/somemore/location/repository/LocationRepositoryImpl.java

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,11 @@ public Location save(Location location) {
1818
return locationJpaRepository.save(location);
1919
}
2020

21+
@Override
22+
public Location saveAndFlush(Location location) {
23+
return locationJpaRepository.saveAndFlush(location);
24+
}
25+
2126
@Override
2227
public Optional<Location> findById(Long id) {
2328
return locationJpaRepository.findById(id);
Lines changed: 30 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,30 @@
1+
package com.somemore.location.service.command;
2+
3+
import static com.somemore.global.exception.ExceptionMessage.NOT_EXISTS_LOCATION;
4+
5+
import com.somemore.global.exception.BadRequestException;
6+
import com.somemore.location.domain.Location;
7+
import com.somemore.location.dto.request.LocationUpdateRequestDto;
8+
import com.somemore.location.repository.LocationRepository;
9+
import com.somemore.location.usecase.command.UpdateLocationUseCase;
10+
import com.somemore.location.usecase.query.LocationQueryUseCase;
11+
import lombok.RequiredArgsConstructor;
12+
import org.springframework.stereotype.Service;
13+
import org.springframework.transaction.annotation.Transactional;
14+
15+
@RequiredArgsConstructor
16+
@Transactional
17+
@Service
18+
public class UpdateLocationService implements UpdateLocationUseCase {
19+
20+
private final LocationQueryUseCase locationQueryUseCase;
21+
private final LocationRepository locationRepository;
22+
23+
@Override
24+
public void updateLocation(LocationUpdateRequestDto requestDto, Long locationId) {
25+
Location location = locationQueryUseCase.findById(locationId)
26+
.orElseThrow(() -> new BadRequestException(NOT_EXISTS_LOCATION.getMessage()));
27+
location.updateWith(requestDto);
28+
locationRepository.save(location);
29+
}
30+
}
Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,23 @@
1+
package com.somemore.location.service.query;
2+
3+
import com.somemore.location.domain.Location;
4+
import com.somemore.location.repository.LocationRepository;
5+
import com.somemore.location.usecase.query.LocationQueryUseCase;
6+
import java.util.Optional;
7+
import lombok.RequiredArgsConstructor;
8+
import org.springframework.stereotype.Service;
9+
import org.springframework.transaction.annotation.Transactional;
10+
11+
@RequiredArgsConstructor
12+
@Transactional(readOnly = true)
13+
@Service
14+
public class LocationQueryService implements LocationQueryUseCase {
15+
16+
private final LocationRepository locationRepository;
17+
18+
@Override
19+
public Optional<Location> findById(Long id) {
20+
return locationRepository.findById(id);
21+
}
22+
23+
}
Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,8 @@
1+
package com.somemore.location.usecase.command;
2+
3+
import com.somemore.location.dto.request.LocationUpdateRequestDto;
4+
5+
public interface UpdateLocationUseCase {
6+
7+
void updateLocation(LocationUpdateRequestDto requestDto, Long locationId);
8+
}
Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,10 @@
1+
package com.somemore.location.usecase.query;
2+
3+
import com.somemore.location.domain.Location;
4+
import java.util.Optional;
5+
6+
public interface LocationQueryUseCase {
7+
8+
Optional<Location> findById(Long id);
9+
10+
}

0 commit comments

Comments
 (0)