Skip to content

Commit

Permalink
Merge pull request #180 from CODESQUAD-AIRBNB/develop-BE
Browse files Browse the repository at this point in the history
[Team-24][BE] airbnb 프로젝트 PR #3
  • Loading branch information
tmdgusya committed Jun 4, 2022
2 parents ce87402 + 275da67 commit 0845d02
Show file tree
Hide file tree
Showing 32 changed files with 932 additions and 26 deletions.
1 change: 1 addition & 0 deletions be/build.gradle
Original file line number Diff line number Diff line change
Expand Up @@ -21,6 +21,7 @@ repositories {
dependencies {
implementation 'org.springframework.boot:spring-boot-starter-data-jpa'
implementation 'org.springframework.boot:spring-boot-starter-web'
implementation 'org.springframework.boot:spring-boot-starter-validation'
compileOnly 'org.projectlombok:lombok'
runtimeOnly 'com.h2database:h2'
annotationProcessor 'org.projectlombok:lombok'
Expand Down
2 changes: 2 additions & 0 deletions be/src/main/java/kr/codesquad/airbnb/AirbnbApplication.java
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,9 @@

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.boot.web.servlet.ServletComponentScan;

@ServletComponentScan
@SpringBootApplication
public class AirbnbApplication {

Expand Down
48 changes: 48 additions & 0 deletions be/src/main/java/kr/codesquad/airbnb/AuthenticationFilter.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,48 @@
package kr.codesquad.airbnb;

import kr.codesquad.airbnb.exception.ErrorCode;
import kr.codesquad.airbnb.response.ErrorResponse;
import lombok.extern.slf4j.Slf4j;
import org.springframework.web.filter.GenericFilterBean;

import javax.servlet.FilterChain;
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;
import javax.servlet.annotation.WebFilter;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;

@WebFilter(urlPatterns = "/api/*")
@Slf4j
public class AuthenticationFilter extends GenericFilterBean {

@Override
public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException {
HttpServletRequest req = (HttpServletRequest) request;
String token = req.getHeader("token");

if (!token.equals("member1")) {
setForbiddenResponse((HttpServletResponse) response);
return;
}

chain.doFilter(request, response);
}

public void setForbiddenResponse(HttpServletResponse response) {
ErrorCode errorCode = ErrorCode.FORBIDDEN_USER;
log.error("AuthenticationFilter reject request to server. cause = {}", errorCode.getDetail());
response.setStatus(errorCode.getHttpStatus().value());
response.setContentType("application/json");
response.setCharacterEncoding("UTF-8");
ErrorResponse errorResponse = new ErrorResponse(errorCode);
try {
String json = errorResponse.convertToJson();
response.getWriter().write(json);
} catch (IOException e) {
e.printStackTrace();
}
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,32 @@
package kr.codesquad.airbnb.controller;

import kr.codesquad.airbnb.dto.RoomPriceStatisticRequest;
import kr.codesquad.airbnb.exception.CustomException;
import kr.codesquad.airbnb.exception.ErrorCode;
import kr.codesquad.airbnb.response.CommonResponse;
import kr.codesquad.airbnb.service.RoomService;
import lombok.RequiredArgsConstructor;
import org.springframework.web.bind.annotation.*;

import javax.validation.Valid;

@RestController
@RequiredArgsConstructor
@RequestMapping("/api/v1")
public class RoomController {

private final RoomService roomService;

/**
* 체크인, 체크아웃 날짜를 입력받고, 예약 가능한 숙소의 1박 요금 통계를 반환
*/
@ResponseBody
@GetMapping("/rooms/statistic/price")
public CommonResponse viewRoomPriceStatistic(@ModelAttribute @Valid RoomPriceStatisticRequest roomPriceStatisticRequest) {
if (roomPriceStatisticRequest.getCheckIn().isAfter(roomPriceStatisticRequest.getCheckOut())) {
throw new CustomException(ErrorCode.FORBIDDEN_CHECK_OUT_DATE_IS_BEFORE_CHECK_IN);
}

return CommonResponse.okCommonResponse(roomService.findStatisticOfRoomPrice(roomPriceStatisticRequest));
}
}
8 changes: 7 additions & 1 deletion be/src/main/java/kr/codesquad/airbnb/domain/Amenity.java
Original file line number Diff line number Diff line change
@@ -1,12 +1,18 @@
package kr.codesquad.airbnb.domain;

import lombok.AccessLevel;
import lombok.AllArgsConstructor;
import lombok.Getter;
import lombok.NoArgsConstructor;

import javax.persistence.*;
import java.util.ArrayList;
import java.util.List;

@Entity
@Getter
@AllArgsConstructor
@NoArgsConstructor(access = AccessLevel.PROTECTED)
public class Amenity {

@Id
Expand All @@ -17,5 +23,5 @@ public class Amenity {
private String name;

@OneToMany(mappedBy = "amenity")
private List<RoomAmenity> roomAmenities;
private final List<RoomAmenity> roomAmenities = new ArrayList<>();
}
7 changes: 7 additions & 0 deletions be/src/main/java/kr/codesquad/airbnb/domain/Booking.java
Original file line number Diff line number Diff line change
@@ -1,12 +1,18 @@
package kr.codesquad.airbnb.domain;

import lombok.AccessLevel;
import lombok.AllArgsConstructor;
import lombok.Getter;
import lombok.NoArgsConstructor;

import javax.persistence.*;
import java.time.LocalDate;
import java.time.LocalDateTime;

@Entity
@Getter
@AllArgsConstructor
@NoArgsConstructor(access = AccessLevel.PROTECTED)
public class Booking {

@Id
Expand All @@ -29,4 +35,5 @@ public class Booking {
private Guest guest;

private Integer totalPrice;
private LocalDateTime createdAt;
}
7 changes: 6 additions & 1 deletion be/src/main/java/kr/codesquad/airbnb/domain/DiscountTax.java
Original file line number Diff line number Diff line change
@@ -1,13 +1,18 @@
package kr.codesquad.airbnb.domain;

import lombok.AccessLevel;
import lombok.AllArgsConstructor;
import lombok.Getter;
import lombok.NoArgsConstructor;

import javax.persistence.*;
import java.util.ArrayList;
import java.util.List;

@Entity
@Getter
@AllArgsConstructor
@NoArgsConstructor(access = AccessLevel.PROTECTED)
public class DiscountTax {

@Id
Expand All @@ -19,5 +24,5 @@ public class DiscountTax {
private Integer rate;

@OneToMany(mappedBy = "discountTax")
private List<RoomDiscountTax> roomDiscountTax = new ArrayList<>();
private final List<RoomDiscountTax> roomDiscountTax = new ArrayList<>();
}
5 changes: 5 additions & 0 deletions be/src/main/java/kr/codesquad/airbnb/domain/Guest.java
Original file line number Diff line number Diff line change
@@ -1,11 +1,16 @@
package kr.codesquad.airbnb.domain;

import lombok.AccessLevel;
import lombok.AllArgsConstructor;
import lombok.Getter;
import lombok.NoArgsConstructor;

import javax.persistence.Embeddable;

@Embeddable
@Getter
@AllArgsConstructor
@NoArgsConstructor(access = AccessLevel.PROTECTED)
public class Guest {

private Integer adults;
Expand Down
5 changes: 5 additions & 0 deletions be/src/main/java/kr/codesquad/airbnb/domain/Location.java
Original file line number Diff line number Diff line change
@@ -1,11 +1,16 @@
package kr.codesquad.airbnb.domain;

import lombok.AccessLevel;
import lombok.AllArgsConstructor;
import lombok.Getter;
import lombok.NoArgsConstructor;

import javax.persistence.Embeddable;

@Embeddable
@Getter
@AllArgsConstructor
@NoArgsConstructor(access = AccessLevel.PROTECTED)
public class Location {

private String address;
Expand Down
10 changes: 9 additions & 1 deletion be/src/main/java/kr/codesquad/airbnb/domain/Member.java
Original file line number Diff line number Diff line change
@@ -1,13 +1,19 @@
package kr.codesquad.airbnb.domain;

import lombok.AccessLevel;
import lombok.AllArgsConstructor;
import lombok.Getter;
import lombok.NoArgsConstructor;

import javax.persistence.*;
import java.time.LocalDateTime;
import java.util.ArrayList;
import java.util.List;

@Entity
@Getter
@AllArgsConstructor
@NoArgsConstructor(access = AccessLevel.PROTECTED)
public class Member {

@Id
Expand All @@ -18,5 +24,7 @@ public class Member {
private String name;

@OneToMany(mappedBy = "member")
private List<Booking> bookings = new ArrayList<>();
private final List<Booking> bookings = new ArrayList<>();

private LocalDateTime createdAt;
}
11 changes: 8 additions & 3 deletions be/src/main/java/kr/codesquad/airbnb/domain/Room.java
Original file line number Diff line number Diff line change
@@ -1,13 +1,18 @@
package kr.codesquad.airbnb.domain;

import lombok.AccessLevel;
import lombok.AllArgsConstructor;
import lombok.Getter;
import lombok.NoArgsConstructor;

import javax.persistence.*;
import java.util.ArrayList;
import java.util.List;

@Entity
@Getter
@AllArgsConstructor
@NoArgsConstructor(access = AccessLevel.PROTECTED)
public class Room {

@Id
Expand All @@ -16,7 +21,7 @@ public class Room {
private Long id;

@OneToMany(mappedBy = "room")
private List<Booking> bookings = new ArrayList<>();
private final List<Booking> bookings = new ArrayList<>();

private String name;
private String image;
Expand All @@ -28,11 +33,11 @@ public class Room {
private Double bathroom;

@OneToMany(mappedBy = "room")
private List<RoomAmenity> roomAmenities = new ArrayList<>();
private final List<RoomAmenity> roomAmenities = new ArrayList<>();

@Embedded
private Location location;

@OneToMany(mappedBy = "room")
private List<RoomDiscountTax> roomDiscountTaxes = new ArrayList<>();
private final List<RoomDiscountTax> roomDiscountTaxes = new ArrayList<>();
}
5 changes: 5 additions & 0 deletions be/src/main/java/kr/codesquad/airbnb/domain/RoomAmenity.java
Original file line number Diff line number Diff line change
@@ -1,12 +1,17 @@
package kr.codesquad.airbnb.domain;

import lombok.AccessLevel;
import lombok.AllArgsConstructor;
import lombok.Getter;
import lombok.NoArgsConstructor;

import javax.persistence.*;

//숙소 엔티티와 편의시설 엔티티의 다대다 연결을 위한 엔티티
@Entity
@Getter
@AllArgsConstructor
@NoArgsConstructor(access = AccessLevel.PROTECTED)
public class RoomAmenity {

@Id
Expand Down
Original file line number Diff line number Diff line change
@@ -1,12 +1,17 @@
package kr.codesquad.airbnb.domain;

import lombok.AccessLevel;
import lombok.AllArgsConstructor;
import lombok.Getter;
import lombok.NoArgsConstructor;

import javax.persistence.*;

//숙소 엔티티와 할인&세금 엔티티의 다대다 연결을 위한 엔티티
@Entity
@Getter
@AllArgsConstructor
@NoArgsConstructor(access = AccessLevel.PROTECTED)
public class RoomDiscountTax {

@Id
Expand Down
17 changes: 17 additions & 0 deletions be/src/main/java/kr/codesquad/airbnb/dto/CategorizedPrice.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,17 @@
package kr.codesquad.airbnb.dto;

import lombok.Getter;

@Getter
public class CategorizedPrice {

private Integer min;
private Integer max;
private Integer count;

public CategorizedPrice(RangeOfPrice rangeOfPrice, Integer count) {
this.min = rangeOfPrice.getMin();
this.max = rangeOfPrice.getMax();
this.count = count;
}
}
37 changes: 37 additions & 0 deletions be/src/main/java/kr/codesquad/airbnb/dto/RangeOfPrice.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,37 @@
package kr.codesquad.airbnb.dto;

import lombok.Getter;
import lombok.RequiredArgsConstructor;

@RequiredArgsConstructor
@Getter
public enum RangeOfPrice {

RANGE_0_TO_50000(0, 50000),
RANGE_50001_TO_100000(50001, 100000),
RANGE_100001_TO_150000(100001, 150000),
RANGE_150001_TO_200000(150001, 200000),
RANGE_200001_TO_250000(200001, 250000),
RANGE_250001_TO_300000(250001, 300000),
RANGE_300001_TO_350000(300001, 350000),
RANGE_350001_TO_400000(350001, 400000),
RANGE_400001_TO_450000(400001, 450000),
RANGE_450001_TO_500000(450001, 500000),
RANGE_500001_TO_550000(500001, 550000),
RANGE_550001_TO_600000(550001, 600000),
RANGE_600001_TO_650000(600001, 650000),
RANGE_650001_TO_700000(650001, 700000),
RANGE_700001_TO_750000(700001, 750000),
RANGE_750001_TO_800000(750001, 800000),
RANGE_800001_TO_850000(800001, 850000),
RANGE_850001_TO_900000(850001, 900000),
RANGE_900001_TO_950000(900001, 950000),
RANGE_950001_TO_1000000(950001, 1000000),
RANGE_1000001_TO_1050000(1000001, 1050000),
RANGE_1050001_TO_1100000(1050001, 1100000),

;

private final Integer min;
private final Integer max;
}
Loading

0 comments on commit 0845d02

Please sign in to comment.