Skip to content

Commit cc1c6cb

Browse files
authored
Merge pull request #52 from AlongTheBlue/alongBlue
feat: 여행코스 구현
2 parents 108794a + 6ed4d8c commit cc1c6cb

File tree

14 files changed

+302
-1
lines changed

14 files changed

+302
-1
lines changed
Lines changed: 32 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,32 @@
1+
package org.alongtheblue.alongtheblue_server.global.data.course;
2+
3+
import com.fasterxml.jackson.annotation.JsonManagedReference;
4+
import jakarta.persistence.*;
5+
import lombok.Data;
6+
import org.alongtheblue.alongtheblue_server.global.data.courseHashTag.CourseHashTag;
7+
import org.alongtheblue.alongtheblue_server.global.data.courseItem.CourseItem;
8+
9+
import java.util.Date;
10+
import java.util.List;
11+
12+
@Entity
13+
@Data
14+
public class Course {
15+
@Id
16+
@GeneratedValue(strategy = GenerationType.IDENTITY)
17+
private Long id;
18+
19+
private String title;
20+
private String subtitle;
21+
private String content;
22+
private Date createdate;
23+
24+
@OneToMany(mappedBy = "course", cascade = CascadeType.ALL)
25+
@JsonManagedReference
26+
private List<CourseItem> courseItemList;
27+
28+
@OneToMany(mappedBy = "course", cascade = CascadeType.ALL)
29+
@JsonManagedReference
30+
private List<CourseHashTag> courseHashTags;
31+
32+
}
Lines changed: 30 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,30 @@
1+
package org.alongtheblue.alongtheblue_server.global.data.course;
2+
3+
import lombok.RequiredArgsConstructor;
4+
import org.alongtheblue.alongtheblue_server.global.common.response.ApiResponse;
5+
import org.springframework.web.bind.annotation.*;
6+
7+
import java.util.List;
8+
9+
@RestController
10+
@RequiredArgsConstructor
11+
@RequestMapping("/api/course")
12+
public class CourseController {
13+
14+
private final CourseService courseService;
15+
16+
@GetMapping("/home/list")
17+
public ApiResponse<List<CourseHomeDto>> getHomeTourCourses() {
18+
return courseService.getHomeCourse();
19+
}
20+
21+
@GetMapping("/detail/{id}")
22+
public ApiResponse<CourseDetailDto> getDetailTourCourse(@PathVariable Long id) {
23+
return courseService.getDetailCourse(id);
24+
}
25+
26+
@PostMapping
27+
public ApiResponse<String> saveTourCourse(@RequestPart CourseRequestDto tourCourseRequestDto) {
28+
return courseService.saveCourse(tourCourseRequestDto);
29+
}
30+
}
Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,16 @@
1+
package org.alongtheblue.alongtheblue_server.global.data.course;
2+
3+
import org.alongtheblue.alongtheblue_server.global.data.courseHashTag.CourseHashTag;
4+
import org.alongtheblue.alongtheblue_server.global.data.courseItem.CourseItemResponseDto;
5+
6+
import java.util.List;
7+
8+
public record CourseDetailDto(
9+
Long contentid,
10+
String subtitle,
11+
String title,
12+
String introduction,
13+
List<CourseHashTag> hashtags,
14+
List<CourseItemResponseDto> travelCourses
15+
) {
16+
}
Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,10 @@
1+
package org.alongtheblue.alongtheblue_server.global.data.course;
2+
3+
public record CourseHomeDto(
4+
Long contentid,
5+
String subtitle,
6+
String title,
7+
String img,
8+
String hashTag
9+
) {
10+
}
Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,6 @@
1+
package org.alongtheblue.alongtheblue_server.global.data.course;
2+
3+
import org.springframework.data.jpa.repository.JpaRepository;
4+
5+
public interface CourseRepository extends JpaRepository<Course, Long> {
6+
}
Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
package org.alongtheblue.alongtheblue_server.global.data.course;
2+
3+
public record CourseRequestDto(
4+
5+
) {
6+
7+
}
Lines changed: 92 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,92 @@
1+
package org.alongtheblue.alongtheblue_server.global.data.course;
2+
3+
import lombok.RequiredArgsConstructor;
4+
import org.alongtheblue.alongtheblue_server.global.common.response.ApiResponse;
5+
import org.alongtheblue.alongtheblue_server.global.data.courseHashTag.CourseHashTag;
6+
import org.alongtheblue.alongtheblue_server.global.data.courseImage.CourseImage;
7+
import org.alongtheblue.alongtheblue_server.global.data.courseImage.CourseImageDto;
8+
import org.alongtheblue.alongtheblue_server.global.data.courseItem.CourseItem;
9+
import org.alongtheblue.alongtheblue_server.global.data.courseItem.CourseItemRequestDto;
10+
import org.alongtheblue.alongtheblue_server.global.data.courseItem.CourseItemResponseDto;
11+
import org.springframework.stereotype.Service;
12+
13+
import java.util.ArrayList;
14+
import java.util.List;
15+
import java.util.Optional;
16+
17+
@Service
18+
@RequiredArgsConstructor
19+
public class CourseService {
20+
21+
private final CourseRepository courseRepository;
22+
23+
public ApiResponse<List<CourseHomeDto>> getHomeCourse() {
24+
List<Course> courses = courseRepository.findAll();
25+
List<CourseHomeDto> courseHomeDtoList = new ArrayList<>();
26+
int index = 0;
27+
while (courseHomeDtoList.size() < 2){
28+
Course course = courses.get(index++);
29+
CourseHomeDto courseHomeDto = new CourseHomeDto(
30+
course.getId(),
31+
course.getSubtitle(),
32+
course.getTitle(),
33+
course.getCourseItemList().get(0).getTourImage().get(0).getUrl(),
34+
course.getCourseHashTags().get(0).getTitle()
35+
);
36+
courseHomeDtoList.add(courseHomeDto);
37+
}
38+
return ApiResponse.ok(courseHomeDtoList);
39+
}
40+
41+
public ApiResponse<CourseDetailDto> getDetailCourse(Long id) {
42+
Course course = findById(id);
43+
44+
List<CourseItem> courseItemList = course.getCourseItemList();
45+
List<CourseItemResponseDto> courseItemResponseDtoList = new ArrayList<>();
46+
for(CourseItem courseItem : courseItemList){
47+
List<CourseImage> courseImages = courseItem.getTourImage();
48+
List<CourseImageDto> courseImageDtoList = new ArrayList<>();
49+
for(CourseImage courseImage : courseImages){
50+
CourseImageDto courseImageDto = new CourseImageDto(
51+
courseImage.getId(),
52+
courseImage.getUrl()
53+
);
54+
courseImageDtoList.add(courseImageDto);
55+
}
56+
CourseItemResponseDto courseItemResponseDto = new CourseItemResponseDto(
57+
courseItem.getTitle(),
58+
courseItem.getAddress(),
59+
courseItem.getContent(),
60+
courseItem.getCategory(),
61+
courseItem.getXMap(),
62+
courseItem.getYMap(),
63+
courseImageDtoList
64+
);
65+
courseItemResponseDtoList.add(courseItemResponseDto);
66+
}
67+
68+
List<CourseHashTag> courseHashTagList = course.getCourseHashTags();
69+
70+
CourseDetailDto courseDetailDto = new CourseDetailDto(
71+
course.getId(),
72+
course.getSubtitle(),
73+
course.getTitle(),
74+
course.getContent(),
75+
courseHashTagList,
76+
courseItemResponseDtoList
77+
);
78+
return ApiResponse.ok(courseDetailDto);
79+
}
80+
81+
public ApiResponse<String> saveCourse(CourseRequestDto tourCourseRequestDto) {
82+
return null;
83+
}
84+
85+
public Course findById(Long id) {
86+
Optional<Course> optionalCourse = courseRepository.findById(id);
87+
if (optionalCourse.isPresent())
88+
return optionalCourse.get();
89+
else
90+
throw new RuntimeException("해당 ID의 여행코스가 존재하지 않습니다.");
91+
}
92+
}
Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,20 @@
1+
package org.alongtheblue.alongtheblue_server.global.data.courseHashTag;
2+
3+
import com.fasterxml.jackson.annotation.JsonBackReference;
4+
import jakarta.persistence.*;
5+
import lombok.Data;
6+
import org.alongtheblue.alongtheblue_server.global.data.course.Course;
7+
8+
@Entity
9+
@Data
10+
public class CourseHashTag {
11+
@Id
12+
@GeneratedValue(strategy = GenerationType.IDENTITY)
13+
private Long id;
14+
private String title;
15+
16+
@ManyToOne
17+
@JoinColumn(name = "course")
18+
@JsonBackReference
19+
private Course course;
20+
}
Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,21 @@
1+
package org.alongtheblue.alongtheblue_server.global.data.courseImage;
2+
3+
import com.fasterxml.jackson.annotation.JsonBackReference;
4+
import jakarta.persistence.*;
5+
import lombok.Data;
6+
import org.alongtheblue.alongtheblue_server.global.data.courseItem.CourseItem;
7+
import org.alongtheblue.alongtheblue_server.global.data.tourcommunity.TourPostItem;
8+
9+
@Entity
10+
@Data
11+
public class CourseImage {
12+
@Id
13+
@GeneratedValue(strategy = GenerationType.IDENTITY)
14+
private Long id;
15+
private String url;
16+
17+
@ManyToOne
18+
@JoinColumn(name = "courseItem")
19+
@JsonBackReference
20+
private CourseItem courseItem;
21+
}
Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,9 @@
1+
package org.alongtheblue.alongtheblue_server.global.data.courseImage;
2+
3+
4+
public record CourseImageDto(
5+
Long id,
6+
String url
7+
){
8+
9+
}
Lines changed: 36 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,36 @@
1+
package org.alongtheblue.alongtheblue_server.global.data.courseItem;
2+
3+
import com.fasterxml.jackson.annotation.JsonBackReference;
4+
import com.fasterxml.jackson.annotation.JsonManagedReference;
5+
import jakarta.persistence.*;
6+
import lombok.Data;
7+
import org.alongtheblue.alongtheblue_server.global.data.course.Course;
8+
import org.alongtheblue.alongtheblue_server.global.data.courseImage.CourseImage;
9+
10+
import java.util.List;
11+
12+
@Entity
13+
@Data
14+
public class CourseItem {
15+
@Id
16+
@GeneratedValue(strategy = GenerationType.IDENTITY)
17+
private Long id;
18+
19+
private String title;
20+
private String category;
21+
private String address;
22+
private String content;
23+
private String xMap;
24+
private String yMap;
25+
private String contentId;
26+
27+
@ManyToOne
28+
@JoinColumn(name = "course")
29+
@JsonBackReference
30+
private Course course;
31+
32+
@OneToMany(mappedBy = "courseItem", cascade = CascadeType.ALL)
33+
@JsonManagedReference
34+
private List<CourseImage> tourImage;
35+
36+
}
Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,4 @@
1+
package org.alongtheblue.alongtheblue_server.global.data.courseItem;
2+
3+
public class CourseItemRequestDto {
4+
}
Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,18 @@
1+
package org.alongtheblue.alongtheblue_server.global.data.courseItem;
2+
3+
import org.alongtheblue.alongtheblue_server.global.data.courseHashTag.CourseHashTag;
4+
import org.alongtheblue.alongtheblue_server.global.data.courseImage.CourseImage;
5+
import org.alongtheblue.alongtheblue_server.global.data.courseImage.CourseImageDto;
6+
7+
import java.util.List;
8+
9+
public record CourseItemResponseDto(
10+
String title,
11+
String address,
12+
String introduction,
13+
String category,
14+
String xMap,
15+
String yMap,
16+
List<CourseImageDto> images
17+
) {
18+
}

src/main/resources/application.yml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
spring:
22
profiles:
3-
active: prod
3+
active: local
44

55
---
66
# Swagger

0 commit comments

Comments
 (0)