From cbcff68be78e449fcf8deea8f8ca370fe154ed39 Mon Sep 17 00:00:00 2001 From: leegwichan Date: Mon, 11 Aug 2025 16:15:07 +0900 Subject: [PATCH 1/4] =?UTF-8?q?feat:=20=EC=84=9C=EC=9A=B8=EC=9D=84=20?= =?UTF-8?q?=EA=B8=B0=EC=A4=80=EC=9C=BC=EB=A1=9C=20=ED=95=9C=20District=20e?= =?UTF-8?q?num=20=EA=B5=AC=ED=98=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../java/eatda/domain/store/District.java | 49 +++++++++++++++++++ .../java/eatda/domain/store/DistrictTest.java | 35 +++++++++++++ 2 files changed, 84 insertions(+) create mode 100644 src/main/java/eatda/domain/store/District.java create mode 100644 src/test/java/eatda/domain/store/DistrictTest.java diff --git a/src/main/java/eatda/domain/store/District.java b/src/main/java/eatda/domain/store/District.java new file mode 100644 index 00000000..d4f86b95 --- /dev/null +++ b/src/main/java/eatda/domain/store/District.java @@ -0,0 +1,49 @@ +package eatda.domain.store; + +import java.util.Arrays; +import lombok.Getter; + +@Getter +public enum District { + + GANGNAM("강남구"), + GANGDONG("강동구"), + GANGBUK("강북구"), + GANGSEO("강서구"), + GWANAK("관악구"), + GWANGJIN("광진구"), + GURO("구로구"), + GEUMCHEON("금천구"), + NOWON("노원구"), + DOBONG("도봉구"), + DONGDAEMUN("동대문구"), + DONGJAK("동작구"), + MAPO("마포구"), + SEODAEMUN("서대문구"), + SEOCHO("서초구"), + SEONGDONG("성동구"), + SEONGBUK("성북구"), + SONGPA("송파구"), + YANGCHEON("양천구"), + YEONGDEUNGPO("영등포구"), + YONGSAN("용산구"), + EUNPYEONG("은평구"), + JONGNO("종로구"), + JUNG("중구"), + JUNGNANG("중랑구"), + ETC("기타"), + ; + + private final String name; + + District(String name) { + this.name = name; + } + + public static District fromName(String name) { + return Arrays.stream(District.values()) + .filter(district -> district.name.equals(name)) + .findFirst() + .orElse(ETC); + } +} diff --git a/src/test/java/eatda/domain/store/DistrictTest.java b/src/test/java/eatda/domain/store/DistrictTest.java new file mode 100644 index 00000000..1fc529cb --- /dev/null +++ b/src/test/java/eatda/domain/store/DistrictTest.java @@ -0,0 +1,35 @@ +package eatda.domain.store; + +import static org.assertj.core.api.Assertions.assertThat; + +import org.junit.jupiter.api.Nested; +import org.junit.jupiter.params.ParameterizedTest; +import org.junit.jupiter.params.provider.CsvSource; +import org.junit.jupiter.params.provider.ValueSource; + +class DistrictTest { + + @Nested + class FromName { + + @CsvSource({"강남구, GANGNAM", "강동구, GANGDONG", "강북구, GANGBUK", "강서구, GANGSEO", "관악구, GWANAK", + "광진구, GWANGJIN", "구로구, GURO", "금천구, GEUMCHEON", "노원구, NOWON", "도봉구, DOBONG", + "동대문구, DONGDAEMUN", "동작구, DONGJAK", "마포구, MAPO", "서대문구, SEODAEMUN", "서초구, SEOCHO", + "성동구, SEONGDONG", "성북구, SEONGBUK", "송파구, SONGPA", "양천구, YANGCHEON", "영등포구, YEONGDEUNGPO", + "용산구, YONGSAN", "은평구, EUNPYEONG", "종로구, JONGNO", "중구, JUNG", "중랑구, JUNGNANG"}) + @ParameterizedTest + void 구_이름을_통해_해당_구를_반환한다(String name, District expected) { + District actual = District.fromName(name); + + assertThat(actual).isEqualTo(expected); + } + + @ValueSource(strings = {"서구", "사사구", "기구", ""}) + @ParameterizedTest + void 구_이름이_존재하지_않으면_ETC를_반환한다(String name) { + District actual = District.fromName(name); + + assertThat(actual).isEqualTo(District.ETC); + } + } +} From 431d0e4b74ae2186f248dd1e423f0334ab7f691e Mon Sep 17 00:00:00 2001 From: leegwichan Date: Mon, 11 Aug 2025 16:16:06 +0900 Subject: [PATCH 2/4] =?UTF-8?q?feat:=20MapClient=20=EC=9D=98=20=EC=9D=91?= =?UTF-8?q?=EB=8B=B5=EC=9D=84=20=ED=86=B5=ED=95=B4=20District=20=ED=8C=90?= =?UTF-8?q?=EB=8B=A8=20=EB=A1=9C=EC=A7=81=20=EA=B5=AC=ED=98=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../map/MapClientStoreSearchResult.java | 24 +++++----- .../map/MapClientStoreSearchResultTest.java | 45 +++++++++++++++++++ 2 files changed, 56 insertions(+), 13 deletions(-) diff --git a/src/main/java/eatda/client/map/MapClientStoreSearchResult.java b/src/main/java/eatda/client/map/MapClientStoreSearchResult.java index 06490b6f..296ceb6b 100644 --- a/src/main/java/eatda/client/map/MapClientStoreSearchResult.java +++ b/src/main/java/eatda/client/map/MapClientStoreSearchResult.java @@ -2,7 +2,7 @@ import com.fasterxml.jackson.annotation.JsonIgnoreProperties; import com.fasterxml.jackson.annotation.JsonProperty; -import eatda.domain.store.Store; +import eatda.domain.store.District; import eatda.domain.store.StoreCategory; import eatda.domain.store.StoreSearchResult; import java.util.Map; @@ -29,6 +29,7 @@ public record MapClientStoreSearchResult( "음식점 > 카페", StoreCategory.CAFE, "음식점 > 간식 > 제과,베이커리", StoreCategory.CAFE ); + private static final District DEFAULT_DISTRICT = District.ETC; public boolean isFoodStore() { return "FD6".equals(categoryGroupCode); @@ -54,18 +55,15 @@ public StoreCategory getStoreCategory() { .orElse(StoreCategory.OTHER); } - public Store toStore() { - return Store.builder() - .kakaoId(kakaoId) - .category(getStoreCategory()) - .phoneNumber(phoneNumber) - .name(name) - .placeUrl(placeUrl) - .roadAddress(roadAddress) - .lotNumberAddress(lotNumberAddress) - .latitude(latitude) - .longitude(longitude) - .build(); + public District getDistrict() { + if (lotNumberAddress == null || lotNumberAddress.isBlank()) { + return DEFAULT_DISTRICT; + } + String[] addressParts = lotNumberAddress.split(" "); + if (addressParts.length < 2) { + return DEFAULT_DISTRICT; + } + return District.fromName(addressParts[1]); } public StoreSearchResult toDomain() { diff --git a/src/test/java/eatda/client/map/MapClientStoreSearchResultTest.java b/src/test/java/eatda/client/map/MapClientStoreSearchResultTest.java index 947815b7..5ee172ec 100644 --- a/src/test/java/eatda/client/map/MapClientStoreSearchResultTest.java +++ b/src/test/java/eatda/client/map/MapClientStoreSearchResultTest.java @@ -5,6 +5,9 @@ import eatda.domain.store.StoreCategory; import org.junit.jupiter.api.Nested; import org.junit.jupiter.api.Test; +import org.junit.jupiter.params.ParameterizedTest; +import org.junit.jupiter.params.provider.NullAndEmptySource; +import org.junit.jupiter.params.provider.ValueSource; class MapClientStoreSearchResultTest { @@ -49,4 +52,46 @@ class GetStoreCategory { assertThat(category).isEqualTo(StoreCategory.OTHER); } } + + @Nested + class GetDistrict { + + @Test + void 제공된_지번_주소에_따라_해당_구를_반환한다() { + MapClientStoreSearchResult store = new MapClientStoreSearchResult( + "1062153333", + "FD6", + "음식점 > 한식 > 순대", + "02-755-5232", + "농민백암순대 시청직영점", + "http://place.map.kakao.com/1062153333", + "서울 중구 북창동 19-4", + "서울 중구 남대문로1길 33", + 37.56259825108099, + 126.97715943361476 + ); + + assertThat(store.getDistrict()).isEqualTo(eatda.domain.store.District.JUNG); + } + + @ValueSource(strings = {" ", "\t", "이것은 주소가 아닙니다.", "empty"}) + @NullAndEmptySource + @ParameterizedTest + void 지번_주소가_정해진_형식이_아니면_ETC를_반환한다(String lotNumberAddress) { + MapClientStoreSearchResult store = new MapClientStoreSearchResult( + "1062153333", + "FD6", + "음식점 > 한식 > 순대", + "02-755-5232", + "농민백암순대 시청직영점", + "http://place.map.kakao.com/1062153333", + lotNumberAddress, + null, + 37.56259825108099, + 126.97715943361476 + ); + + assertThat(store.getDistrict()).isEqualTo(eatda.domain.store.District.ETC); + } + } } From dbb1f994158599612b09dc18eeac291ed623e5d2 Mon Sep 17 00:00:00 2001 From: leegwichan Date: Mon, 11 Aug 2025 16:21:09 +0900 Subject: [PATCH 3/4] =?UTF-8?q?feat:=20StoreSearchResult=20=EC=97=90?= =?UTF-8?q?=EC=84=9C=20District=20=EC=A0=95=EB=B3=B4=EB=A5=BC=20=EA=B4=80?= =?UTF-8?q?=EB=A6=AC=ED=95=98=EB=8F=84=EB=A1=9D=20=EA=B5=AC=ED=98=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../eatda/client/map/MapClientStoreSearchResult.java | 1 + .../java/eatda/domain/store/StoreSearchResult.java | 1 + .../java/eatda/document/store/StoreDocumentTest.java | 6 ++++-- .../java/eatda/service/cheer/CheerServiceTest.java | 11 ++++++----- .../java/eatda/service/story/StoryServiceTest.java | 3 ++- 5 files changed, 14 insertions(+), 8 deletions(-) diff --git a/src/main/java/eatda/client/map/MapClientStoreSearchResult.java b/src/main/java/eatda/client/map/MapClientStoreSearchResult.java index 296ceb6b..a749d283 100644 --- a/src/main/java/eatda/client/map/MapClientStoreSearchResult.java +++ b/src/main/java/eatda/client/map/MapClientStoreSearchResult.java @@ -75,6 +75,7 @@ public StoreSearchResult toDomain() { placeUrl, lotNumberAddress, roadAddress, + getDistrict(), latitude, longitude ); diff --git a/src/main/java/eatda/domain/store/StoreSearchResult.java b/src/main/java/eatda/domain/store/StoreSearchResult.java index 69fa50e9..7d96e39c 100644 --- a/src/main/java/eatda/domain/store/StoreSearchResult.java +++ b/src/main/java/eatda/domain/store/StoreSearchResult.java @@ -8,6 +8,7 @@ public record StoreSearchResult( String placeUrl, String lotNumberAddress, String roadAddress, + District district, double latitude, double longitude ) { diff --git a/src/test/java/eatda/document/store/StoreDocumentTest.java b/src/test/java/eatda/document/store/StoreDocumentTest.java index 5a4d000a..905343c1 100644 --- a/src/test/java/eatda/document/store/StoreDocumentTest.java +++ b/src/test/java/eatda/document/store/StoreDocumentTest.java @@ -20,6 +20,7 @@ import eatda.document.RestDocsRequest; import eatda.document.RestDocsResponse; import eatda.document.Tag; +import eatda.domain.store.District; import eatda.domain.store.StoreCategory; import eatda.domain.store.StoreSearchResult; import eatda.exception.BusinessErrorCode; @@ -242,9 +243,10 @@ class SearchStores { String query = "농민백암순대"; List responses = List.of( new StoreSearchResult("123", StoreCategory.KOREAN, "010-1234-1234", "농민백암순대 본점", - "https://yap.co.kr", "서울 강남구 대치동 896-33", "서울 강남구 선릉로86길 40-4", 37.0d, 128.0d), + "https://yap.co.kr", "서울 강남구 대치동 896-33", "서울 강남구 선릉로86길 40-4", District.GANGNAM, + 37.0d, 128.0d), new StoreSearchResult("456", StoreCategory.KOREAN, "010-1234-1234", "농민백암순대 시청점", - "https://yapp.kr", "서울 중구 북창동 19-4", null, 37.0d, 128.0d) + "https://yapp.kr", "서울 중구 북창동 19-4", null, District.JUNG, 37.0d, 128.0d) ); doReturn(responses).when(storeSearchService).searchStores(anyString()); diff --git a/src/test/java/eatda/service/cheer/CheerServiceTest.java b/src/test/java/eatda/service/cheer/CheerServiceTest.java index 919d0b7c..d595d286 100644 --- a/src/test/java/eatda/service/cheer/CheerServiceTest.java +++ b/src/test/java/eatda/service/cheer/CheerServiceTest.java @@ -11,6 +11,7 @@ import eatda.domain.ImageKey; import eatda.domain.cheer.Cheer; import eatda.domain.member.Member; +import eatda.domain.store.District; import eatda.domain.store.Store; import eatda.domain.store.StoreCategory; import eatda.domain.store.StoreSearchResult; @@ -43,7 +44,7 @@ class RegisterCheer { CheerRegisterRequest request = new CheerRegisterRequest("123", "농민백암순대 본점", "추가 응원"); StoreSearchResult result = new StoreSearchResult( "123", StoreCategory.KOREAN, "02-755-5232", "농민백암순대 본점", "http://place.map.kakao.com/123", - "서울시 강남구 역삼동 123-45", "서울시 강남구 역삼동 123-45", 37.5665, 126.9780); + "서울시 강남구 역삼동 123-45", "서울시 강남구 역삼동 123-45", District.GANGNAM, 37.5665, 126.9780); ImageKey imageKey = new ImageKey("image-key"); BusinessException exception = assertThrows(BusinessException.class, @@ -61,7 +62,7 @@ class RegisterCheer { CheerRegisterRequest request = new CheerRegisterRequest("123", "농민백암순대 본점", "추가 응원"); StoreSearchResult result = new StoreSearchResult( "123", StoreCategory.KOREAN, "02-755-5232", "농민백암순대 본점", "http://place.map.kakao.com/123", - "서울시 강남구 역삼동 123-45", "서울시 강남구 역삼동 123-45", 37.5665, 126.9780); + "서울시 강남구 역삼동 123-45", "서울시 강남구 역삼동 123-45", District.GANGNAM, 37.5665, 126.9780); ImageKey imageKey = new ImageKey("image-key"); BusinessException exception = assertThrows(BusinessException.class, @@ -77,7 +78,7 @@ class RegisterCheer { CheerRegisterRequest request = new CheerRegisterRequest("123", "농민백암순대 본점", "맛있어요!"); StoreSearchResult result = new StoreSearchResult( "123", StoreCategory.KOREAN, "02-755-5232", "농민백암순대 본점", "http://place.map.kakao.com/123", - "서울시 강남구 역삼동 123-45", "서울시 강남구 역삼동 123-45", 37.5665, 126.9780); + "서울시 강남구 역삼동 123-45", "서울시 강남구 역삼동 123-45", District.GANGNAM, 37.5665, 126.9780); ImageKey imageKey = new ImageKey("image-key"); CheerResponse response = cheerService.registerCheer(request, result, imageKey, member.getId()); @@ -98,7 +99,7 @@ class RegisterCheer { CheerRegisterRequest request = new CheerRegisterRequest("123", "농민백암순대 본점", "맛있어요!"); StoreSearchResult result = new StoreSearchResult( "123", StoreCategory.KOREAN, "02-755-5232", "농민백암순대 본점", "http://place.map.kakao.com/123", - "서울시 강남구 역삼동 123-45", "서울시 강남구 역삼동 123-45", 37.5665, 126.9780); + "서울시 강남구 역삼동 123-45", "서울시 강남구 역삼동 123-45", District.GANGNAM, 37.5665, 126.9780); ImageKey imageKey = new ImageKey("image-key"); CheerResponse response = cheerService.registerCheer(request, result, imageKey, member.getId()); @@ -119,7 +120,7 @@ class RegisterCheer { CheerRegisterRequest request = new CheerRegisterRequest("123", "농민백암순대 본점", "맛있어요!"); StoreSearchResult result = new StoreSearchResult( "123", StoreCategory.KOREAN, "02-755-5232", "농민백암순대 본점", "http://place.map.kakao.com/123", - "서울시 강남구 역삼동 123-45", "서울시 강남구 역삼동 123-45", 37.5665, 126.9780); + "서울시 강남구 역삼동 123-45", "서울시 강남구 역삼동 123-45", District.GANGNAM, 37.5665, 126.9780); ImageKey imageKey = new ImageKey(null); CheerResponse response = cheerService.registerCheer(request, result, imageKey, member.getId()); diff --git a/src/test/java/eatda/service/story/StoryServiceTest.java b/src/test/java/eatda/service/story/StoryServiceTest.java index 30a5fcbf..5a1f2b2f 100644 --- a/src/test/java/eatda/service/story/StoryServiceTest.java +++ b/src/test/java/eatda/service/story/StoryServiceTest.java @@ -12,6 +12,7 @@ import eatda.controller.story.StoryResponse; import eatda.domain.ImageKey; import eatda.domain.member.Member; +import eatda.domain.store.District; import eatda.domain.store.Store; import eatda.domain.store.StoreCategory; import eatda.domain.store.StoreSearchResult; @@ -38,7 +39,7 @@ class RegisterStory { StoryRegisterRequest request = new StoryRegisterRequest("곱창", "123", "미쳤다 여기"); StoreSearchResult result = new StoreSearchResult( "123", StoreCategory.KOREAN, "02-755-5232", "곱창", "http://place.map.kakao.com/123", - "서울시 강남구 사사로 3길 12-24", "서울시 강남구 역삼동 123-45", 37.5665, 126.9780); + "서울시 강남구 사사로 3길 12-24", "서울시 강남구 역삼동 123-45", District.GANGNAM, 37.5665, 126.9780); ImageKey imageKey = new ImageKey("image-key"); StoryRegisterResponse response = storyService.registerStory(request, result, imageKey, member.getId()); From 2567bc6eb3a59f2de77a578c364c06c59744f90c Mon Sep 17 00:00:00 2001 From: leegwichan Date: Mon, 11 Aug 2025 16:43:48 +0900 Subject: [PATCH 4/4] =?UTF-8?q?feat:=20Store=20=ED=85=8C=EC=9D=B4=EB=B8=94?= =?UTF-8?q?=EC=97=90=20District=20=EB=8F=84=EC=9E=85?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/java/eatda/domain/store/Store.java | 12 +++++++----- .../eatda/domain/store/StoreSearchResult.java | 1 + src/main/resources/db/migration/V1__init.sql | 1 + .../db/seed/dev/V2__dev_init_data.sql | 18 +++++++++--------- .../db/seed/local/V2__local_init_data.sql | 18 +++++++++--------- .../controller/cheer/CheerControllerTest.java | 5 +++-- .../java/eatda/domain/cheer/CheerTest.java | 2 ++ .../java/eatda/domain/store/StoreTest.java | 5 +++-- .../java/eatda/fixture/StoreGenerator.java | 16 ++++++++++++---- 9 files changed, 47 insertions(+), 31 deletions(-) diff --git a/src/main/java/eatda/domain/store/Store.java b/src/main/java/eatda/domain/store/Store.java index 09610a53..be8b13c4 100644 --- a/src/main/java/eatda/domain/store/Store.java +++ b/src/main/java/eatda/domain/store/Store.java @@ -47,6 +47,10 @@ public class Store extends AuditingEntity { @Column(name = "lot_number_address", nullable = false) private String lotNumberAddress; + @Enumerated(EnumType.STRING) + @Column(name = "district", nullable = false, length = 31) + private District district; + @Embedded private Coordinates coordinates; @@ -58,6 +62,7 @@ private Store(String kakaoId, String placeUrl, String roadAddress, String lotNumberAddress, + District district, Double latitude, Double longitude) { this.kakaoId = kakaoId; @@ -66,16 +71,13 @@ private Store(String kakaoId, this.name = name; this.placeUrl = placeUrl; this.roadAddress = roadAddress; + this.district = district; this.lotNumberAddress = lotNumberAddress; this.coordinates = new Coordinates(latitude, longitude); } public String getAddressDistrict() { - String[] addressParts = lotNumberAddress.split(" "); - if (addressParts.length < 2) { - return ""; - } - return addressParts[1]; + return district.getName(); } public String getAddressNeighborhood() { diff --git a/src/main/java/eatda/domain/store/StoreSearchResult.java b/src/main/java/eatda/domain/store/StoreSearchResult.java index 7d96e39c..d98dd0e7 100644 --- a/src/main/java/eatda/domain/store/StoreSearchResult.java +++ b/src/main/java/eatda/domain/store/StoreSearchResult.java @@ -22,6 +22,7 @@ public Store toStore() { .placeUrl(placeUrl) .roadAddress(roadAddress) .lotNumberAddress(lotNumberAddress) + .district(district) .latitude(latitude) .longitude(longitude) .build(); diff --git a/src/main/resources/db/migration/V1__init.sql b/src/main/resources/db/migration/V1__init.sql index 79d9e669..2f82ee42 100644 --- a/src/main/resources/db/migration/V1__init.sql +++ b/src/main/resources/db/migration/V1__init.sql @@ -20,6 +20,7 @@ CREATE TABLE `store` `place_url` VARCHAR(255) NOT NULL, `road_address` VARCHAR(255) NOT NULL, `lot_number_address` VARCHAR(255) NOT NULL, + `district` VARCHAR(31) NOT NULL, `latitude` DOUBLE NOT NULL, `longitude` DOUBLE NOT NULL, `created_at` TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP, diff --git a/src/main/resources/db/seed/dev/V2__dev_init_data.sql b/src/main/resources/db/seed/dev/V2__dev_init_data.sql index 5c31a4bd..a4a6898d 100644 --- a/src/main/resources/db/seed/dev/V2__dev_init_data.sql +++ b/src/main/resources/db/seed/dev/V2__dev_init_data.sql @@ -7,22 +7,22 @@ VALUES (1, 123456789, 'default1@kakao.com', '이승로', '01012345678', true), (6, 324569987, 'default6@kakao.com', '박희수', '01043609998', false), (7, 323487985, 'default7@kakao.com', '하아얀', '01065083298', false); -INSERT INTO store (id, kakao_id, category, phone_number, name, place_url, road_address, lot_number_address, latitude, - longitude) +INSERT INTO store (id, kakao_id, category, phone_number, name, place_url, road_address, lot_number_address, district, + latitude, longitude) VALUES (1, '99999999999', 'KOREAN', '01012345678', '맛있는 한식집', 'https://place.map.kakao.com/17163273', - '서울시 강남구 역삼동 123-45', '서울시 강남구 역삼동 123-45', 37.503708148482524, 127.05300772497776), + '서울시 강남구 역삼동 123-45', '서울시 강남구 역삼동 123-45', 'GANGNAM', 37.503708148482524, 127.05300772497776), (2, '99999999998', 'WESTERN', '01087654321', '아름다운 양식집', 'https://place.map.kakao.com/17163273', - '서울시 강남구 역삼동 67-89', '서울시 강남구 역삼동 67-89', 37.4979, 127.0276), + '서울시 강남구 역삼동 67-89', '서울시 강남구 역삼동 67-89', 'GANGNAM', 37.4979, 127.0276), (3, '99999999997', 'CHINESE', '01045678912', '정통 중식당', 'https://place.map.kakao.com/17163273', - '서울시 강남구 역삼동 101-112', '서울시 강남구 역삼동 101-112', 37.56259825108099, 126.97715943361476), + '서울시 강남구 역삼동 101-112', '서울시 강남구 역삼동 101-112', 'GANGNAM', 37.56259825108099, 126.97715943361476), (4, '99999999996', 'WESTERN', '01078912345', '고급 양식 레스토랑', 'https://place.map.kakao.com/17163273', '', - '서울시 강남구 역삼동 131-415', 37.4979, 127.0276), + '서울시 강남구 역삼동 131-415', 'GANGNAM', 37.4979, 127.0276), (5, '99999999995', 'OTHER', '01034574568', '달콤한 디저트 카페', 'https://place.map.kakao.com/17163273', - '서울시 강남구 역삼동 161-718', '서울시 강남구 역삼동 161-718', 37.49491300989233, 127.03150463098274), + '서울시 강남구 역삼동 161-718', '서울시 강남구 역삼동 161-718', 'GANGNAM', 37.49491300989233, 127.03150463098274), (6, '99999999994', 'OTHER', '01043609998', '아늑한 커피숍', 'https://place.map.kakao.com/17163273', - '서울시 강남구 역삼동 192-021', '서울시 강남구 역삼동 192-021', 37.5298343127044, 126.919484339847), + '서울시 강남구 역삼동 192-021', '서울시 강남구 역삼동 192-021', 'GANGNAM', 37.5298343127044, 126.919484339847), (7, '99999999993', 'OTHER', '01065083298', '빠른 패스트푸드점', 'https://place.map.kakao.com/17163273', '', - '서울시 강남구 역삼동 222-324', 37.5036675804016, 127.05305858911); + '서울시 강남구 역삼동 222-324', 'GANGNAM', 37.5036675804016, 127.05305858911); INSERT INTO cheer (id, member_id, store_id, description, image_key, is_admin) VALUES (1, 1, 1, '정말 맛있어요! 강추합니다!', 'cheer/dummy/1.jpg', true), diff --git a/src/main/resources/db/seed/local/V2__local_init_data.sql b/src/main/resources/db/seed/local/V2__local_init_data.sql index 91c74cd1..031628ea 100644 --- a/src/main/resources/db/seed/local/V2__local_init_data.sql +++ b/src/main/resources/db/seed/local/V2__local_init_data.sql @@ -7,22 +7,22 @@ VALUES (1, 123456789, 'default1@kakao.com', '이승로', '01012345678', true), (6, 324569987, 'default6@kakao.com', '박희수', '01043609998', false), (7, 323487985, 'default7@kakao.com', '하아얀', '01065083298', false); -INSERT INTO store (id, kakao_id, category, phone_number, name, place_url, road_address, lot_number_address, latitude, - longitude) +INSERT INTO store (id, kakao_id, category, phone_number, name, place_url, road_address, lot_number_address, district, + latitude, longitude) VALUES (1, '99999999999', 'KOREAN', '01012345678', '맛있는 한식집', 'https://place.map.kakao.com/17163273', - '서울시 강남구 역삼동 123-45', '서울시 강남구 역삼동 123-45', 37.503708148482524, 127.05300772497776), + '서울시 강남구 역삼동 123-45', '서울시 강남구 역삼동 123-45', 'GANGNAM', 37.503708148482524, 127.05300772497776), (2, '99999999998', 'WESTERN', '01087654321', '아름다운 양식집', 'https://place.map.kakao.com/17163273', - '서울시 강남구 역삼동 67-89', '서울시 강남구 역삼동 67-89', 37.4979, 127.0276), + '서울시 강남구 역삼동 67-89', '서울시 강남구 역삼동 67-89', 'GANGNAM', 37.4979, 127.0276), (3, '99999999997', 'CHINESE', '01045678912', '정통 중식당', 'https://place.map.kakao.com/17163273', - '서울시 강남구 역삼동 101-112', '서울시 강남구 역삼동 101-112', 37.56259825108099, 126.97715943361476), + '서울시 강남구 역삼동 101-112', '서울시 강남구 역삼동 101-112', 'GANGNAM', 37.56259825108099, 126.97715943361476), (4, '99999999996', 'WESTERN', '01078912345', '고급 양식 레스토랑', 'https://place.map.kakao.com/17163273', '', - '서울시 강남구 역삼동 131-415', 37.4979, 127.0276), + '서울시 강남구 역삼동 131-415', 'GANGNAM', 37.4979, 127.0276), (5, '99999999995', 'OTHER', '01034574568', '달콤한 디저트 카페', 'https://place.map.kakao.com/17163273', - '서울시 강남구 역삼동 161-718', '서울시 강남구 역삼동 161-718', 37.49491300989233, 127.03150463098274), + '서울시 강남구 역삼동 161-718', '서울시 강남구 역삼동 161-718', 'GANGNAM', 37.49491300989233, 127.03150463098274), (6, '99999999994', 'OTHER', '01043609998', '아늑한 커피숍', 'https://place.map.kakao.com/17163273', - '서울시 강남구 역삼동 192-021', '서울시 강남구 역삼동 192-021', 37.5298343127044, 126.919484339847), + '서울시 강남구 역삼동 192-021', '서울시 강남구 역삼동 192-021', 'GANGNAM', 37.5298343127044, 126.919484339847), (7, '99999999993', 'OTHER', '01065083298', '빠른 패스트푸드점', 'https://place.map.kakao.com/17163273', '', - '서울시 강남구 역삼동 222-324', 37.5036675804016, 127.05305858911); + '서울시 강남구 역삼동 222-324', 'GANGNAM', 37.5036675804016, 127.05305858911); INSERT INTO cheer (id, member_id, store_id, description, image_key, is_admin) VALUES (1, 1, 1, '정말 맛있어요! 강추합니다!', 'cheer/dummy/1.jpg', true), diff --git a/src/test/java/eatda/controller/cheer/CheerControllerTest.java b/src/test/java/eatda/controller/cheer/CheerControllerTest.java index 423731e1..d4701502 100644 --- a/src/test/java/eatda/controller/cheer/CheerControllerTest.java +++ b/src/test/java/eatda/controller/cheer/CheerControllerTest.java @@ -6,6 +6,7 @@ import eatda.controller.BaseControllerTest; import eatda.domain.cheer.Cheer; import eatda.domain.member.Member; +import eatda.domain.store.District; import eatda.domain.store.Store; import eatda.util.ImageUtils; import eatda.util.MappingUtils; @@ -63,8 +64,8 @@ class GetCheers { @Test void 요청한_응원_중_최신_응원_N개를_조회한다() { Member member = memberGenerator.generateRegisteredMember("nickname", "ac@kakao.com", "123", "01011111111"); - Store store1 = storeGenerator.generate("111", "서울시 노원구 월계3동 123-45"); - Store store2 = storeGenerator.generate("222", "서울시 성북구 석관동 123-45"); + Store store1 = storeGenerator.generate("111", "서울시 노원구 월계3동 123-45", District.NOWON); + Store store2 = storeGenerator.generate("222", "서울시 성북구 석관동 123-45", District.SEONGBUK); LocalDateTime startAt = LocalDateTime.of(2025, 7, 26, 1, 0, 0); Cheer cheer1 = cheerGenerator.generateAdmin(member, store1, startAt); Cheer cheer2 = cheerGenerator.generateAdmin(member, store1, startAt.plusHours(1)); diff --git a/src/test/java/eatda/domain/cheer/CheerTest.java b/src/test/java/eatda/domain/cheer/CheerTest.java index 79b2e3d0..baafefcc 100644 --- a/src/test/java/eatda/domain/cheer/CheerTest.java +++ b/src/test/java/eatda/domain/cheer/CheerTest.java @@ -6,6 +6,7 @@ import eatda.domain.ImageKey; import eatda.domain.member.Member; +import eatda.domain.store.District; import eatda.domain.store.Store; import eatda.domain.store.StoreCategory; import eatda.exception.BusinessErrorCode; @@ -26,6 +27,7 @@ class CheerTest { .placeUrl("https://place.kakao.com/1234567890") .roadAddress("서울시 성북구 대학로 1길 1") .lotNumberAddress("서울시 성북구 동선동 1-1") + .district(District.SEONGBUK) .latitude(37.5665) .longitude(126.978) .build(); diff --git a/src/test/java/eatda/domain/store/StoreTest.java b/src/test/java/eatda/domain/store/StoreTest.java index 1fe2d6ae..35b0241b 100644 --- a/src/test/java/eatda/domain/store/StoreTest.java +++ b/src/test/java/eatda/domain/store/StoreTest.java @@ -15,6 +15,7 @@ class StoreTest { .placeUrl("https://place.kakao.com/123456789") .roadAddress("") .lotNumberAddress("서울특별시 강남구 역삼동 123-45") + .district(District.GANGNAM) .latitude(37.5665) .longitude(126.978); @@ -22,9 +23,9 @@ class StoreTest { class GetAddressDistrict { @Test - void 주소_구_정보를_지번_주소에서_반환한다() { + void 주소_구_정보를_ENUM을_통해_반환한다() { Store store = DEFAULT_BUILDER - .lotNumberAddress("서울특별시 성북구 석관동 123-45") + .district(District.SEONGBUK) .build(); String actual = store.getAddressDistrict(); diff --git a/src/test/java/eatda/fixture/StoreGenerator.java b/src/test/java/eatda/fixture/StoreGenerator.java index 2372e501..dbc58e28 100644 --- a/src/test/java/eatda/fixture/StoreGenerator.java +++ b/src/test/java/eatda/fixture/StoreGenerator.java @@ -1,5 +1,6 @@ package eatda.fixture; +import eatda.domain.store.District; import eatda.domain.store.Store; import eatda.domain.store.StoreCategory; import eatda.repository.store.StoreRepository; @@ -15,6 +16,7 @@ public class StoreGenerator { private static final String DEFAULT_NAME = "가게 이름"; private static final String DEFAULT_PLACE_URL = "https://place.kakao.com/123456789"; private static final String DEFAULT_ROAD_ADDRESS = ""; + private static final District DEFAULT_DISTRICT = District.GANGNAM; private static final double DEFAULT_LATITUDE = 37.5665; // Default latitude for Seoul private static final double DEFAULT_LONGITUDE = 126.978; // Default longitude for Seoul @@ -26,23 +28,28 @@ public StoreGenerator(StoreRepository storeRepository) { } public Store generate(String kakaoId, String lotNumberAddress) { - Store store = create(kakaoId, lotNumberAddress, DEFAULT_CATEGORY); + Store store = create(kakaoId, lotNumberAddress, DEFAULT_DISTRICT, DEFAULT_CATEGORY); + return storeRepository.save(store); + } + + public Store generate(String kakaoId, String lotNumberAddress, District district) { + Store store = create(kakaoId, lotNumberAddress, district, DEFAULT_CATEGORY); return storeRepository.save(store); } public Store generate(String kakaoId, String lotNumberAddress, LocalDateTime createdAt) { - Store store = create(kakaoId, lotNumberAddress, DEFAULT_CATEGORY); + Store store = create(kakaoId, lotNumberAddress, DEFAULT_DISTRICT, DEFAULT_CATEGORY); DomainUtils.setCreatedAt(store, createdAt); return storeRepository.save(store); } public Store generate(String kakaoId, String lotNumberAddress, StoreCategory category, LocalDateTime createdAt) { - Store store = create(kakaoId, lotNumberAddress, category); + Store store = create(kakaoId, lotNumberAddress, DEFAULT_DISTRICT, category); DomainUtils.setCreatedAt(store, createdAt); return storeRepository.save(store); } - private Store create(String kakaoId, String lotNumberAddress, StoreCategory category) { + private Store create(String kakaoId, String lotNumberAddress, District district, StoreCategory category) { return Store.builder() .kakaoId(kakaoId) .category(category) @@ -51,6 +58,7 @@ private Store create(String kakaoId, String lotNumberAddress, StoreCategory cate .placeUrl(DEFAULT_PLACE_URL) .roadAddress(DEFAULT_ROAD_ADDRESS) .lotNumberAddress(lotNumberAddress) + .district(district) .latitude(DEFAULT_LATITUDE) .longitude(DEFAULT_LONGITUDE) .build();