Skip to content

Commit 55a1a2d

Browse files
committed
Merge remote-tracking branch 'origin/develop'
2 parents 3ef1dff + 90bf3fe commit 55a1a2d

File tree

8 files changed

+78
-24
lines changed

8 files changed

+78
-24
lines changed

.github/workflows/prod-server.yml

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -88,7 +88,7 @@ jobs:
8888
-e SPRING_DATASOURCE_PASSWORD="${{secrets.PROD_DB_PASSWORD}}" \
8989
-e AWS_S3_BUCKET_NAME="${{secrets.AWS_S3_BUCKET_NAME}}" \
9090
-e AWS_S3_PREFIX="${{secrets.PROD_AWS_S3_PREFIX}}" \
91-
-e SPRING_RABBITMQ_HOST="${{secrets.RABBITMQ_HOST}}" \
91+
-e SPRING_RABBITMQ_HOST="${{secrets.RABBITMQ_HOST}}" \
9292
-e SPRING_RABBITMQ_PORT="${{secrets.PROD_RABBITMQ_PORT}}" \
9393
-e SPRING_RABBITMQ_USERNAME="${{secrets.PROD_RABBITMQ_USERNAME}}" \
9494
-e SPRING_RABBITMQ_PASSWORD="${{secrets.PROD_RABBITMQ_PASSWORD}}" \
@@ -100,7 +100,7 @@ jobs:
100100
-e KAKAO_REDIRECT_URI="${{secrets.PROD_OAUTH_KAKAO_REDIRECT_URI}}" \
101101
-e GOOGLE_REDIRECT_URI="${{secrets.PROD_OAUTH_GOOGLE_REDIRECT_URI}}" \
102102
-e SENTRY_DSN="${{secrets.SENTRY_DSN}}" \
103-
-e OPENAI_API_KEY="${{secrets.OPENAI_API_KEY}}" \
103+
-e OPENAI_API_KEY="${{secrets.PROD_OPENAI_API_KEY}}" \
104104
-e LIVEBLOCKS_SECRET_KEY="${{secrets.LIVEBLOCKS_SECRET_KEY}}" \
105105
-e NAVER_CLIENT_ID="${{secrets.NAVER_CLIENT_ID}}" \
106106
-e NAVER_CLIENT_SECRET="${{secrets.NAVER_CLIENT_SECRET}}" \

src/main/java/org/tuna/zoopzoop/backend/domain/auth/handler/OAuth2SuccessHandler.java

Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -97,8 +97,35 @@ public void onAuthenticationSuccess(HttpServletRequest request, HttpServletRespo
9797
}
9898
}
9999

100+
101+
if ("dev".equalsIgnoreCase(activeProfile)) {
102+
// 로컬 테스트용. profile이 dev인 경우.
103+
ResponseCookie accessCookie = ResponseCookie.from("accessToken", accessToken)
104+
.httpOnly(true)
105+
.path("/")
106+
.maxAge(jwtProperties.getAccessTokenValidity() / 1000)
107+
.secure(false)
108+
.sameSite("Lax")
109+
.build();
110+
111+
ResponseCookie sessionCookie = ResponseCookie.from("sessionId", sessionId)
112+
.httpOnly(true)
113+
.path("/")
114+
.maxAge(jwtProperties.getRefreshTokenValidity() / 1000) // RefreshToken 유효기간과 동일하게
115+
.secure(false)
116+
.sameSite("Lax")
117+
.build();
118+
119+
response.addHeader(HttpHeaders.SET_COOKIE, accessCookie.toString());
120+
response.addHeader(HttpHeaders.SET_COOKIE, sessionCookie.toString());
121+
122+
response.sendRedirect("http://localhost:8080");
123+
return;
124+
}
125+
100126
if ("http://localhost:3000".equals(redirect_domain)) {
101127
// server 환경일 때: URL 파라미터로 토큰 전달
128+
// 프론트엔드 local 테스트용.
102129
String redirectUrl = redirect_domain + "/api/auth/callback"
103130
+ "?success=true"
104131
+ "&accessToken=" + URLEncoder.encode(accessToken, "UTF-8")

src/main/java/org/tuna/zoopzoop/backend/domain/member/dto/res/ResBodyForSearchMember.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,6 @@ public ResBodyForSearchMember(int id, String name, String profileImageUrl) {
1313
this.profileImageUrl = profileImageUrl;
1414
}
1515
public ResBodyForSearchMember(MemberDocument memberDocument){
16-
this(memberDocument.getId(), memberDocument.getName(), memberDocument.getProfileImageUrl());
16+
this(memberDocument.getId(), memberDocument.getNameWithTag(), memberDocument.getProfileImageUrl());
1717
}
1818
}

src/main/java/org/tuna/zoopzoop/backend/domain/member/entity/MemberDocument.java

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -16,8 +16,10 @@ public class MemberDocument {
1616
@Id
1717
private int id;
1818

19-
@Field(type = FieldType.Text, analyzer = "ngram_analyzer", searchAnalyzer = "standard")
20-
private String name;
19+
@Field(type = FieldType.Text, analyzer = "ngram_analyzer", searchAnalyzer = "ngram_analyzer")
20+
private String nameOnly;
2121

22+
private String nameWithTag;
2223
private String profileImageUrl;
2324
}
25+

src/main/java/org/tuna/zoopzoop/backend/domain/member/repository/MemberSearchRepository.java

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,5 +6,8 @@
66
import java.util.List;
77

88
public interface MemberSearchRepository extends ElasticsearchRepository<MemberDocument, Integer> {
9-
List<MemberDocument> findByNameContaining(String name);
9+
10+
List<MemberDocument> findByNameOnlyContaining(String name);
11+
List<MemberDocument> findByNameOnly(String name);
12+
1013
}

src/main/java/org/tuna/zoopzoop/backend/domain/member/service/MemberSearchService.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,6 @@ public class MemberSearchService {
1313
private final MemberSearchRepository memberSearchRepository;
1414

1515
public List<MemberDocument> searchByName(String name) {
16-
return memberSearchRepository.findByNameContaining(name);
16+
return memberSearchRepository.findByNameOnly(name);
1717
}
1818
}

src/main/java/org/tuna/zoopzoop/backend/domain/member/service/MemberService.java

Lines changed: 35 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -90,12 +90,7 @@ public Member createMember(String name, String profileUrl, String key, Provider
9090
Member saved = memberRepository.save(member);
9191

9292
// ElasticSearch용 document 생성.
93-
MemberDocument doc = new MemberDocument();
94-
doc.setId(saved.getId());
95-
doc.setName(saved.getName());
96-
doc.setProfileImageUrl(saved.getProfileImageUrl());
97-
memberSearchRepository.save(doc);
98-
93+
createDocument(member);
9994
return saved;
10095
}
10196

@@ -108,11 +103,8 @@ public void updateMemberName(Member member, String newName){
108103
member.updateName(generateUniqueUserNameTag(newName));
109104
memberRepository.save(member);
110105

111-
MemberDocument doc = new MemberDocument();
112-
doc.setId(member.getId());
113-
doc.setName(member.getName());
114-
doc.setProfileImageUrl(member.getProfileImageUrl());
115-
memberSearchRepository.save(doc);
106+
// ElasticSearch용 document 생성.
107+
createDocument(member);
116108
}
117109

118110
@Transactional
@@ -123,6 +115,10 @@ public void updateMemberProfileUrl(Member member, MultipartFile file){
123115
String newUrl = s3Service.upload(file, fileName);
124116
member.updateProfileUrl(newUrl);
125117
memberRepository.save(member);
118+
119+
// ElasticSearch용 document 생성.
120+
createDocument(member);
121+
126122
} catch (IOException e) {
127123
throw new IllegalArgumentException("잘못된 파일 입력입니다.");
128124
}
@@ -140,6 +136,10 @@ public void updateMemberProfile(Member member, String newName, MultipartFile fil
140136
String newUrl = s3Service.upload(file, fileName);
141137
member.updateProfileUrl(newUrl);
142138
memberRepository.save(member);
139+
140+
// ElasticSearch용 document 생성.
141+
createDocument(member);
142+
143143
} catch (IOException e) {
144144
throw new IllegalArgumentException("잘못된 파일 입력입니다.");
145145
}
@@ -151,9 +151,17 @@ public void updateMemberProfile(Member member, String newName, MultipartFile fil
151151
@Transactional
152152
public void hardDeleteMember(Member member){
153153
Integer memberId = member.getId();
154+
155+
// 관련 데이터 정리
154156
tagRepository.bulkDeleteTagsByMemberId(memberId);
155157
dataSourceRepository.bulkDeleteByMemberId(memberId);
158+
159+
// 회원 삭제
156160
memberRepository.delete(member);
161+
162+
// Elastic Search 인덱스에서 회원 삭제.
163+
memberSearchRepository.deleteById(memberId);
164+
157165
}
158166

159167
//soft-delete한 회원 복구
@@ -168,4 +176,20 @@ private String generateUniqueUserNameTag(String baseName) {
168176
} while(memberRepository.existsByName(candidate));
169177
return candidate;
170178
}
179+
180+
// ElasticSearch용 document 생성 메소드.
181+
private void createDocument(Member member){
182+
MemberDocument doc = new MemberDocument();
183+
doc.setId(member.getId());
184+
185+
String name = member.getName();
186+
String nameOnly = name.contains("#") ? name.substring(0, name.indexOf("#")) : name;
187+
188+
doc.setNameOnly(nameOnly);
189+
doc.setNameWithTag(name);
190+
doc.setProfileImageUrl(member.getProfileImageUrl());
191+
192+
memberSearchRepository.save(doc);
193+
}
194+
171195
}

src/main/resources/ngram.json

Lines changed: 4 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -2,16 +2,14 @@
22
"analysis": {
33
"analyzer": {
44
"ngram_analyzer": {
5-
"tokenizer": "ngram_tokenizer",
6-
"filter": ["lowercase"]
5+
"tokenizer": "my_ngram_tokenizer"
76
}
87
},
98
"tokenizer": {
10-
"ngram_tokenizer": {
9+
"my_ngram_tokenizer": {
1110
"type": "ngram",
12-
"min_gram": 2,
13-
"max_gram": 3,
14-
"token_chars": ["letter", "digit"]
11+
"min_gram": 1,
12+
"max_gram": 2
1513
}
1614
}
1715
}

0 commit comments

Comments
 (0)