Skip to content

Commit 2e5951f

Browse files
feat: 인증 없는 사전 등록 API 추가
1 parent a1f950d commit 2e5951f

3 files changed

Lines changed: 80 additions & 13 deletions

File tree

backend/src/main/java/com/back/api/preregister/controller/PreRegisterApi.java

Lines changed: 24 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,7 @@
11
package com.back.api.preregister.controller;
22

33
import org.springframework.web.bind.annotation.PathVariable;
4-
import org.springframework.web.bind.annotation.RequestBody;
54

6-
import com.back.api.preregister.dto.request.PreRegisterCreateRequest;
75
import com.back.api.preregister.dto.response.PreRegisterResponse;
86
import com.back.global.config.swagger.ApiErrorCode;
97
import com.back.global.response.ApiResponse;
@@ -12,14 +10,35 @@
1210
import io.swagger.v3.oas.annotations.Parameter;
1311
import io.swagger.v3.oas.annotations.security.SecurityRequirement;
1412
import io.swagger.v3.oas.annotations.tags.Tag;
15-
import jakarta.validation.Valid;
1613

1714
@Tag(name = "PreRegister API", description = "사전등록 API")
1815
public interface PreRegisterApi {
1916

17+
// 인증 있는 사전 등록 -> v2에서 사용 예정
18+
// @Operation(
19+
// summary = "사전등록",
20+
// description = "이벤트에 사전등록합니다. 휴대폰 번호, 생년월일을 통한 본인 인증이 필요하며, 약관 동의가 필수입니다. 이름은 JWT 토큰으로 인증된 사용자 정보에서 자동으로 가져옵니다.",
21+
// security = @SecurityRequirement(name = "bearerAuth")
22+
// )
23+
// @ApiErrorCode({
24+
// "NOT_FOUND_EVENT",
25+
// "NOT_FOUND_USER",
26+
// "ALREADY_PRE_REGISTERED",
27+
// "INVALID_PRE_REGISTRATION_PERIOD",
28+
// "INVALID_USER_INFO",
29+
// "TERMS_NOT_AGREED",
30+
// "PRIVACY_NOT_AGREED",
31+
// "UNAUTHORIZED"
32+
// })
33+
// ApiResponse<PreRegisterResponse> register(
34+
// @Parameter(description = "이벤트 ID", example = "1")
35+
// @PathVariable Long eventId,
36+
// @Valid @RequestBody PreRegisterCreateRequest request
37+
// );
38+
2039
@Operation(
2140
summary = "사전등록",
22-
description = "이벤트에 사전등록합니다. 휴대폰 번호, 생년월일을 통한 본인 인증이 필요하며, 약관 동의가 필수입니다. 이름은 JWT 토큰으로 인증된 사용자 정보에서 자동으로 가져옵니다.",
41+
description = "이벤트에 사전등록합니다. (인증 제외)",
2342
security = @SecurityRequirement(name = "bearerAuth")
2443
)
2544
@ApiErrorCode({
@@ -34,8 +53,7 @@ public interface PreRegisterApi {
3453
})
3554
ApiResponse<PreRegisterResponse> register(
3655
@Parameter(description = "이벤트 ID", example = "1")
37-
@PathVariable Long eventId,
38-
@Valid @RequestBody PreRegisterCreateRequest request
56+
@PathVariable Long eventId
3957
);
4058

4159
@Operation(

backend/src/main/java/com/back/api/preregister/controller/PreRegisterController.java

Lines changed: 13 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -4,17 +4,14 @@
44
import org.springframework.web.bind.annotation.GetMapping;
55
import org.springframework.web.bind.annotation.PathVariable;
66
import org.springframework.web.bind.annotation.PostMapping;
7-
import org.springframework.web.bind.annotation.RequestBody;
87
import org.springframework.web.bind.annotation.RequestMapping;
98
import org.springframework.web.bind.annotation.RestController;
109

11-
import com.back.api.preregister.dto.request.PreRegisterCreateRequest;
1210
import com.back.api.preregister.dto.response.PreRegisterResponse;
1311
import com.back.api.preregister.service.PreRegisterService;
1412
import com.back.global.http.HttpRequestContext;
1513
import com.back.global.response.ApiResponse;
1614

17-
import jakarta.validation.Valid;
1815
import lombok.RequiredArgsConstructor;
1916

2017
@RestController
@@ -25,13 +22,22 @@ public class PreRegisterController implements PreRegisterApi {
2522
private final PreRegisterService preRegisterService;
2623
private final HttpRequestContext httpRequestContext;
2724

25+
// 인증 있는 사전 등록 -> v2에서 사용 예정
26+
// @Override
27+
// @PostMapping
28+
// public ApiResponse<PreRegisterResponse> register(
29+
// @PathVariable Long eventId,
30+
// @Valid @RequestBody PreRegisterCreateRequest request) {
31+
// Long userId = httpRequestContext.getUserId();
32+
// PreRegisterResponse response = preRegisterService.register(eventId, userId, request);
33+
// return ApiResponse.created("사전등록이 완료되었습니다.", response);
34+
// }
35+
2836
@Override
2937
@PostMapping
30-
public ApiResponse<PreRegisterResponse> register(
31-
@PathVariable Long eventId,
32-
@Valid @RequestBody PreRegisterCreateRequest request) {
38+
public ApiResponse<PreRegisterResponse> register(@PathVariable Long eventId) {
3339
Long userId = httpRequestContext.getUserId();
34-
PreRegisterResponse response = preRegisterService.register(eventId, userId, request);
40+
PreRegisterResponse response = preRegisterService.quickPreRegister(eventId, userId);
3541
return ApiResponse.created("사전등록이 완료되었습니다.", response);
3642
}
3743

backend/src/main/java/com/back/api/preregister/service/PreRegisterService.java

Lines changed: 43 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -94,6 +94,49 @@ public PreRegisterResponse register(Long eventId, Long userId, PreRegisterCreate
9494
return PreRegisterResponse.from(savedPreRegister);
9595
}
9696

97+
// 인증 제외한 사전 등록
98+
@Transactional
99+
public PreRegisterResponse quickPreRegister(Long eventId, Long userId) {
100+
Event event = findEventById(eventId);
101+
User user = findUserById(userId);
102+
103+
// 기존 사전등록 확인 (CANCELED 상태면 재활용)
104+
Optional<PreRegister> existingPreRegister = preRegisterRepository.findByEvent_IdAndUser_Id(eventId, userId);
105+
106+
if (existingPreRegister.isPresent()) {
107+
PreRegister preRegister = existingPreRegister.get();
108+
109+
// REGISTERED 상태면 중복 등록 예외
110+
if (preRegister.isRegistered()) {
111+
throw new ErrorException(PreRegisterErrorCode.ALREADY_PRE_REGISTERED);
112+
}
113+
114+
// CANCELED 상태면 재등록 (상태만 변경)
115+
preRegister.reRegister();
116+
return PreRegisterResponse.from(preRegister);
117+
}
118+
119+
// 새로운 사전등록 생성
120+
PreRegister preRegister = PreRegister.builder()
121+
.event(event)
122+
.user(user)
123+
.preRegisterAgreeTerms(true)
124+
.preRegisterAgreePrivacy(true)
125+
.build();
126+
127+
PreRegister savedPreRegister = preRegisterRepository.save(preRegister);
128+
129+
eventPublisher.publishEvent(
130+
new PreRegisterDoneMessage(
131+
userId,
132+
savedPreRegister.getId(),
133+
event.getTitle()
134+
)
135+
);
136+
137+
return PreRegisterResponse.from(savedPreRegister);
138+
}
139+
97140
@Transactional
98141
public void cancel(Long eventId, Long userId) {
99142
PreRegister preRegister = findPreRegister(eventId, userId);

0 commit comments

Comments
 (0)