Skip to content

Commit 6b99879

Browse files
authored
[fix/OPS-390] Secret 값 관련 일부 수정 (#126)
* fix/OPS-390 : secret 템플릿 및 수정 사항에 맞게 코드 변수명 변경. * feat/OPS-390: NEWS API 수정 추가 사항 반영. * feat/OPS-390: CI 워크플로우 일부 수정. * feat/OPS-390: 일부 placeholders 수정. * feat/OPS-390: 일부 문서화 항목 수정.
1 parent bfe8f12 commit 6b99879

File tree

4 files changed

+77
-54
lines changed

4 files changed

+77
-54
lines changed

.github/workflows/test-server-ci.yml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -68,6 +68,7 @@ jobs:
6868
- name: Test with Gradle
6969
# 테스트 단계에서 RabbitMQ 연결을 위한 환경 변수 설정
7070
env:
71+
SPRING_PROFILES_ACTIVE: test
7172
OPENAI_API_KEY: ${{ secrets.OPENAI_API_KEY }}
7273
SPRING_RABBITMQ_HOST: localhost
7374
SPRING_RABBITMQ_USERNAME: guest

src/main/java/org/tuna/zoopzoop/backend/domain/news/controller/ApiV1NewsController.java

Lines changed: 30 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -26,6 +26,7 @@ public class ApiV1NewsController {
2626
private final NewsAPIService newsSearchService;
2727
private final NewsService newsService;
2828

29+
2930
/**
3031
* 최신 뉴스 목록을 조회하는 API
3132
* 한번에 100개를 조회 합니다.
@@ -98,4 +99,33 @@ public Mono<ResponseEntity<RsData<ResBodyForNaverNews>>> searchNewsByRecommends(
9899
response
99100
)));
100101
}
102+
103+
/**
104+
* 공유 아카이브의 폴더 내부의 자료를 기반으로 키워드를 추천해서 검색하는 뉴스 API
105+
* HTTP METHOD: GET
106+
* 한번에 100개를 조회 합니다.
107+
* @param userDetails 로그인한 사용자
108+
* @param spaceId 대상 스페이스 id
109+
* @param folderId 대상 폴더 id
110+
*/
111+
@GetMapping("/recommends/shared/{spaceId}/{folderId}")
112+
@Operation(summary = "공유 아카이브 뉴스 추천")
113+
public Mono<ResponseEntity<RsData<ResBodyForNaverNews>>> searchNewsByRecommends(
114+
@AuthenticationPrincipal CustomUserDetails userDetails,
115+
@PathVariable Integer spaceId,
116+
@PathVariable Integer folderId
117+
) {
118+
Member member = userDetails.getMember();
119+
List<String> frequency = newsService.getTagFrequencyFromFilesInSharing(spaceId, member.getId(), folderId);
120+
String query = String.join(" ", frequency);
121+
122+
return newsSearchService.searchNews(query, "sim")
123+
.map(response -> ResponseEntity
124+
.status(HttpStatus.OK)
125+
.body(new RsData<>(
126+
"200",
127+
"키워드 기반 뉴스 목록을 조회했습니다.",
128+
response
129+
)));
130+
}
101131
}

src/main/java/org/tuna/zoopzoop/backend/domain/news/service/NewsService.java

Lines changed: 30 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,9 @@
55
import org.tuna.zoopzoop.backend.domain.archive.folder.service.PersonalArchiveFolderService;
66
import org.tuna.zoopzoop.backend.domain.datasource.dto.FileSummary;
77
import org.tuna.zoopzoop.backend.domain.datasource.dto.FolderFilesDto;
8+
import org.tuna.zoopzoop.backend.domain.member.entity.Member;
9+
import org.tuna.zoopzoop.backend.domain.member.service.MemberService;
10+
import org.tuna.zoopzoop.backend.domain.space.archive.service.SpaceArchiveFolderService;
811

912
import java.util.Comparator;
1013
import java.util.List;
@@ -15,6 +18,8 @@
1518
@RequiredArgsConstructor
1619
public class NewsService {
1720
private final PersonalArchiveFolderService folderService;
21+
private final SpaceArchiveFolderService spaceArchiveFolderService;
22+
private final MemberService memberService;
1823

1924
public List<String> getTagFrequencyFromFiles(Integer memberId, Integer folderId) {
2025
FolderFilesDto folderFilesDto = folderService.getFilesInFolder(memberId, folderId);
@@ -39,4 +44,29 @@ public List<String> getTagFrequencyFromFiles(Integer memberId, Integer folderId)
3944

4045
return frequency;
4146
}
47+
48+
public List<String> getTagFrequencyFromFilesInSharing(Integer spaceId, Integer memberId, Integer folderId) {
49+
Member member = memberService.findById(memberId);
50+
FolderFilesDto folderFilesDto = spaceArchiveFolderService.getFilesInFolder(spaceId, member, folderId);
51+
52+
List<FileSummary> files = folderFilesDto.files();
53+
54+
Map<String, Long> tags = files.stream()
55+
.flatMap(file -> {
56+
List<String> ts = file.tags();
57+
return (ts == null ? List.<String>of() : ts).stream();
58+
})
59+
.collect(Collectors.groupingBy(
60+
tagName -> tagName,
61+
Collectors.counting()
62+
));
63+
64+
List<String> frequency = tags.entrySet().stream()
65+
.sorted(Map.Entry.comparingByValue(Comparator.reverseOrder()))
66+
.limit(3)
67+
.map(Map.Entry::getKey)
68+
.toList();
69+
70+
return frequency;
71+
}
4272
}
Lines changed: 16 additions & 54 deletions
Original file line numberDiff line numberDiff line change
@@ -1,55 +1,17 @@
1-
spring:
2-
security:
3-
oauth2:
4-
client:
5-
registration:
6-
kakao:
7-
client-id: {KAKAO_CLIENT_ID}
8-
client-secret: ""
9-
redirect-uri: {KAKAO_REDIRECT_URL}
10-
scope:
11-
- {SCOPE_LIST}
12-
authorization-grant-type: {AUTHORIZATION_GRANT_TYPE}
13-
google:
14-
client-id: {GOOGLE_CLIENT_ID}
15-
client-secret: {GOOGLE_SECRET}
16-
redirect-uri: {GOOGLE_REDIRECT_URL}
17-
scope:
18-
- {SCOPE_LIST}
19-
authorization-grant-type: {AUTHORIZATION_GRANT_TYPE}
20-
provider:
21-
kakao:
22-
authorization-uri: https://kauth.kakao.com/oauth/authorize
23-
token-uri: https://kauth.kakao.com/oauth/token
24-
user-info-uri: https://kapi.kakao.com/v2/user/me
25-
user-name-attribute: id
26-
google:
27-
authorization-uri: https://accounts.google.com/o/oauth2/v2/auth
28-
token-uri: https://oauth2.googleapis.com/token
29-
user-info-uri: https://www.googleapis.com/oauth2/v3/userinfo
30-
user-name-attribute: sub
31-
cloud:
32-
aws:
33-
credentials:
34-
access-key: {AWS_ACCESS_KEY}
35-
secret-key: {AWS_SECRET_KEY}
36-
region:
37-
static: {AWS_REGION}
38-
s3:
39-
bucket: {AWS_S3_BUCKET_NAME}
40-
stack:
41-
auto: false
1+
OPENAI_API_KEY: {YOUR_VALUE}
2+
KAKAO_CLIENT_ID: {YOUR_VALUE}
3+
GOOGLE_CLIENT_ID: {YOUR_VALUE}
4+
GOOGLE_CLIENT_SECRET: {YOUR_VALUE}
5+
AWS_ACCESS_KEY_ID: {YOUR_VALUE}
6+
AWS_SECRET_ACCESS_KEY: {YOUR_VALUE}
7+
AWS_S3_BUCKET_NAME: {YOUR_VALUE}
8+
SENTRY_DSN: {YOUR_VALUE}
9+
JWT_SECRET_KEY: {YOUR_VALUE}
10+
JWT_ACCESS_TOKEN_VALIDITY: {YOUR_VALUE}
11+
JWT_REFRESH_TOKEN_VALIDITY: {YOUR_VALUE}
12+
NAVER_CLIENT_ID: {YOUR_VALUE}
13+
NAVER_CLIENT_SECRET: {YOUR_VALUE}
14+
LIVEBLOCKS_SECRET_KEY: {YOUR_VALUE}
15+
REDIRECT_DOMAIN: {YOUR_VALUE}
4216

43-
naver:
44-
client_id: {NAVER_CLIENT_ID}
45-
client_secret: {NAVER_CLIENT_SECRET}
46-
47-
jwt:
48-
secret-key: {JWT_SECRET_KEY}
49-
access-token-validity: {ACCESSTOKEN_VALIDITY}
50-
refresh-token-validity: {REFRESHTOKEN_VALIDITY}
51-
52-
OPENAI_API_KEY: {OPENAI_API_KEY}
53-
54-
liveblocks:
55-
secret-key: {LIVEBLOCKS_SECRET_KEY}
17+
#SENTRY_AUTH_TOKEN -> 따로 시스템 환경 변수로 설정.

0 commit comments

Comments
 (0)