Skip to content

Commit 23ff02e

Browse files
committed
Merge remote-tracking branch 'origin/develop' into OPS-360-BE-refactor-folder-datasource-리펙토링
2 parents 3c4242a + ed2c450 commit 23ff02e

File tree

12 files changed

+130
-14
lines changed

12 files changed

+130
-14
lines changed

src/main/java/org/tuna/zoopzoop/backend/BackendApplication.java

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,8 +2,10 @@
22

33
import org.springframework.boot.SpringApplication;
44
import org.springframework.boot.autoconfigure.SpringBootApplication;
5+
import org.springframework.data.jpa.repository.config.EnableJpaAuditing;
56

67
@SpringBootApplication
8+
@EnableJpaAuditing
79
public class BackendApplication {
810
public static void main(String[] args) {
911
SpringApplication.run(BackendApplication.class, args);

src/main/java/org/tuna/zoopzoop/backend/domain/auth/controller/ApiV1AuthController.java

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -130,6 +130,7 @@ public ResponseEntity<RsData<Void>> refreshToken(
130130
*/
131131
@GetMapping("/result")
132132
@Operation(summary = "확장프로그램 백그라운드 풀링 대응 API")
133+
@CrossOrigin(origins = "*")
133134
public ResponseEntity<RsData<AuthResultData>> pullingResult(
134135
@RequestParam String state
135136
) {

src/main/java/org/tuna/zoopzoop/backend/domain/auth/entity/AuthResult.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,7 @@ public void put(String state, String accessToken, String sessionId) {
2020

2121
public AuthResultData get(String state) {
2222
AuthResultData data = redisTemplate.opsForValue().get(PREFIX + state);
23-
if (data != null) redisTemplate.delete("auth:" + state);
23+
if (data != null) redisTemplate.delete(PREFIX + state);
2424
return data;
2525
}
2626
}

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

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -92,6 +92,7 @@ public void onAuthenticationSuccess(HttpServletRequest request, HttpServletRespo
9292
if ("extension".equals(source)) {
9393
authResult.put(customState, accessToken, sessionId);
9494
response.sendRedirect(redirect_domain + "/extension/success");
95+
response.flushBuffer();
9596
return;
9697
}
9798
}

src/main/java/org/tuna/zoopzoop/backend/domain/datasource/crawler/dto/SpecificSiteDto.java

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -9,4 +9,14 @@ public record SpecificSiteDto(
99
String imageUrl, // 썸네일 이미지 url
1010
String source // 출처
1111
) {
12+
@Override
13+
public String toString() {
14+
return "SpecificSiteDto {\n" +
15+
" title='" + title + "',\n" +
16+
" dataCreatedDate=" + dataCreatedDate + ",\n" +
17+
" content='" + content + "',\n" +
18+
" imageUrl='" + imageUrl + "',\n" +
19+
" source='" + source + "'\n" +
20+
"}";
21+
}
1222
}

src/main/java/org/tuna/zoopzoop/backend/domain/datasource/crawler/service/SupportedDomain.java

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,8 @@
22

33
public enum SupportedDomain {
44
NAVERNEWS("n.news.naver.com"),
5-
NAVERBLOG("blog.naver.com");
5+
NAVERBLOG("blog.naver.com"),
6+
VELOG("velog.io");
67

78
private final String domain;
89

Lines changed: 62 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,62 @@
1+
package org.tuna.zoopzoop.backend.domain.datasource.crawler.service;
2+
3+
import org.jsoup.nodes.Document;
4+
import org.springframework.stereotype.Component;
5+
import org.tuna.zoopzoop.backend.domain.datasource.crawler.dto.CrawlerResult;
6+
import org.tuna.zoopzoop.backend.domain.datasource.crawler.dto.SpecificSiteDto;
7+
8+
import java.time.LocalDate;
9+
import java.time.format.DateTimeFormatter;
10+
11+
@Component
12+
public class VelogCrawler implements Crawler{
13+
private static final SupportedDomain DOMAIN = SupportedDomain.VELOG;
14+
private static final DateTimeFormatter VELOG_FORMATTER = DateTimeFormatter.ofPattern("yyyy년 M월 d일");
15+
16+
@Override
17+
public boolean supports(String domain) {
18+
return domain.contains(DOMAIN.getDomain());
19+
}
20+
21+
@Override
22+
public CrawlerResult<?> extract(Document doc) {
23+
// 제목
24+
String title = doc.selectFirst("meta[property=og:title]").attr("content");
25+
26+
// 작성 날짜
27+
String publishedAt = doc.selectFirst(
28+
"div.information > span:not([class])"
29+
).text();
30+
31+
LocalDate dataCreatedDate = transLocalDate(publishedAt);
32+
33+
// 내용(ai한테 줘야함)
34+
String content = doc.selectFirst("div.atom-one").text();
35+
36+
// 썸네일 이미지 url
37+
String imageUrl = doc.selectFirst("meta[property=og:image]").attr("content");
38+
39+
// 출처
40+
String source = doc.selectFirst("span.username > a").text();
41+
42+
return new CrawlerResult<>(
43+
CrawlerResult.CrawlerType.SPECIFIC,
44+
new SpecificSiteDto(title, dataCreatedDate, content, imageUrl, source)
45+
);
46+
}
47+
48+
@Override
49+
public LocalDate transLocalDate(String rawDate) {
50+
51+
if(rawDate.contains("일 전")){
52+
int daysAgo = Integer.parseInt(rawDate.split("일 전")[0].trim());
53+
return LocalDate.now().minusDays(daysAgo);
54+
}else if(rawDate.contains("방금 전")) {
55+
return LocalDate.now();
56+
}else if(rawDate.contains("시간 전")||rawDate.contains("분 전")){
57+
return LocalDate.now();
58+
}
59+
60+
return LocalDate.parse(rawDate, VELOG_FORMATTER);
61+
}
62+
}

src/main/java/org/tuna/zoopzoop/backend/domain/space/space/service/SpaceService.java

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,6 @@
33
import jakarta.persistence.NoResultException;
44
import jakarta.validation.constraints.NotBlank;
55
import lombok.RequiredArgsConstructor;
6-
import org.hibernate.service.spi.ServiceException;
76
import org.hibernate.validator.constraints.Length;
87
import org.springframework.dao.DataIntegrityViolationException;
98
import org.springframework.stereotype.Service;
@@ -99,6 +98,7 @@ public Space createSpace(@NotBlank @Length(max = 50) String name, String thumbna
9998
* @return 삭제된 스페이스 이름
10099
* @throws IllegalArgumentException 스페이스가 존재하지 않을 경우
101100
*/
101+
102102
@Transactional
103103
public String deleteSpace(Integer spaceId) {
104104
Space space = spaceRepository.findById(spaceId)
@@ -118,6 +118,7 @@ public String deleteSpace(Integer spaceId) {
118118
* @throws IllegalArgumentException 스페이스가 존재하지 않을 경우
119119
* @throws DuplicateSpaceNameException 새로운 스페이스 이름이 중복될 경우
120120
*/
121+
121122
@Transactional
122123
public Space updateSpaceName(Integer spaceId, @NotBlank @Length(max = 50) String name) {
123124
Space space = spaceRepository.findById(spaceId)

src/main/resources/application-dev.yml

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,17 @@ spring:
1010
ddl-auto: create-drop
1111
show-sql: true
1212

13+
data: #RedisTemplate 등을 사용하기 위한 직접 연결용
14+
redis:
15+
host: localhost
16+
port: 6379
17+
timeout: 6000
18+
cache: #Spring Cache를 사용하기 위한 Redis
19+
type: redis
20+
redis:
21+
time-to-live: 300000
22+
cache-null-values: false
23+
1324
app:
1425
seed:
1526
enabled: true

src/main/resources/application-server.yml

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,18 @@ spring:
88
hibernate:
99
ddl-auto: update
1010

11+
data: #RedisTemplate 등을 사용하기 위한 직접 연결용
12+
redis:
13+
host: 10.0.1.246
14+
port: 6379
15+
timeout: 6000
16+
password: zoopzoopRedisTest!
17+
cache: #Spring Cache를 사용하기 위한 Redis
18+
type: redis
19+
redis:
20+
time-to-live: 300000
21+
cache-null-values: false
22+
1123
management:
1224
endpoints:
1325
web:

0 commit comments

Comments
 (0)