Skip to content

Commit 3e2daae

Browse files
authored
[BACKEND] 가이드 조회 기능 추가, 예시 가이드 데이터 추가 (#66)
## 📝작업 내용 >- getGuide GET /guide : 가이드 조회, 카테고리 필수 >- guide별로 category, intro, detail, caution, beginner 세분화 >- Guide SamleData 추가 ## 주의사항 > - 편리한 테스트를 위해 guide API는 인증을 필요로 하지 않도록 열어둔 상태입니다. 실제로는 필요합니다.. > - data.sql은 테스트 용 데이터입니다. 실제 데이터는 추후에 변경 필요합니다.
1 parent c8c3779 commit 3e2daae

File tree

9 files changed

+481
-1
lines changed

9 files changed

+481
-1
lines changed

backend/src/main/java/com/cmg/comtogether/common/exception/ErrorCode.java

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -26,7 +26,10 @@ public enum ErrorCode {
2626
OAUTH_PROVIDER_ERROR(502, "OAUTH-999", "카카오 서버와 통신 중 오류가 발생했습니다."),
2727

2828
// 네이버 상품 API
29-
NAVER_API_ERROR(502, "NAVER-999", "네이버 서버와 통신 중 오류가 발생했습니다.");
29+
NAVER_API_ERROR(502, "NAVER-999", "네이버 서버와 통신 중 오류가 발생했습니다."),
30+
31+
// 가이드
32+
GUIDE_NOT_FOUND(404, "GUIDE-001", "가이드를 찾을 수 없습니다");
3033

3134
private final int status;
3235
private final String code;

backend/src/main/java/com/cmg/comtogether/common/security/config/SecurityConfig.java

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -40,6 +40,7 @@ public SecurityFilterChain securityFilterChain(HttpSecurity http, CorsConfigurat
4040
"/swagger-ui/**",
4141
"/v3/api-docs/**",
4242
"/products/**",
43+
"/guide/**",
4344
"/users/all"
4445
).permitAll()
4546
.anyRequest().authenticated()
Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,23 @@
1+
package com.cmg.comtogether.guide.controller;
2+
3+
import com.cmg.comtogether.common.response.ApiResponse;
4+
import com.cmg.comtogether.guide.dto.GuideResponseDto;
5+
import com.cmg.comtogether.guide.service.GuideService;
6+
import jakarta.validation.constraints.NotBlank;
7+
import lombok.RequiredArgsConstructor;
8+
import org.springframework.http.ResponseEntity;
9+
import org.springframework.web.bind.annotation.*;
10+
11+
@RestController
12+
@RequiredArgsConstructor
13+
@RequestMapping("/guide")
14+
public class GuideController {
15+
16+
private final GuideService guideService;
17+
18+
@GetMapping
19+
public ResponseEntity<ApiResponse<GuideResponseDto>> getGuide(@RequestParam @NotBlank(message = "카테고리는 필수입니다.") String category) {
20+
GuideResponseDto guideResponseDto = guideService.getGuide(category);
21+
return ResponseEntity.ok(ApiResponse.success(guideResponseDto));
22+
}
23+
}
Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,15 @@
1+
package com.cmg.comtogether.guide.dto;
2+
3+
import lombok.AllArgsConstructor;
4+
import lombok.Builder;
5+
import lombok.Getter;
6+
7+
@Getter
8+
@AllArgsConstructor
9+
@Builder
10+
public class Description {
11+
private String intro;
12+
private String detail;
13+
private String caution;
14+
private String beginner;
15+
}
Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,13 @@
1+
package com.cmg.comtogether.guide.dto;
2+
3+
import lombok.AllArgsConstructor;
4+
import lombok.Builder;
5+
import lombok.Getter;
6+
7+
@Getter
8+
@Builder
9+
@AllArgsConstructor
10+
public class GuideResponseDto {
11+
private String category;
12+
private Description description;
13+
}
Lines changed: 34 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,34 @@
1+
package com.cmg.comtogether.guide.entity;
2+
3+
import jakarta.persistence.*;
4+
import lombok.AllArgsConstructor;
5+
import lombok.Builder;
6+
import lombok.Getter;
7+
import lombok.NoArgsConstructor;
8+
9+
@Entity
10+
@Getter
11+
@NoArgsConstructor
12+
@AllArgsConstructor
13+
@Builder
14+
public class Guide {
15+
16+
@Id
17+
@GeneratedValue(strategy = GenerationType.IDENTITY)
18+
private Long guideId;
19+
20+
@Column(nullable = false, unique = true)
21+
private String category;
22+
23+
@Column(columnDefinition = "TEXT")
24+
private String intro;
25+
26+
@Column(columnDefinition = "TEXT")
27+
private String detail;
28+
29+
@Column(columnDefinition = "TEXT")
30+
private String caution;
31+
32+
@Column(columnDefinition = "TEXT")
33+
private String beginner;
34+
}
Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,10 @@
1+
package com.cmg.comtogether.guide.repository;
2+
3+
import com.cmg.comtogether.guide.entity.Guide;
4+
import org.springframework.data.jpa.repository.JpaRepository;
5+
6+
import java.util.Optional;
7+
8+
public interface GuideRepository extends JpaRepository<Guide, Long> {
9+
Optional<Guide> findByCategory(String category);
10+
}
Lines changed: 35 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,35 @@
1+
package com.cmg.comtogether.guide.service;
2+
3+
import com.cmg.comtogether.common.exception.BusinessException;
4+
import com.cmg.comtogether.common.exception.ErrorCode;
5+
import com.cmg.comtogether.guide.dto.Description;
6+
import com.cmg.comtogether.guide.dto.GuideResponseDto;
7+
import com.cmg.comtogether.guide.entity.Guide;
8+
import com.cmg.comtogether.guide.repository.GuideRepository;
9+
import lombok.RequiredArgsConstructor;
10+
import org.springframework.stereotype.Service;
11+
12+
13+
@Service
14+
@RequiredArgsConstructor
15+
public class GuideService {
16+
17+
private final GuideRepository guideRepository;
18+
19+
public GuideResponseDto getGuide(String category) {
20+
Guide guide = guideRepository.findByCategory(category)
21+
.orElseThrow(() -> new BusinessException(ErrorCode.GUIDE_NOT_FOUND));
22+
23+
return GuideResponseDto.builder()
24+
.category(guide.getCategory())
25+
.description(
26+
Description.builder()
27+
.intro(guide.getIntro())
28+
.detail(guide.getDetail())
29+
.caution(guide.getCaution())
30+
.beginner(guide.getBeginner())
31+
.build()
32+
)
33+
.build();
34+
}
35+
}

0 commit comments

Comments
 (0)