Skip to content

Commit f32804e

Browse files
authored
Merge pull request #6 from AlongTheBlue/develop
Resturant 정리
2 parents 38b9e86 + cbcee3f commit f32804e

40 files changed

+2602
-0
lines changed

build.gradle

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -33,6 +33,17 @@ dependencies {
3333
testRuntimeOnly 'org.junit.platform:junit-platform-launcher'
3434
implementation 'org.springdoc:springdoc-openapi-starter-webmvc-ui:2.0.4'
3535
implementation 'org.springframework.cloud:spring-cloud-starter-aws:2.2.6.RELEASE'
36+
37+
// 데이터 합치기
38+
implementation 'com.fasterxml.jackson.core:jackson-databind'
39+
40+
// Spring WebFlux 의존성 (WebClient 포함)
41+
implementation 'org.springframework.boot:spring-boot-starter-webflux'
42+
43+
// JSON 파싱을 위한 의존성
44+
implementation 'org.json:json:20240303'
45+
testImplementation 'io.projectreactor:reactor-test'
46+
implementation 'io.netty:netty-resolver-dns-native-macos:4.1.86.Final:osx-x86_64'
3647
}
3748

3849
tasks.named('test') {

src/main/java/org/alongtheblue/alongtheblue_server/AlongTheBlueServerApplication.java

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,12 @@
11
package org.alongtheblue.alongtheblue_server;
22

3+
import org.alongtheblue.alongtheblue_server.global.data.tourData.TourData;
4+
import org.alongtheblue.alongtheblue_server.global.data.tourData.TourDataService;
35
import org.springframework.boot.SpringApplication;
46
import org.springframework.boot.autoconfigure.SpringBootApplication;
57

8+
import java.util.ArrayList;
9+
610
@SpringBootApplication
711
public class AlongTheBlueServerApplication {
812

Lines changed: 28 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,28 @@
1+
package org.alongtheblue.alongtheblue_server.global.data.accommodation;
2+
3+
import com.fasterxml.jackson.annotation.JsonManagedReference;
4+
import jakarta.persistence.*;
5+
import lombok.Data;
6+
import org.alongtheblue.alongtheblue_server.global.data.tourcommunity.TourImage;
7+
8+
import java.util.List;
9+
10+
@Entity
11+
@Data
12+
public class Accommodation {
13+
@Id
14+
@GeneratedValue(strategy = GenerationType.IDENTITY)
15+
private Long id;
16+
17+
private String contentsid;
18+
private String title;
19+
private String roadaddress;
20+
@Column(columnDefinition = "TEXT")
21+
private String introduction;
22+
private String infocenter;
23+
private String checkintime;
24+
25+
@OneToMany(mappedBy = "accommodation", cascade = CascadeType.ALL)
26+
@JsonManagedReference
27+
private List<AccommodationImage> accommodationImage;
28+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,97 @@
1+
package org.alongtheblue.alongtheblue_server.global.data.accommodation;
2+
3+
import org.springframework.beans.factory.annotation.Autowired;
4+
import org.springframework.http.ResponseEntity;
5+
import org.springframework.stereotype.Controller;
6+
import org.springframework.web.bind.annotation.GetMapping;
7+
import org.springframework.web.bind.annotation.PathVariable;
8+
import org.springframework.web.bind.annotation.RequestMapping;
9+
import org.springframework.web.bind.annotation.RestController;
10+
11+
import java.util.List;
12+
import java.util.Map;
13+
14+
@RestController
15+
@RequestMapping("/api/accommodation")
16+
public class AccommodationController {
17+
@Autowired
18+
private AccommodationService accommodationService;
19+
20+
// visit jeju
21+
@GetMapping("/fetch-and-save")
22+
public String fetchAndSaveAccommodations() {
23+
accommodationService.saveAccommodations();
24+
return "Data fetched and saved successfully!";
25+
}
26+
27+
// @GetMapping("/overview")
28+
// public String fetchANdUpdateOverview() {
29+
// accommodationService.updateOverview();
30+
// return "Data fetched and saved successfully";
31+
// }
32+
33+
@GetMapping("/update")
34+
public ResponseEntity<String> updateAccommodationInfo() {
35+
accommodationService.updateOverview();
36+
return ResponseEntity.ok("Accommodation info updated successfully.");
37+
}
38+
39+
@GetMapping("/home")
40+
public List<AccommodationDTO> getAccommodation(){
41+
return accommodationService.getAccommodationHomeInfo();
42+
}
43+
44+
45+
@GetMapping("/overview/1")
46+
public void updateOverview() {
47+
48+
accommodationService.updateFirstOverviews();
49+
}
50+
51+
@GetMapping("/overview/all")
52+
public void updateAllOverview() {
53+
54+
accommodationService.updateAllOverviews();
55+
}
56+
57+
@GetMapping("/checkintime")
58+
public void updateCheckInTimes(){
59+
60+
accommodationService.updateCheckInTimes();
61+
}
62+
63+
@GetMapping("/infocenter")
64+
public void updateInfoCenter(){
65+
66+
accommodationService.updateInfoCenterLodgings();
67+
}
68+
69+
@GetMapping("/imgurl")
70+
public void updateImgUrl(){
71+
72+
accommodationService.updateAllOriginImageUrls();
73+
}
74+
75+
@GetMapping("/{contentsid}") // 상세보기
76+
public AccommodationDTO getAccommodation(@PathVariable String contentsid) {
77+
return accommodationService.getAccommodationDetails(contentsid);
78+
}
79+
80+
@GetMapping("/random") // 홈화면
81+
public ResponseEntity<List<AccommodationDTO>> getRandomAccommodationsWithImages() {
82+
List<AccommodationDTO> randomAccommodations = accommodationService.getRandomAccommodationDetailsWithImages();
83+
84+
if (randomAccommodations.isEmpty()) {
85+
// 만약 결과가 없다면 404 Not Found 리턴
86+
return ResponseEntity.notFound().build();
87+
}
88+
89+
// 성공적으로 데이터를 가져왔을 경우 200 OK와 함께 리스트 반환
90+
return ResponseEntity.ok(randomAccommodations);
91+
}
92+
93+
@GetMapping("/with-images") // 세부
94+
public List<AccommodationDTO> getAccommodationsWithTwoImages() {
95+
return accommodationService.getRandomAccommodationDetailsWithTwoImages();
96+
}
97+
}
Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,19 @@
1+
package org.alongtheblue.alongtheblue_server.global.data.accommodation;
2+
3+
import lombok.Data;
4+
import lombok.Getter;
5+
import lombok.Setter;
6+
7+
import java.util.List;
8+
9+
@Getter
10+
@Setter
11+
public class AccommodationDTO {
12+
private String contentsid;
13+
private String roadaddress;
14+
private String title;
15+
private List<String> originimgurl; // 추가된 필드
16+
private String introduction; // 추가된 필드
17+
private String checkintime; // 추가된 필드
18+
private String infocenter;
19+
}
Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,25 @@
1+
package org.alongtheblue.alongtheblue_server.global.data.accommodation;
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.tourcommunity.TourImage;
8+
import org.alongtheblue.alongtheblue_server.global.data.tourcommunity.TourPostItem;
9+
10+
import java.util.List;
11+
12+
@Entity
13+
@Data
14+
public class AccommodationImage {
15+
@Id
16+
@GeneratedValue(strategy = GenerationType.IDENTITY)
17+
private long id;
18+
private String url;
19+
20+
@ManyToOne
21+
@JoinColumn(name = "Accommodation")
22+
@JsonBackReference
23+
private Accommodation accommodation;
24+
25+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,6 @@
1+
package org.alongtheblue.alongtheblue_server.global.data.accommodation;
2+
3+
import org.springframework.data.jpa.repository.JpaRepository;
4+
5+
public interface AccommodationImageRepository extends JpaRepository<AccommodationImage, Long> {
6+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,41 @@
1+
package org.alongtheblue.alongtheblue_server.global.data.accommodation;
2+
3+
import org.springframework.data.jpa.repository.JpaRepository;
4+
import org.springframework.data.jpa.repository.Query;
5+
import org.springframework.stereotype.Repository;
6+
7+
import java.util.List;
8+
import java.util.Map;
9+
import java.util.Optional;
10+
11+
@Repository
12+
public interface AccommodationRepository extends JpaRepository<Accommodation, Long> {
13+
List<Accommodation> findByIntroductionIsNull();
14+
@Query("SELECT a FROM Accommodation a WHERE a.introduction IS NULL")
15+
List<Accommodation> findAccommodationsWithNullIntroduction();
16+
@Query("SELECT a.contentsid FROM Accommodation a")
17+
List<String> findAllContentsIds();
18+
19+
Accommodation findByContentsid(String contentsid);
20+
21+
@Query(value = "SELECT a.* " +
22+
"FROM accommodation a " +
23+
"JOIN accommodation_image ai ON a.contentsid = ai.accommodation " +
24+
"GROUP BY a.contentsid " +
25+
"HAVING COUNT(ai.url) > 0 " +
26+
"ORDER BY RAND() " +
27+
"LIMIT 6",
28+
nativeQuery = true)
29+
List<Accommodation> findRandomAccommodationsWithImages();
30+
31+
@Query(value = "SELECT a.contentsid, a.roadaddress, a.title, "
32+
+ "(SELECT GROUP_CONCAT(ai.url SEPARATOR ',') FROM accommodation_image ai WHERE ai.accommodation = a.contentsid) as imageUrls, "
33+
+ "a.introduction "
34+
+ "FROM accommodation a "
35+
+ "JOIN accommodation_image ai ON a.contentsid = ai.accommodation "
36+
+ "GROUP BY a.contentsid "
37+
+ "HAVING COUNT(ai.url) > 0 "
38+
+ "ORDER BY RAND()", nativeQuery = true)
39+
List<AccommodationDTO> findAccommodationsWithTwoImages();
40+
}
41+

0 commit comments

Comments
 (0)