diff --git a/server/build.gradle.kts b/server/build.gradle.kts index 7b0c872..e17c268 100644 --- a/server/build.gradle.kts +++ b/server/build.gradle.kts @@ -23,13 +23,23 @@ repositories { mavenCentral() } + + dependencies { implementation ("org.springframework.boot:spring-boot-starter-data-jpa") - implementation ("org.springframework.boot:spring-boot-starter-security") +// implementation ("org.springframework.boot:spring-boot-starter-security") implementation ("org.springframework.boot:spring-boot-starter-validation") implementation ("org.springframework.boot:spring-boot-starter-web") - + implementation("org.springframework.boot:spring-boot-starter-actuator") implementation ("com.github.ulisesbocchio:jasypt-spring-boot-starter:3.0.4") + implementation ("org.springframework.boot:spring-boot-starter-log4j2") + implementation ("com.lmax:disruptor:3.4.2") + + modules { + module("org.springframework.boot:spring-boot-starter-logging") { + replacedBy("org.springframework.boot:spring-boot-starter-log4j2", "Use Log4j2 instead of Logback") + } + } compileOnly ("org.projectlombok:lombok") runtimeOnly ("mysql:mysql-connector-java") diff --git a/server/src/main/java/com/ticketing/server/ServerApplication.java b/server/src/main/java/com/ticketing/server/ServerApplication.java index f6f944d..5264f3e 100644 --- a/server/src/main/java/com/ticketing/server/ServerApplication.java +++ b/server/src/main/java/com/ticketing/server/ServerApplication.java @@ -2,7 +2,9 @@ package com.ticketing.server; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; +import org.springframework.data.jpa.repository.config.EnableJpaAuditing; +@EnableJpaAuditing @SpringBootApplication public class ServerApplication { diff --git a/server/src/main/java/com/ticketing/server/global/dto/repository/AbstractEntity.java b/server/src/main/java/com/ticketing/server/global/dto/repository/AbstractEntity.java new file mode 100644 index 0000000..f2384f9 --- /dev/null +++ b/server/src/main/java/com/ticketing/server/global/dto/repository/AbstractEntity.java @@ -0,0 +1,31 @@ +package com.ticketing.server.global.dto.repository; + +import java.time.LocalDateTime; +import javax.persistence.Column; +import javax.persistence.EntityListeners; +import javax.persistence.GeneratedValue; +import javax.persistence.GenerationType; +import javax.persistence.Id; +import javax.persistence.MappedSuperclass; +import lombok.Getter; +import org.springframework.data.annotation.CreatedDate; +import org.springframework.data.annotation.LastModifiedDate; +import org.springframework.data.jpa.domain.support.AuditingEntityListener; + +@MappedSuperclass +@EntityListeners(AuditingEntityListener.class) +@Getter +public abstract class AbstractEntity { + + @Id + @GeneratedValue(strategy = GenerationType.IDENTITY) + private Long id; + + @Column(nullable = false, updatable = false) + @CreatedDate + private LocalDateTime createdAt; + + @LastModifiedDate + private LocalDateTime updatedAt; + +} diff --git a/server/src/main/java/com/ticketing/server/global/health/L7checkController.java b/server/src/main/java/com/ticketing/server/global/health/L7checkController.java new file mode 100644 index 0000000..109e392 --- /dev/null +++ b/server/src/main/java/com/ticketing/server/global/health/L7checkController.java @@ -0,0 +1,43 @@ +package com.ticketing.server.global.health; + +import lombok.RequiredArgsConstructor; +import org.springframework.boot.actuate.health.Health; +import org.springframework.boot.actuate.health.Status; +import org.springframework.http.HttpStatus; +import org.springframework.http.ResponseEntity; +import org.springframework.web.bind.annotation.DeleteMapping; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.PostMapping; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.ResponseStatus; +import org.springframework.web.bind.annotation.RestController; + +@RestController +@RequestMapping("/l7check") +@RequiredArgsConstructor +public class L7checkController { + + private final MutableHealthIndicator indicator; + + @GetMapping + public ResponseEntity health() { + Health health = indicator.health(); + boolean isUp = health.getStatus().equals(Status.UP); + return ResponseEntity + .status(isUp ? HttpStatus.OK : HttpStatus.SERVICE_UNAVAILABLE) + .build(); + } + + @DeleteMapping + @ResponseStatus(HttpStatus.NO_CONTENT) + public void down() { + indicator.setHealth(Health.down().build()); + } + + @PostMapping + @ResponseStatus(HttpStatus.CREATED) + public void up() { + indicator.setHealth(Health.up().build()); + } + +} diff --git a/server/src/main/java/com/ticketing/server/global/health/ManualHealthIndicator.java b/server/src/main/java/com/ticketing/server/global/health/ManualHealthIndicator.java new file mode 100644 index 0000000..ca7615c --- /dev/null +++ b/server/src/main/java/com/ticketing/server/global/health/ManualHealthIndicator.java @@ -0,0 +1,22 @@ +package com.ticketing.server.global.health; + +import java.util.concurrent.atomic.AtomicReference; +import org.springframework.boot.actuate.health.Health; +import org.springframework.stereotype.Component; + +@Component +public class ManualHealthIndicator implements MutableHealthIndicator { + + private final AtomicReference healthRef = new AtomicReference<>(Health.up().build()); + + @Override + public void setHealth(Health health) { + healthRef.set(health); + } + + @Override + public Health health() { + return healthRef.get(); + } + +} diff --git a/server/src/main/java/com/ticketing/server/global/health/MutableHealthIndicator.java b/server/src/main/java/com/ticketing/server/global/health/MutableHealthIndicator.java new file mode 100644 index 0000000..dce53d9 --- /dev/null +++ b/server/src/main/java/com/ticketing/server/global/health/MutableHealthIndicator.java @@ -0,0 +1,10 @@ +package com.ticketing.server.global.health; + +import org.springframework.boot.actuate.health.Health; +import org.springframework.boot.actuate.health.HealthIndicator; + +public interface MutableHealthIndicator extends HealthIndicator { + + void setHealth(Health health); + +} diff --git a/server/src/main/java/com/ticketing/server/movie/application/MovieController.java b/server/src/main/java/com/ticketing/server/movie/application/MovieController.java new file mode 100644 index 0000000..b1ef2f8 --- /dev/null +++ b/server/src/main/java/com/ticketing/server/movie/application/MovieController.java @@ -0,0 +1,8 @@ +package com.ticketing.server.movie.application; + +import org.springframework.web.bind.annotation.RestController; + +@RestController +public class MovieController { + +} diff --git a/server/src/main/java/com/ticketing/server/movie/application/MovieTimesController.java b/server/src/main/java/com/ticketing/server/movie/application/MovieTimesController.java new file mode 100644 index 0000000..b4486f2 --- /dev/null +++ b/server/src/main/java/com/ticketing/server/movie/application/MovieTimesController.java @@ -0,0 +1,8 @@ +package com.ticketing.server.movie.application; + +import org.springframework.web.bind.annotation.RestController; + +@RestController +public class MovieTimesController { + +} diff --git a/server/src/main/java/com/ticketing/server/movie/application/SeatController.java b/server/src/main/java/com/ticketing/server/movie/application/SeatController.java new file mode 100644 index 0000000..66e2d10 --- /dev/null +++ b/server/src/main/java/com/ticketing/server/movie/application/SeatController.java @@ -0,0 +1,8 @@ +package com.ticketing.server.movie.application; + +import org.springframework.web.bind.annotation.RestController; + +@RestController +public class SeatController { + +} diff --git a/server/src/main/java/com/ticketing/server/movie/application/TheaterController.java b/server/src/main/java/com/ticketing/server/movie/application/TheaterController.java new file mode 100644 index 0000000..763e210 --- /dev/null +++ b/server/src/main/java/com/ticketing/server/movie/application/TheaterController.java @@ -0,0 +1,8 @@ +package com.ticketing.server.movie.application; + +import org.springframework.web.bind.annotation.RestController; + +@RestController +public class TheaterController { + +} diff --git a/server/src/main/java/com/ticketing/server/movie/application/TicketController.java b/server/src/main/java/com/ticketing/server/movie/application/TicketController.java new file mode 100644 index 0000000..d55ffac --- /dev/null +++ b/server/src/main/java/com/ticketing/server/movie/application/TicketController.java @@ -0,0 +1,8 @@ +package com.ticketing.server.movie.application; + +import org.springframework.web.bind.annotation.RestController; + +@RestController +public class TicketController { + +} diff --git a/server/src/main/java/com/ticketing/server/movie/domain/Movie.java b/server/src/main/java/com/ticketing/server/movie/domain/Movie.java new file mode 100644 index 0000000..0529484 --- /dev/null +++ b/server/src/main/java/com/ticketing/server/movie/domain/Movie.java @@ -0,0 +1,18 @@ +package com.ticketing.server.movie.domain; + +import com.ticketing.server.global.dto.repository.AbstractEntity; +import javax.persistence.Entity; +import javax.validation.constraints.NotNull; +import lombok.Getter; + +@Entity +@Getter +public class Movie extends AbstractEntity { + + @NotNull + private String title; + + @NotNull + private Integer runningTime; + +} diff --git a/server/src/main/java/com/ticketing/server/movie/domain/MovieTimes.java b/server/src/main/java/com/ticketing/server/movie/domain/MovieTimes.java new file mode 100644 index 0000000..4931f3a --- /dev/null +++ b/server/src/main/java/com/ticketing/server/movie/domain/MovieTimes.java @@ -0,0 +1,38 @@ +package com.ticketing.server.movie.domain; + +import com.ticketing.server.global.dto.repository.AbstractEntity; +import java.time.LocalDate; +import java.time.LocalDateTime; +import javax.persistence.Entity; +import javax.persistence.JoinColumn; +import javax.persistence.ManyToOne; +import javax.validation.constraints.NotNull; +import lombok.Getter; + +@Entity +@Getter +public class MovieTimes extends AbstractEntity { + + @NotNull + @ManyToOne + @JoinColumn(name = "movie_id", referencedColumnName = "id", updatable = false) + private Movie movie; + + @NotNull + @ManyToOne + @JoinColumn(name = "theater_id", referencedColumnName = "id", updatable = false) + private Theater theater; + + @NotNull + private LocalDate runningDate; + + @NotNull + private Integer round; + + @NotNull + private LocalDateTime startAt; + + @NotNull + private LocalDateTime endAt; + +} diff --git a/server/src/main/java/com/ticketing/server/movie/domain/Seat.java b/server/src/main/java/com/ticketing/server/movie/domain/Seat.java new file mode 100644 index 0000000..ca08810 --- /dev/null +++ b/server/src/main/java/com/ticketing/server/movie/domain/Seat.java @@ -0,0 +1,25 @@ +package com.ticketing.server.movie.domain; + +import com.ticketing.server.global.dto.repository.AbstractEntity; +import javax.persistence.Entity; +import javax.persistence.JoinColumn; +import javax.persistence.ManyToOne; +import javax.validation.constraints.NotNull; +import lombok.Getter; + +@Entity +@Getter +public class Seat extends AbstractEntity { + + @NotNull + @ManyToOne + @JoinColumn(name = "theater_id", referencedColumnName = "id", updatable = false) + private Theater theater; + + @NotNull + private Integer seatColumn; + + @NotNull + private Integer seatRow; + +} diff --git a/server/src/main/java/com/ticketing/server/movie/domain/Theater.java b/server/src/main/java/com/ticketing/server/movie/domain/Theater.java new file mode 100644 index 0000000..a29dbb9 --- /dev/null +++ b/server/src/main/java/com/ticketing/server/movie/domain/Theater.java @@ -0,0 +1,17 @@ +package com.ticketing.server.movie.domain; + +import com.ticketing.server.global.dto.repository.AbstractEntity; +import javax.persistence.Entity; +import javax.validation.constraints.NotNull; +import lombok.Getter; + +@Entity +@Getter +public class Theater extends AbstractEntity { + + @NotNull + private Integer theaterNumber; + + private Integer seatCount; + +} diff --git a/server/src/main/java/com/ticketing/server/movie/domain/Ticket.java b/server/src/main/java/com/ticketing/server/movie/domain/Ticket.java new file mode 100644 index 0000000..6ca692c --- /dev/null +++ b/server/src/main/java/com/ticketing/server/movie/domain/Ticket.java @@ -0,0 +1,35 @@ +package com.ticketing.server.movie.domain; + +import com.ticketing.server.global.dto.repository.AbstractEntity; +import com.ticketing.server.payment.domain.Payment; +import javax.persistence.Entity; +import javax.persistence.JoinColumn; +import javax.persistence.ManyToOne; +import javax.validation.constraints.NotNull; +import lombok.Getter; + +@Entity +@Getter +public class Ticket extends AbstractEntity { + + @NotNull + @ManyToOne + @JoinColumn(name = "seat_id", referencedColumnName = "id", updatable = false) + private Seat seat; + + @NotNull + @ManyToOne + @JoinColumn(name = "movie_times_id", referencedColumnName = "id", updatable = false) + private MovieTimes movieTimes; + + @ManyToOne + @JoinColumn(name = "payment_id", referencedColumnName = "id", updatable = false) + private Payment payment; + + @NotNull + private TicketStatus status; + + @NotNull + private Integer ticketPrice; + +} diff --git a/server/src/main/java/com/ticketing/server/movie/domain/TicketStatus.java b/server/src/main/java/com/ticketing/server/movie/domain/TicketStatus.java new file mode 100644 index 0000000..e02118b --- /dev/null +++ b/server/src/main/java/com/ticketing/server/movie/domain/TicketStatus.java @@ -0,0 +1,15 @@ +package com.ticketing.server.movie.domain; + +import lombok.AllArgsConstructor; +import lombok.Getter; + +@Getter +@AllArgsConstructor +public enum TicketStatus { + SALE("판매가능"), + SCHEDULED("환불"), + SOLD("판매완료"); + + private String name; + +} diff --git a/server/src/main/java/com/ticketing/server/movie/domain/repository/MovieRepository.java b/server/src/main/java/com/ticketing/server/movie/domain/repository/MovieRepository.java new file mode 100644 index 0000000..d2021e0 --- /dev/null +++ b/server/src/main/java/com/ticketing/server/movie/domain/repository/MovieRepository.java @@ -0,0 +1,10 @@ +package com.ticketing.server.movie.domain.repository; + +import com.ticketing.server.movie.domain.Movie; +import org.springframework.data.jpa.repository.JpaRepository; +import org.springframework.stereotype.Repository; + +@Repository +public interface MovieRepository extends JpaRepository { + +} diff --git a/server/src/main/java/com/ticketing/server/movie/domain/repository/MovieTimesRepository.java b/server/src/main/java/com/ticketing/server/movie/domain/repository/MovieTimesRepository.java new file mode 100644 index 0000000..59fc7b2 --- /dev/null +++ b/server/src/main/java/com/ticketing/server/movie/domain/repository/MovieTimesRepository.java @@ -0,0 +1,10 @@ +package com.ticketing.server.movie.domain.repository; + +import com.ticketing.server.movie.domain.MovieTimes; +import org.springframework.data.jpa.repository.JpaRepository; +import org.springframework.stereotype.Repository; + +@Repository +public interface MovieTimesRepository extends JpaRepository { + +} diff --git a/server/src/main/java/com/ticketing/server/movie/domain/repository/SeatRepository.java b/server/src/main/java/com/ticketing/server/movie/domain/repository/SeatRepository.java new file mode 100644 index 0000000..ae8de7f --- /dev/null +++ b/server/src/main/java/com/ticketing/server/movie/domain/repository/SeatRepository.java @@ -0,0 +1,10 @@ +package com.ticketing.server.movie.domain.repository; + +import com.ticketing.server.movie.domain.Seat; +import org.springframework.data.jpa.repository.JpaRepository; +import org.springframework.stereotype.Repository; + +@Repository +public interface SeatRepository extends JpaRepository { + +} diff --git a/server/src/main/java/com/ticketing/server/movie/domain/repository/TheaterRepository.java b/server/src/main/java/com/ticketing/server/movie/domain/repository/TheaterRepository.java new file mode 100644 index 0000000..2b0b6b4 --- /dev/null +++ b/server/src/main/java/com/ticketing/server/movie/domain/repository/TheaterRepository.java @@ -0,0 +1,10 @@ +package com.ticketing.server.movie.domain.repository; + +import com.ticketing.server.movie.domain.Theater; +import org.springframework.data.jpa.repository.JpaRepository; +import org.springframework.stereotype.Repository; + +@Repository +public interface TheaterRepository extends JpaRepository { + +} diff --git a/server/src/main/java/com/ticketing/server/movie/domain/repository/TicketRepository.java b/server/src/main/java/com/ticketing/server/movie/domain/repository/TicketRepository.java new file mode 100644 index 0000000..362a19e --- /dev/null +++ b/server/src/main/java/com/ticketing/server/movie/domain/repository/TicketRepository.java @@ -0,0 +1,10 @@ +package com.ticketing.server.movie.domain.repository; + +import com.ticketing.server.movie.domain.Ticket; +import org.springframework.data.jpa.repository.JpaRepository; +import org.springframework.stereotype.Repository; + +@Repository +public interface TicketRepository extends JpaRepository { + +} diff --git a/server/src/main/java/com/ticketing/server/movie/service/MovieServiceImpl.java b/server/src/main/java/com/ticketing/server/movie/service/MovieServiceImpl.java new file mode 100644 index 0000000..c3d3e3a --- /dev/null +++ b/server/src/main/java/com/ticketing/server/movie/service/MovieServiceImpl.java @@ -0,0 +1,9 @@ +package com.ticketing.server.movie.service; + +import com.ticketing.server.movie.service.interfaces.MovieService; +import org.springframework.stereotype.Service; + +@Service +public class MovieServiceImpl implements MovieService { + +} diff --git a/server/src/main/java/com/ticketing/server/movie/service/MovieTimesServiceImpl.java b/server/src/main/java/com/ticketing/server/movie/service/MovieTimesServiceImpl.java new file mode 100644 index 0000000..0e4e26b --- /dev/null +++ b/server/src/main/java/com/ticketing/server/movie/service/MovieTimesServiceImpl.java @@ -0,0 +1,9 @@ +package com.ticketing.server.movie.service; + +import com.ticketing.server.movie.service.interfaces.MovieTimesService; +import org.springframework.stereotype.Service; + +@Service +public class MovieTimesServiceImpl implements MovieTimesService { + +} diff --git a/server/src/main/java/com/ticketing/server/movie/service/SeatServiceImpl.java b/server/src/main/java/com/ticketing/server/movie/service/SeatServiceImpl.java new file mode 100644 index 0000000..9960726 --- /dev/null +++ b/server/src/main/java/com/ticketing/server/movie/service/SeatServiceImpl.java @@ -0,0 +1,9 @@ +package com.ticketing.server.movie.service; + +import com.ticketing.server.movie.service.interfaces.SeatService; +import org.springframework.stereotype.Service; + +@Service +public class SeatServiceImpl implements SeatService { + +} diff --git a/server/src/main/java/com/ticketing/server/movie/service/TheaterServiceImpl.java b/server/src/main/java/com/ticketing/server/movie/service/TheaterServiceImpl.java new file mode 100644 index 0000000..94be0e9 --- /dev/null +++ b/server/src/main/java/com/ticketing/server/movie/service/TheaterServiceImpl.java @@ -0,0 +1,9 @@ +package com.ticketing.server.movie.service; + +import com.ticketing.server.movie.service.interfaces.TheaterService; +import org.springframework.stereotype.Service; + +@Service +public class TheaterServiceImpl implements TheaterService { + +} diff --git a/server/src/main/java/com/ticketing/server/movie/service/TicketServiceImpl.java b/server/src/main/java/com/ticketing/server/movie/service/TicketServiceImpl.java new file mode 100644 index 0000000..c4c9eb0 --- /dev/null +++ b/server/src/main/java/com/ticketing/server/movie/service/TicketServiceImpl.java @@ -0,0 +1,9 @@ +package com.ticketing.server.movie.service; + +import com.ticketing.server.movie.service.interfaces.TicketService; +import org.springframework.stereotype.Service; + +@Service +public class TicketServiceImpl implements TicketService { + +} diff --git a/server/src/main/java/com/ticketing/server/movie/service/interfaces/MovieService.java b/server/src/main/java/com/ticketing/server/movie/service/interfaces/MovieService.java new file mode 100644 index 0000000..413335b --- /dev/null +++ b/server/src/main/java/com/ticketing/server/movie/service/interfaces/MovieService.java @@ -0,0 +1,5 @@ +package com.ticketing.server.movie.service.interfaces; + +public interface MovieService { + +} diff --git a/server/src/main/java/com/ticketing/server/movie/service/interfaces/MovieTimesService.java b/server/src/main/java/com/ticketing/server/movie/service/interfaces/MovieTimesService.java new file mode 100644 index 0000000..4a84b00 --- /dev/null +++ b/server/src/main/java/com/ticketing/server/movie/service/interfaces/MovieTimesService.java @@ -0,0 +1,5 @@ +package com.ticketing.server.movie.service.interfaces; + +public interface MovieTimesService { + +} diff --git a/server/src/main/java/com/ticketing/server/movie/service/interfaces/SeatService.java b/server/src/main/java/com/ticketing/server/movie/service/interfaces/SeatService.java new file mode 100644 index 0000000..7b86a68 --- /dev/null +++ b/server/src/main/java/com/ticketing/server/movie/service/interfaces/SeatService.java @@ -0,0 +1,5 @@ +package com.ticketing.server.movie.service.interfaces; + +public interface SeatService { + +} diff --git a/server/src/main/java/com/ticketing/server/movie/service/interfaces/TheaterService.java b/server/src/main/java/com/ticketing/server/movie/service/interfaces/TheaterService.java new file mode 100644 index 0000000..f8410e2 --- /dev/null +++ b/server/src/main/java/com/ticketing/server/movie/service/interfaces/TheaterService.java @@ -0,0 +1,5 @@ +package com.ticketing.server.movie.service.interfaces; + +public interface TheaterService { + +} diff --git a/server/src/main/java/com/ticketing/server/movie/service/interfaces/TicketService.java b/server/src/main/java/com/ticketing/server/movie/service/interfaces/TicketService.java new file mode 100644 index 0000000..a994d32 --- /dev/null +++ b/server/src/main/java/com/ticketing/server/movie/service/interfaces/TicketService.java @@ -0,0 +1,5 @@ +package com.ticketing.server.movie.service.interfaces; + +public interface TicketService { + +} diff --git a/server/src/main/java/com/ticketing/server/payment/application/PaymentController.java b/server/src/main/java/com/ticketing/server/payment/application/PaymentController.java new file mode 100644 index 0000000..4751887 --- /dev/null +++ b/server/src/main/java/com/ticketing/server/payment/application/PaymentController.java @@ -0,0 +1,8 @@ +package com.ticketing.server.payment.application; + +import org.springframework.web.bind.annotation.RestController; + +@RestController +public class PaymentController { + +} diff --git a/server/src/main/java/com/ticketing/server/payment/domain/Payment.java b/server/src/main/java/com/ticketing/server/payment/domain/Payment.java new file mode 100644 index 0000000..22865ab --- /dev/null +++ b/server/src/main/java/com/ticketing/server/payment/domain/Payment.java @@ -0,0 +1,38 @@ +package com.ticketing.server.payment.domain; + +import com.ticketing.server.global.dto.repository.AbstractEntity; +import com.ticketing.server.user.domain.User; +import javax.persistence.Entity; +import javax.persistence.EnumType; +import javax.persistence.Enumerated; +import javax.persistence.JoinColumn; +import javax.persistence.ManyToOne; +import javax.validation.constraints.NotNull; +import lombok.Getter; + +@Entity +@Getter +public class Payment extends AbstractEntity { + + @NotNull + @ManyToOne + @JoinColumn(name = "user_id", referencedColumnName = "id", updatable = false) + private User user; + + @NotNull + @Enumerated(value = EnumType.STRING) + private PaymentType type; + + @NotNull + @Enumerated(value = EnumType.STRING) + private PaymentStatus status; + + private String failedMessage; + + @NotNull + private String paymentNumber; + + @NotNull + private Integer totalPrice; + +} diff --git a/server/src/main/java/com/ticketing/server/payment/domain/PaymentStatus.java b/server/src/main/java/com/ticketing/server/payment/domain/PaymentStatus.java new file mode 100644 index 0000000..f96e6ae --- /dev/null +++ b/server/src/main/java/com/ticketing/server/payment/domain/PaymentStatus.java @@ -0,0 +1,5 @@ +package com.ticketing.server.payment.domain; + +public enum PaymentStatus { + COMPLETED, REFUNDED, FAILED +} diff --git a/server/src/main/java/com/ticketing/server/payment/domain/PaymentType.java b/server/src/main/java/com/ticketing/server/payment/domain/PaymentType.java new file mode 100644 index 0000000..fb9d132 --- /dev/null +++ b/server/src/main/java/com/ticketing/server/payment/domain/PaymentType.java @@ -0,0 +1,5 @@ +package com.ticketing.server.payment.domain; + +public enum PaymentType { + KAKAO_PAY +} diff --git a/server/src/main/java/com/ticketing/server/payment/domain/repository/PaymentRepository.java b/server/src/main/java/com/ticketing/server/payment/domain/repository/PaymentRepository.java new file mode 100644 index 0000000..530012b --- /dev/null +++ b/server/src/main/java/com/ticketing/server/payment/domain/repository/PaymentRepository.java @@ -0,0 +1,10 @@ +package com.ticketing.server.payment.domain.repository; + +import com.ticketing.server.payment.domain.Payment; +import org.springframework.data.jpa.repository.JpaRepository; +import org.springframework.stereotype.Repository; + +@Repository +public interface PaymentRepository extends JpaRepository { + +} diff --git a/server/src/main/java/com/ticketing/server/payment/service/PaymentServiceImpl.java b/server/src/main/java/com/ticketing/server/payment/service/PaymentServiceImpl.java new file mode 100644 index 0000000..925f853 --- /dev/null +++ b/server/src/main/java/com/ticketing/server/payment/service/PaymentServiceImpl.java @@ -0,0 +1,9 @@ +package com.ticketing.server.payment.service; + +import com.ticketing.server.payment.service.interfaces.PaymentService; +import org.springframework.stereotype.Service; + +@Service +public class PaymentServiceImpl implements PaymentService { + +} diff --git a/server/src/main/java/com/ticketing/server/payment/service/interfaces/PaymentService.java b/server/src/main/java/com/ticketing/server/payment/service/interfaces/PaymentService.java new file mode 100644 index 0000000..6d8489b --- /dev/null +++ b/server/src/main/java/com/ticketing/server/payment/service/interfaces/PaymentService.java @@ -0,0 +1,5 @@ +package com.ticketing.server.payment.service.interfaces; + +public interface PaymentService { + +} diff --git a/server/src/main/java/com/ticketing/server/user/application/UserController.java b/server/src/main/java/com/ticketing/server/user/application/UserController.java new file mode 100644 index 0000000..980672c --- /dev/null +++ b/server/src/main/java/com/ticketing/server/user/application/UserController.java @@ -0,0 +1,8 @@ +package com.ticketing.server.user.application; + +import org.springframework.web.bind.annotation.RestController; + +@RestController +public class UserController { + +} diff --git a/server/src/main/java/com/ticketing/server/user/domain/User.java b/server/src/main/java/com/ticketing/server/user/domain/User.java new file mode 100644 index 0000000..a845802 --- /dev/null +++ b/server/src/main/java/com/ticketing/server/user/domain/User.java @@ -0,0 +1,47 @@ +package com.ticketing.server.user.domain; + +import com.ticketing.server.global.dto.repository.AbstractEntity; +import java.time.LocalDateTime; +import javax.persistence.Entity; +import javax.persistence.EnumType; +import javax.persistence.Enumerated; +import javax.validation.constraints.NotNull; +import lombok.Builder; +import lombok.Getter; +import lombok.NoArgsConstructor; + +@Entity +@Getter +@NoArgsConstructor +public class User extends AbstractEntity { + + @NotNull + private String name; + + @NotNull + private String email; + + @NotNull + private String password; + + @NotNull + @Enumerated(value = EnumType.STRING) + private UserGrade grade; + + @NotNull + private String phone; + + private boolean isDeleted = false; + + private LocalDateTime deletedAt; + + @Builder + protected User(String name, String email, String password, UserGrade grade, String phone) { + this.name = name; + this.email = email; + this.password = password; + this.grade = grade; + this.phone = phone; + } + +} diff --git a/server/src/main/java/com/ticketing/server/user/domain/UserGrade.java b/server/src/main/java/com/ticketing/server/user/domain/UserGrade.java new file mode 100644 index 0000000..d6ba4e6 --- /dev/null +++ b/server/src/main/java/com/ticketing/server/user/domain/UserGrade.java @@ -0,0 +1,5 @@ +package com.ticketing.server.user.domain; + +public enum UserGrade { + GUEST, STAFF +} diff --git a/server/src/main/java/com/ticketing/server/user/domain/repository/UserRepository.java b/server/src/main/java/com/ticketing/server/user/domain/repository/UserRepository.java new file mode 100644 index 0000000..9104cc6 --- /dev/null +++ b/server/src/main/java/com/ticketing/server/user/domain/repository/UserRepository.java @@ -0,0 +1,10 @@ +package com.ticketing.server.user.domain.repository; + +import com.ticketing.server.user.domain.User; +import org.springframework.data.jpa.repository.JpaRepository; +import org.springframework.stereotype.Repository; + +@Repository +public interface UserRepository extends JpaRepository { + +} diff --git a/server/src/main/java/com/ticketing/server/user/service/UserServiceImpl.java b/server/src/main/java/com/ticketing/server/user/service/UserServiceImpl.java new file mode 100644 index 0000000..a10d6d3 --- /dev/null +++ b/server/src/main/java/com/ticketing/server/user/service/UserServiceImpl.java @@ -0,0 +1,9 @@ +package com.ticketing.server.user.service; + +import com.ticketing.server.user.service.interfaces.UserService; +import org.springframework.stereotype.Service; + +@Service +public class UserServiceImpl implements UserService { + +} diff --git a/server/src/main/java/com/ticketing/server/user/service/interfaces/UserService.java b/server/src/main/java/com/ticketing/server/user/service/interfaces/UserService.java new file mode 100644 index 0000000..a5e676e --- /dev/null +++ b/server/src/main/java/com/ticketing/server/user/service/interfaces/UserService.java @@ -0,0 +1,5 @@ +package com.ticketing.server.user.service.interfaces; + +public interface UserService { + +} diff --git a/server/src/main/resources/application.yml b/server/src/main/resources/application.yml index c215619..6dcad0f 100644 --- a/server/src/main/resources/application.yml +++ b/server/src/main/resources/application.yml @@ -14,17 +14,6 @@ spring: connection-timeout: 30000 # default 30s maximum-pool-size: 10 # default 10 max-lifetime: 1800000 # default 30 minutes - data-source-properties: - cachePrepStmts: true - prepStmtCacheSize: 250 - prepStmtCacheSqlLimit: 2048 - useServerPrepStmts: true - useLocalSessionState: true - rewriteBatchedStatements: true - cacheResultSetMetadata: true - cacheServerConfiguration: true - elideSetAutoCommits: true - maintainTimeStats: false jasypt: encryptor: diff --git a/server/src/main/resources/log4j2.xml b/server/src/main/resources/log4j2.xml new file mode 100644 index 0000000..41eb937 --- /dev/null +++ b/server/src/main/resources/log4j2.xml @@ -0,0 +1,38 @@ + + + + + ./logs/log + %d{HH:mm:ss.SSS} [%t] %-5level %logger{36} - %msg%n + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/server/src/test/java/com/ticketing/server/ServerApplicationTests.java b/server/src/test/java/com/ticketing/server/ServerApplicationTests.java index 5214e7d..5d5a1f1 100644 --- a/server/src/test/java/com/ticketing/server/ServerApplicationTests.java +++ b/server/src/test/java/com/ticketing/server/ServerApplicationTests.java @@ -2,8 +2,10 @@ package com.ticketing.server; import org.junit.jupiter.api.Test; import org.springframework.boot.test.context.SpringBootTest; +import org.springframework.data.jpa.repository.config.EnableJpaAuditing; @SpringBootTest +@EnableJpaAuditing class ServerApplicationTests { @Test diff --git a/server/src/test/java/com/ticketing/server/global/health/L7checkControllerTest.java b/server/src/test/java/com/ticketing/server/global/health/L7checkControllerTest.java new file mode 100644 index 0000000..477b512 --- /dev/null +++ b/server/src/test/java/com/ticketing/server/global/health/L7checkControllerTest.java @@ -0,0 +1,51 @@ +package com.ticketing.server.global.health; + +import static org.assertj.core.api.Assertions.assertThat; + +import java.util.concurrent.TimeUnit; +import org.junit.jupiter.api.Test; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.boot.test.context.SpringBootTest; +import org.springframework.boot.test.context.SpringBootTest.WebEnvironment; +import org.springframework.boot.test.web.client.TestRestTemplate; +import org.springframework.http.HttpStatus; +import org.springframework.http.ResponseEntity; + +@SpringBootTest(webEnvironment = WebEnvironment.RANDOM_PORT) +class L7checkControllerTest { + + private static final String L7CHECK = "/l7check"; + private static final String HEALTH = "/actuator/health"; + + @Autowired + TestRestTemplate restTemplate; + + @Test + void downAndUp() throws InterruptedException { + // before + expectUrlStatus(L7CHECK, HttpStatus.OK); + expectUrlStatus(HEALTH, HttpStatus.OK); + + // down + restTemplate.delete(L7CHECK); + + // then down + TimeUnit.MILLISECONDS.sleep(1000); + expectUrlStatus(L7CHECK, HttpStatus.SERVICE_UNAVAILABLE); + expectUrlStatus(HEALTH, HttpStatus.SERVICE_UNAVAILABLE); + + // up + restTemplate.postForEntity(L7CHECK, null, Object.class); + + // then up + TimeUnit.MILLISECONDS.sleep(1000); + expectUrlStatus(L7CHECK, HttpStatus.OK); + expectUrlStatus(HEALTH, HttpStatus.OK); + } + + private void expectUrlStatus(String url, HttpStatus status) { + ResponseEntity res = restTemplate.getForEntity(url, Object.class); + assertThat(res.getStatusCode()).isEqualTo(status); + } + +} diff --git a/server/src/test/java/com/ticketing/server/user/domain/repository/UserRepositoryTest.java b/server/src/test/java/com/ticketing/server/user/domain/repository/UserRepositoryTest.java new file mode 100644 index 0000000..a5d5ec3 --- /dev/null +++ b/server/src/test/java/com/ticketing/server/user/domain/repository/UserRepositoryTest.java @@ -0,0 +1,37 @@ +package com.ticketing.server.user.domain.repository; + +import static org.assertj.core.api.Assertions.assertThat; + +import com.ticketing.server.user.domain.User; +import com.ticketing.server.user.domain.UserGrade; +import org.junit.jupiter.api.Test; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.boot.test.context.SpringBootTest; +import org.springframework.transaction.annotation.Transactional; + +@SpringBootTest +@Transactional +class UserRepositoryTest { + + @Autowired + UserRepository userRepository; + + @Test + void 유저레포지토리테스트() { + // given + User user = User.builder() + .name("동효") + .password("test") + .email("test@test.com") + .grade(UserGrade.GUEST) + .phone("010-1234-5678") + .build(); + + // when + userRepository.save(user); + + // then + assertThat(user).isNotNull(); + } + +} diff --git a/server/src/test/resources/application.yml b/server/src/test/resources/application.yml index 04abf91..f586e51 100644 --- a/server/src/test/resources/application.yml +++ b/server/src/test/resources/application.yml @@ -1,8 +1,8 @@ spring: datasource: url: jdbc:mysql://localhost:3306/ticketing_test?serverTimezone=Asia/Seoul&characterEncoding=UTF-8 - username: ticketing - password: ticketing + username: ENC(LowN1n4w0Ep/DqLD8+q5Bq6AXM4b8e3V) + password: ENC(OMvGcpZLpggFTiGNkqNe66Zq/SmJXF6o) driver-class-name: com.mysql.cj.jdbc.Driver jpa: @@ -12,3 +12,7 @@ spring: format_sql: true hibernate: ddl-auto: create + +jasypt: + encryptor: + bean: jasyptStringEncryptor