9
9
import com .acon .server .global .external .s3 .S3Adapter ;
10
10
import com .acon .server .member .api .response .AcornCountResponse ;
11
11
import com .acon .server .member .api .response .LoginResponse ;
12
- import com .acon .server .member .api .response .MemberAreaResponse ;
13
12
import com .acon .server .member .api .response .PreSignedUrlResponse ;
14
13
import com .acon .server .member .api .response .ProfileResponse ;
15
14
import com .acon .server .member .api .response .ReissueTokenResponse ;
15
+ import com .acon .server .member .api .response .VerifiedAreaListResponse ;
16
+ import com .acon .server .member .api .response .VerifiedAreaResponse ;
16
17
import com .acon .server .member .application .mapper .GuidedSpotMapper ;
17
18
import com .acon .server .member .application .mapper .MemberMapper ;
18
19
import com .acon .server .member .application .mapper .PreferenceMapper ;
@@ -61,6 +62,7 @@ public class MemberService {
61
62
private static final char [] CHARACTERS = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789_." .toCharArray ();
62
63
private static final int MAX_NICKNAME_LENGTH = 16 ;
63
64
private static final String NICKNAME_PATTERN = "^[a-zA-Z0-9_.가-힣]+$" ;
65
+ private static final int MAX_VERIFIED_AREA_SIZE = 5 ;
64
66
65
67
private final GuidedSpotRepository guidedSpotRepository ;
66
68
private final MemberRepository memberRepository ;
@@ -155,15 +157,17 @@ private String generateRandomNickname() {
155
157
}
156
158
157
159
@ Transactional
158
- public MemberAreaResponse createMemberArea (
160
+ public VerifiedAreaResponse createVerifiedArea (
159
161
final Double latitude ,
160
162
final Double longitude
161
163
) {
162
164
MemberEntity memberEntity = memberRepository .findByIdOrElseThrow (principalHandler .getUserIdFromPrincipal ());
163
165
164
- // 추후 여러 동네 인증이 가능하게 되면 제거 예정
165
- if (verifiedAreaRepository .existsByMemberId (memberEntity .getId ())) {
166
- throw new BusinessException (ErrorType .ALREADY_VERIFIED_AREA_ERROR );
166
+ List <VerifiedAreaEntity > verifiedAreaEntityList = verifiedAreaRepository .findAllByMemberId (
167
+ memberEntity .getId ());
168
+
169
+ if (verifiedAreaEntityList .size () >= MAX_VERIFIED_AREA_SIZE ) {
170
+ throw new BusinessException (ErrorType .INVALID_AREA_SIZE_ERROR );
167
171
}
168
172
169
173
String legalDong = naverMapsAdapter .getReverseGeoCodingResult (latitude , longitude );
@@ -175,7 +179,21 @@ public MemberAreaResponse createMemberArea(
175
179
.map (entity -> updateVerifiedAreaEntity (entity , currentDate ))
176
180
.orElseGet (() -> createVerifiedAreaEntity (legalDong , memberEntity .getId (), currentDate ));
177
181
178
- return MemberAreaResponse .of (savedVerifiedAreaEntity .getId (), savedVerifiedAreaEntity .getName ());
182
+ return VerifiedAreaResponse .of (savedVerifiedAreaEntity .getId (), savedVerifiedAreaEntity .getName ());
183
+ }
184
+
185
+ @ Transactional (readOnly = true )
186
+ public VerifiedAreaListResponse fetchVerifiedAreaList () {
187
+ MemberEntity memberEntity = memberRepository .findByIdOrElseThrow (principalHandler .getUserIdFromPrincipal ());
188
+ List <VerifiedAreaEntity > verifiedAreaEntityList = verifiedAreaRepository .findAllByMemberId (
189
+ memberEntity .getId ());
190
+ List <VerifiedAreaResponse > verifiedAreaList = verifiedAreaEntityList .stream ()
191
+ .map (verifiedAreaEntity -> VerifiedAreaResponse .of (verifiedAreaEntity .getId (),
192
+ verifiedAreaEntity .getName ()))
193
+ .toList ();
194
+
195
+ return new VerifiedAreaListResponse (verifiedAreaList );
196
+
179
197
}
180
198
181
199
private VerifiedAreaEntity updateVerifiedAreaEntity (
0 commit comments