Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -97,8 +97,34 @@ public void onAuthenticationSuccess(HttpServletRequest request, HttpServletRespo
}
}

if ("dev".equalsIgnoreCase(activeProfile)) {
// 로컬 테스트용. profile이 dev인 경우.
ResponseCookie accessCookie = ResponseCookie.from("accessToken", accessToken)
.httpOnly(true)
.path("/")
.maxAge(jwtProperties.getAccessTokenValidity() / 1000)
.secure(false)
.sameSite("Lax")
.build();

ResponseCookie sessionCookie = ResponseCookie.from("sessionId", sessionId)
.httpOnly(true)
.path("/")
.maxAge(jwtProperties.getRefreshTokenValidity() / 1000) // RefreshToken 유효기간과 동일하게
.secure(false)
.sameSite("Lax")
.build();

response.addHeader(HttpHeaders.SET_COOKIE, accessCookie.toString());
response.addHeader(HttpHeaders.SET_COOKIE, sessionCookie.toString());

response.sendRedirect("http://localhost:8080");
return;
}

if ("http://localhost:3000".equals(redirect_domain)) {
// server 환경일 때: URL 파라미터로 토큰 전달
// 프론트엔드 local 테스트용.
String redirectUrl = redirect_domain + "/api/auth/callback"
+ "?success=true"
+ "&accessToken=" + URLEncoder.encode(accessToken, "UTF-8")
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -13,6 +13,6 @@ public ResBodyForSearchMember(int id, String name, String profileImageUrl) {
this.profileImageUrl = profileImageUrl;
}
public ResBodyForSearchMember(MemberDocument memberDocument){
this(memberDocument.getId(), memberDocument.getName(), memberDocument.getProfileImageUrl());
this(memberDocument.getId(), memberDocument.getNameWithTag(), memberDocument.getProfileImageUrl());
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -16,8 +16,9 @@ public class MemberDocument {
@Id
private int id;

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

private String nameWithTag;
private String profileImageUrl;
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -6,5 +6,6 @@
import java.util.List;

public interface MemberSearchRepository extends ElasticsearchRepository<MemberDocument, Integer> {
List<MemberDocument> findByNameContaining(String name);
List<MemberDocument> findByNameOnlyContaining(String name);
List<MemberDocument> findByNameOnly(String name);
}
Original file line number Diff line number Diff line change
Expand Up @@ -13,6 +13,6 @@ public class MemberSearchService {
private final MemberSearchRepository memberSearchRepository;

public List<MemberDocument> searchByName(String name) {
return memberSearchRepository.findByNameContaining(name);
return memberSearchRepository.findByNameOnly(name);
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -90,12 +90,7 @@ public Member createMember(String name, String profileUrl, String key, Provider
Member saved = memberRepository.save(member);

// ElasticSearch용 document 생성.
MemberDocument doc = new MemberDocument();
doc.setId(saved.getId());
doc.setName(saved.getName());
doc.setProfileImageUrl(saved.getProfileImageUrl());
memberSearchRepository.save(doc);

createDocument(member);
return saved;
}

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

MemberDocument doc = new MemberDocument();
doc.setId(member.getId());
doc.setName(member.getName());
doc.setProfileImageUrl(member.getProfileImageUrl());
memberSearchRepository.save(doc);
// ElasticSearch용 document 생성.
createDocument(member);
}

@Transactional
Expand All @@ -123,6 +115,9 @@ public void updateMemberProfileUrl(Member member, MultipartFile file){
String newUrl = s3Service.upload(file, fileName);
member.updateProfileUrl(newUrl);
memberRepository.save(member);

// ElasticSearch용 document 생성.
createDocument(member);
} catch (IOException e) {
throw new IllegalArgumentException("잘못된 파일 입력입니다.");
}
Expand All @@ -140,6 +135,9 @@ public void updateMemberProfile(Member member, String newName, MultipartFile fil
String newUrl = s3Service.upload(file, fileName);
member.updateProfileUrl(newUrl);
memberRepository.save(member);

// ElasticSearch용 document 생성.
createDocument(member);
} catch (IOException e) {
throw new IllegalArgumentException("잘못된 파일 입력입니다.");
}
Expand All @@ -151,9 +149,16 @@ public void updateMemberProfile(Member member, String newName, MultipartFile fil
@Transactional
public void hardDeleteMember(Member member){
Integer memberId = member.getId();

// 관련 데이터 정리
tagRepository.bulkDeleteTagsByMemberId(memberId);
dataSourceRepository.bulkDeleteByMemberId(memberId);

// 회원 삭제
memberRepository.delete(member);

// Elastic Search 인덱스에서 회원 삭제.
memberSearchRepository.deleteById(memberId);
}

//soft-delete한 회원 복구
Expand All @@ -168,4 +173,19 @@ private String generateUniqueUserNameTag(String baseName) {
} while(memberRepository.existsByName(candidate));
return candidate;
}

// ElasticSearch용 document 생성 메소드.
private void createDocument(Member member){
MemberDocument doc = new MemberDocument();
doc.setId(member.getId());

String name = member.getName();
String nameOnly = name.contains("#") ? name.substring(0, name.indexOf("#")) : name;

doc.setNameOnly(nameOnly);
doc.setNameWithTag(name);
doc.setProfileImageUrl(member.getProfileImageUrl());

memberSearchRepository.save(doc);
}
}
10 changes: 4 additions & 6 deletions src/main/resources/ngram.json
Original file line number Diff line number Diff line change
Expand Up @@ -2,16 +2,14 @@
"analysis": {
"analyzer": {
"ngram_analyzer": {
"tokenizer": "ngram_tokenizer",
"filter": ["lowercase"]
"tokenizer": "my_ngram_tokenizer"
}
},
"tokenizer": {
"ngram_tokenizer": {
"my_ngram_tokenizer": {
"type": "ngram",
"min_gram": 2,
"max_gram": 3,
"token_chars": ["letter", "digit"]
"min_gram": 1,
"max_gram": 2
}
}
}
Expand Down