diff --git a/src/main/java/org/hansung/zigma/domain/promise/entity/Promise.java b/src/main/java/org/hansung/zigma/domain/promise/entity/Promise.java index bde4fdf..13aa3d4 100644 --- a/src/main/java/org/hansung/zigma/domain/promise/entity/Promise.java +++ b/src/main/java/org/hansung/zigma/domain/promise/entity/Promise.java @@ -85,6 +85,18 @@ public void confirm() { this.status = PromiseStatus.CONFIRMED; } + public void proceed() { + if (this.status == PromiseStatus.PENDING) { + this.status = PromiseStatus.PROCEEDING; + } + } + + public void pend() { + if (this.status == PromiseStatus.PROCEEDING) { + this.status = PromiseStatus.PENDING; + } + } + public void startRevote(LocalDateTime endAt) { this.isMultipleVoting = false; this.endAt = endAt; diff --git a/src/main/java/org/hansung/zigma/domain/promise/repository/CandidateRepository.java b/src/main/java/org/hansung/zigma/domain/promise/repository/CandidateRepository.java index 43e80be..374f7a9 100644 --- a/src/main/java/org/hansung/zigma/domain/promise/repository/CandidateRepository.java +++ b/src/main/java/org/hansung/zigma/domain/promise/repository/CandidateRepository.java @@ -15,4 +15,6 @@ public interface CandidateRepository extends JpaRepository { List findAllByPromiseIdAndIsActiveTrue(Long promiseId); Optional findByIdAndPromiseId(Long candidateId, Long promiseId); + + long countByPromiseId(Long promiseId); } diff --git a/src/main/java/org/hansung/zigma/domain/promise/service/CandidateServiceImpl.java b/src/main/java/org/hansung/zigma/domain/promise/service/CandidateServiceImpl.java index 02335a9..4ed58a8 100644 --- a/src/main/java/org/hansung/zigma/domain/promise/service/CandidateServiceImpl.java +++ b/src/main/java/org/hansung/zigma/domain/promise/service/CandidateServiceImpl.java @@ -57,6 +57,9 @@ public CandidateRes createCandidate(Long userId, Long promiseId, CandidateCreate ); Candidate savedCandidate = candidateRepository.save(candidate); + // 첫 후보지가 등록되면 약속 상태를 진행 중으로 전환 + pm.getPromise().proceed(); + return CandidateRes.of(savedCandidate, userId); } @@ -106,6 +109,11 @@ public void deleteCandidate(Long userId, Long promiseId, Long candidateId) { } candidateRepository.delete(candidate); + + // 마지막 후보지 삭제 시 약속 상태를 다시 장소 미정으로 되돌림 + if (candidateRepository.countByPromiseId(promiseId) == 0) { + candidate.getPromise().pend(); + } } @Override diff --git a/src/main/java/org/hansung/zigma/global/config/SecurityConfig.java b/src/main/java/org/hansung/zigma/global/config/SecurityConfig.java index 8cacb61..ec110c2 100644 --- a/src/main/java/org/hansung/zigma/global/config/SecurityConfig.java +++ b/src/main/java/org/hansung/zigma/global/config/SecurityConfig.java @@ -9,6 +9,7 @@ import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import org.springframework.http.HttpMethod; +import org.springframework.security.config.Customizer; import org.springframework.security.config.annotation.method.configuration.EnableMethodSecurity; import org.springframework.security.config.annotation.web.builders.HttpSecurity; import org.springframework.security.config.http.SessionCreationPolicy; @@ -29,6 +30,7 @@ public class SecurityConfig { @Bean public SecurityFilterChain securityFilterChain(HttpSecurity http) throws Exception { http + .cors(Customizer.withDefaults()) .csrf(csrf -> csrf.disable()) // CSRF 비활성화 .sessionManagement(session -> session.sessionCreationPolicy(SessionCreationPolicy.STATELESS)) // 세션 비활성화 .authorizeHttpRequests(auth -> auth