Skip to content
This repository has been archived by the owner on Jan 15, 2024. It is now read-only.

Commit

Permalink
Merge pull request #85 from Mini-Team-6/feature/#81-separating-methods
Browse files Browse the repository at this point in the history
Feature/#81 separating methods
  • Loading branch information
yuhyun1 authored Nov 27, 2023
2 parents aae7c05 + 1116e8b commit b4c0102
Show file tree
Hide file tree
Showing 12 changed files with 184 additions and 233 deletions.

This file was deleted.

Original file line number Diff line number Diff line change
Expand Up @@ -8,13 +8,10 @@ public class TourAPIProperties {
public static final String KEY_DECODED = "0ON3kBtDxd0KYGW5spO8inNljADd/IqfnS/l3nMWq3EkARl20N3MmZVYlSvH3Y8V5fEAo7Seucd5pR7Ebm2Phg==";
public static final String KEY_ENCODED = "0ON3kBtDxd0KYGW5spO8inNljADd%2FIqfnS%2Fl3nMWq3EkARl20N3MmZVYlSvH3Y8V5fEAo7Seucd5pR7Ebm2Phg%3D%3D";

public static final String BASE_URL = "http://apis.data.go.kr/B551011/KorService1/";
public static final String BASE_URL = "https://apis.data.go.kr/B551011/KorService1/";

public static final String SEARCH_KEYWORD = "searchKeyword1";
public static final String DETAIL_INTRO = "detailIntro1";
public static final String DETAIL_INFO = "detailInfo1";
public static final String SEARCH_STAY = "searchStay1";

public static final String CONTENT_TYPE_ID = "32";
public static final String MOBILE_OS = "ETC";
public static final String MOBILE_APP = "TravelAPP";
Expand Down
173 changes: 74 additions & 99 deletions src/main/java/ybe/mini/travelserver/global/api/TourAPIService.java
Original file line number Diff line number Diff line change
Expand Up @@ -6,142 +6,73 @@
import ybe.mini.travelserver.domain.accommodation.entity.Accommodation;
import ybe.mini.travelserver.domain.accommodation.entity.Location;
import ybe.mini.travelserver.domain.room.entity.Room;
import ybe.mini.travelserver.global.api.dto.DetailInfoResponse;
import ybe.mini.travelserver.global.api.dto.DetailIntroResponse;
import ybe.mini.travelserver.global.api.dto.SearchKeywordResponse;
import ybe.mini.travelserver.global.api.dto.AccommodationTourAPIResponse;
import ybe.mini.travelserver.global.api.dto.RoomTourAPIResponse;
import ybe.mini.travelserver.global.exception.api.NoAccommodationsFromAPIException;
import ybe.mini.travelserver.global.exception.api.NoRoomsFromAPIException;

import java.util.ArrayList;
import java.util.List;
import java.util.Optional;

@Slf4j
@Service
@RequiredArgsConstructor
public class TourAPIService {

public Accommodation bringAccommodation(
long accommodationId,
String keyword
String keyword,
String code
) {
var accommodationDetailResponse = TourAPIUtils.bringAccommodationDetail(accommodationId);
var accommodationsSimpleSearchResponse = TourAPIUtils.bringAccommodations(keyword);
var accommodationsSimpleSearchResponse = TourAPIUtils.bringAccommodation(keyword, code);

var detailItems = accommodationDetailResponse.response().body().items().item();
var keywordItems = accommodationsSimpleSearchResponse.response().body().items().item();
var body = accommodationsSimpleSearchResponse.response().body();

if (keywordItems.isEmpty() || detailItems.isEmpty()) {
throw new IllegalArgumentException("숙소 정보가 없습니다.");
if (body.totalCount() == 0) {
throw new NoAccommodationsFromAPIException();
}

var keywordItem = keywordItems.get(0);
var detailItem = detailItems.get(0);
var items = body.items().item();

return generateAccommodation(
accommodationId,
keywordItem,
detailItem
);
}

public Accommodation bringAccommodation(String keyword) {
var accommodationsSimpleSearchResponse = TourAPIUtils.bringAccommodations(keyword);

var keywordItems = accommodationsSimpleSearchResponse.response().body().items().item();

if (keywordItems.isEmpty()) {
throw new IllegalArgumentException("숙소 정보가 없습니다.");
}
var keywordItem = keywordItems.get(0);

long accommodationId = Long.parseLong(keywordItem.contentid());
var item = items.get(0);

var accommodationDetailResponse = TourAPIUtils.bringAccommodationDetail(accommodationId);
var detailItems = accommodationDetailResponse.response().body().items().item();
var detailItem = detailItems.get(0);
long accommodationId = Long.parseLong(item.contentid());

return generateAccommodation(
accommodationId,
keywordItem,
detailItem
item
);
}

public List<Room> bringRooms(long accommodationId) {
DetailInfoResponse detailInfoResponse = TourAPIUtils.bringRoom(accommodationId);

var roomItems = detailInfoResponse.response().body().items().item();

if (roomItems.isEmpty()) {
throw new IllegalArgumentException("객실 정보가 없습니다.");
}

List<Room> rooms = new ArrayList<>();
for (var roomItem : roomItems) {
Room room = Room.builder()
.roomTypeId(Long.valueOf(roomItem.roomcode()))
.name(roomItem.roomtitle())
.description(roomItem.roomintro())
.price(Integer.parseInt(roomItem.roomoffseasonminfee1()))
.image(roomItem.roomimg1())
.stock(Integer.parseInt(roomItem.roomcount()))
.capacity(Integer.parseInt(roomItem.roommaxcount()))
.accommodation(
Accommodation.builder()
.id(accommodationId)
.build()
)
.build();

rooms.add(room);
}

return rooms;
}

public Room bringRoom(
long accommodationId,
long roomTypeId
) {
List<Room> rooms = bringRooms(accommodationId);

for (var room : rooms) {
if (room.getRoomTypeId() == roomTypeId) {
return room;
}
}

throw new IllegalArgumentException("객실 정보가 없습니다.");
}

public List<Accommodation> bringAccommodationsForSearch(
public List<Accommodation> bringAccommodations(
int pageNo,
int numOfRows,
String keyword,
String areaCode
String code
) {
var accommodationsSimpleSearchResponse = TourAPIUtils.bringAccommodations(
pageNo,
numOfRows,
keyword,
areaCode
code
);

var searchedItems = accommodationsSimpleSearchResponse.response().body().items().item();
var body = accommodationsSimpleSearchResponse.response().body();

if (searchedItems.isEmpty()) {
throw new IllegalArgumentException("숙소 정보가 없습니다.");
if (body.totalCount() == 0) {
throw new NoAccommodationsFromAPIException();
}
var items = body.items().item();

List<Accommodation> accommodations = new ArrayList<>();

for (var item : searchedItems) {
for (var item : items) {
long accommodationId = Long.parseLong(item.contentid());

accommodations.add(
generateAccommodation(
accommodationId,
item,
null
item
)
);
}
Expand All @@ -151,18 +82,12 @@ public List<Accommodation> bringAccommodationsForSearch(

private static Accommodation generateAccommodation(
long accommodationId,
SearchKeywordResponse.Item keywordItem,
DetailIntroResponse.Item detailItem
AccommodationTourAPIResponse.Item keywordItem
) {
String subfacility = Optional.ofNullable(detailItem)
.map(DetailIntroResponse.Item::subfacility)
.orElse("");

return Accommodation.builder()
.id(accommodationId)
.name(keywordItem.title())
.image(keywordItem.firstimage())
.description(subfacility)
.location(Location.builder()
.address(keywordItem.addr1())
.latitude(Double.valueOf(keywordItem.mapy()))
Expand All @@ -172,4 +97,54 @@ private static Accommodation generateAccommodation(
.build())
.build();
}

public List<Room> bringRooms(long accommodationId) {
RoomTourAPIResponse roomTourAPIResponse = TourAPIUtils.bringRoom(accommodationId);

var body = roomTourAPIResponse.response().body();

if (body.totalCount() == 0) {
throw new NoRoomsFromAPIException();
}

var items = body.items().item();


List<Room> rooms = new ArrayList<>();
for (var item : items) {
Room room = Room.builder()
.roomTypeId(Long.valueOf(item.roomcode()))
.name(item.roomtitle())
.description(item.roomintro())
.price(Integer.parseInt(item.roomoffseasonminfee1()))
.image(item.roomimg1())
.stock(Integer.parseInt(item.roomcount()))
.capacity(Integer.parseInt(item.roommaxcount()))
.accommodation(
Accommodation.builder()
.id(accommodationId)
.build()
)
.build();

rooms.add(room);
}

return rooms;
}

public Room bringRoom(
long accommodationId,
long roomTypeId
) {
List<Room> rooms = bringRooms(accommodationId);

for (var room : rooms) {
if (room.getRoomTypeId() == roomTypeId) {
return room;
}
}

throw new NoRoomsFromAPIException();
}
}
Loading

0 comments on commit b4c0102

Please sign in to comment.