Skip to content
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
25 changes: 25 additions & 0 deletions src/main/java/com/quickpick/ureca/common/init/InitController.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,25 @@
package com.quickpick.ureca.common.init;

import lombok.RequiredArgsConstructor;
import org.springframework.format.annotation.DateTimeFormat;
import org.springframework.web.bind.annotation.*;

import java.time.LocalDateTime;

@RestController
@RequiredArgsConstructor
@RequestMapping("/init")
public class InitController {

private final InitService initService;

@PostMapping
public String initializePost(
@RequestParam(defaultValue = "1000") int ticketCount,
@RequestParam(defaultValue = "10000") int userCount,
@RequestParam(required = false) @DateTimeFormat(iso = DateTimeFormat.ISO.DATE_TIME) LocalDateTime startDate,
@RequestParam(required = false) @DateTimeFormat(iso = DateTimeFormat.ISO.DATE_TIME) LocalDateTime reserveDate
) {
return initService.initialize(ticketCount, userCount, startDate, reserveDate);
}
}
49 changes: 49 additions & 0 deletions src/main/java/com/quickpick/ureca/common/init/InitService.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,49 @@
package com.quickpick.ureca.common.init;

import com.quickpick.ureca.ticket.domain.Ticket;
import com.quickpick.ureca.ticket.repository.TicketRepositoryV1;
import com.quickpick.ureca.user.domain.User;
import com.quickpick.ureca.user.repository.UserRepository;
import lombok.RequiredArgsConstructor;
import org.springframework.stereotype.Service;

import java.time.LocalDateTime;
import java.util.ArrayList;
import java.util.List;


@Service
@RequiredArgsConstructor
public class InitService {

private final TicketRepositoryV1 ticketRepository;
private final UserRepository userRepository;

public String initialize(int ticketCount, int userCount, LocalDateTime startDate, LocalDateTime reserveDate) {
ticketRepository.deleteAll();
userRepository.deleteAll();

Ticket ticket = Ticket.builder()
.name("테스트 티켓")
.quantity(ticketCount)
.startDate(startDate != null ? startDate : LocalDateTime.now().plusDays(1))
.reserveDate(reserveDate != null ? reserveDate : LocalDateTime.now())
.build();
ticketRepository.save(ticket);

List<User> users = new ArrayList<>();
for (int i = 1; i <= userCount; i++) {
User user = User.builder()
.id("user" + i)
.password("pw" + i)
.name("User" + i)
.age("20")
.gender("M")
.build();
users.add(user);
}
userRepository.saveAll(users);

return "초기화 완료: 티켓 1개(" + ticketCount + "개 수량), 유저 " + userCount + "명 생성";
}
}
26 changes: 26 additions & 0 deletions src/main/java/com/quickpick/ureca/common/init/InitTrigger.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,26 @@
//package com.quickpick.ureca.common.init;
//
//import lombok.RequiredArgsConstructor;
//import org.springframework.boot.context.event.ApplicationReadyEvent;
//import org.springframework.context.ApplicationListener;
//import org.springframework.context.annotation.Profile;
//import org.springframework.stereotype.Component;
//
//import java.time.LocalDateTime;
//
//@Component
//@Profile("local") // 배포환경에서는 작동 안 하도록
//@RequiredArgsConstructor
//public class InitTrigger implements ApplicationListener<ApplicationReadyEvent> {
//
// private final InitService initService;
//
// @Override
// public void onApplicationEvent(ApplicationReadyEvent event) {
// LocalDateTime reserveDate = LocalDateTime.now();
// LocalDateTime startDate = reserveDate.plusDays(1);
// // ticketCount, userCount는 필요에 따라 조정
// initService.initialize(3000, 10000, startDate, reserveDate);
// }
//
//}

This file was deleted.

Original file line number Diff line number Diff line change
@@ -0,0 +1,53 @@
package com.quickpick.ureca.reserve.controller;

import com.quickpick.ureca.reserve.service.ReserveServiceV1;
import com.quickpick.ureca.user.repository.UserRepository;
import lombok.extern.slf4j.Slf4j;
import org.springframework.http.HttpStatus;
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.*;

@RestController
@RequestMapping("/test-reserve")
@Slf4j
public class ReserveControllerV1 {

private final ReserveServiceV1 reserveServiceV1;
private final UserRepository userRepository;

public ReserveControllerV1(ReserveServiceV1 reserveServiceV1, UserRepository userRepository) {
this.reserveServiceV1 = reserveServiceV1;
this.userRepository = userRepository;
}

@PostMapping("/reserve")
public ResponseEntity<String> reserve(@RequestParam Long userId, @RequestParam Long ticketId) {
try {
reserveServiceV1.reserveTicket(userId, ticketId);
return ResponseEntity.ok("예약 성공");
} catch (Exception e) {
log.error("예약 실패: {}", e.getMessage());
return ResponseEntity.status(HttpStatus.BAD_REQUEST).body("예약 실패: " + e.getMessage());
}
}

// open-in-view + Fetch-Join + DTO
// @PostMapping
// public ResponseEntity<TicketReserveResponse> reserve(@RequestParam Long userId, @RequestParam Long ticketId) {
// try {
// Ticket ticket = reserveServiceV1.reserveTicket(userId, ticketId);
// User user = userRepository.findById(userId).orElseThrow();
// return ResponseEntity.ok(TicketReserveResponse.of(ticket, user));
// } catch (Exception e) {
// log.error("예약 실패: {}", e.getMessage());
// return ResponseEntity.status(HttpStatus.BAD_REQUEST).body(null);
// }
// }

@PostMapping("/cancel")
public ResponseEntity<String> cancelReservation(@RequestParam Long userId, @RequestParam Long ticketId) {
log.info("{}의 티켓 취소 요청", userId);
reserveServiceV1.cancelReservation(userId, ticketId);
return ResponseEntity.ok("예약이 성공적으로 취소되었습니다.");
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,20 @@
package com.quickpick.ureca.reserve.dto;

import com.quickpick.ureca.ticket.domain.Ticket;
import com.quickpick.ureca.user.domain.User;

public record TicketReserveResponse(
Long ticketId,
String ticketName,
int remainingQuantity,
String reservedByUsername
) {
public static TicketReserveResponse of(Ticket ticket, User user) {
return new TicketReserveResponse(
ticket.getTicketId(),
ticket.getName(),
ticket.getQuantity(),
user.getId()
);
}
}

This file was deleted.

Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
package com.quickpick.ureca.reserve.repository;

import com.quickpick.ureca.reserve.domain.Reserve;
import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.stereotype.Repository;

@Repository
public interface ReserveRepositoryV1 extends JpaRepository<Reserve, Long> {
}

This file was deleted.

Loading
Loading