diff --git a/backend/src/main/java/org/sejongisc/backend/attendance/controller/AttendanceController.java b/backend/src/main/java/org/sejongisc/backend/attendance/controller/AttendanceController.java index 155959d8..42559260 100644 --- a/backend/src/main/java/org/sejongisc/backend/attendance/controller/AttendanceController.java +++ b/backend/src/main/java/org/sejongisc/backend/attendance/controller/AttendanceController.java @@ -11,13 +11,12 @@ import org.springframework.http.ResponseEntity; import org.springframework.security.access.prepost.PreAuthorize; import org.springframework.security.core.annotation.AuthenticationPrincipal; -import org.springframework.stereotype.Controller; import org.springframework.web.bind.annotation.*; import java.util.List; import java.util.UUID; -@Controller +@RestController @RequiredArgsConstructor @RequestMapping("/api/attendance") @Slf4j diff --git a/backend/src/main/java/org/sejongisc/backend/attendance/controller/AttendanceSessionController.java b/backend/src/main/java/org/sejongisc/backend/attendance/controller/AttendanceSessionController.java index ad8c8d78..19db2323 100644 --- a/backend/src/main/java/org/sejongisc/backend/attendance/controller/AttendanceSessionController.java +++ b/backend/src/main/java/org/sejongisc/backend/attendance/controller/AttendanceSessionController.java @@ -10,13 +10,12 @@ import org.springframework.http.HttpStatus; import org.springframework.http.ResponseEntity; import org.springframework.security.access.prepost.PreAuthorize; -import org.springframework.stereotype.Controller; import org.springframework.web.bind.annotation.*; import java.util.List; import java.util.UUID; -@Controller +@RestController @RequiredArgsConstructor @RequestMapping("/api/attendance/sessions") @Slf4j diff --git a/backend/src/main/java/org/sejongisc/backend/user/dto/SignupRequest.java b/backend/src/main/java/org/sejongisc/backend/user/dto/SignupRequest.java new file mode 100644 index 00000000..7bd8db5b --- /dev/null +++ b/backend/src/main/java/org/sejongisc/backend/user/dto/SignupRequest.java @@ -0,0 +1,30 @@ +package org.sejongisc.backend.user.dto; + +import jakarta.validation.constraints.NotBlank; +import jakarta.validation.constraints.NotNull; +import jakarta.validation.constraints.Pattern; +import lombok.*; +import org.sejongisc.backend.user.entity.Role; + +@Getter +@Setter +@NoArgsConstructor +@AllArgsConstructor +@Builder +public class SignupRequest { + + @NotBlank(message = "이름은 필수입니다.") + private String name; + + private String email; + + @NotBlank(message = "비밀번호는 필수입니다.") + private String password; + + @NotNull(message = "역할은 필수입니다.") + private Role role; + + @NotBlank(message = "전화번호는 필수입니다.") + @Pattern(regexp = "^[0-9]{10,11}$") + private String phoneNumber; +} diff --git a/backend/src/main/java/org/sejongisc/backend/user/dto/SignupResponse.java b/backend/src/main/java/org/sejongisc/backend/user/dto/SignupResponse.java new file mode 100644 index 00000000..ee48dbb0 --- /dev/null +++ b/backend/src/main/java/org/sejongisc/backend/user/dto/SignupResponse.java @@ -0,0 +1,43 @@ +package org.sejongisc.backend.user.dto; + +import com.fasterxml.jackson.annotation.JsonFormat; +import lombok.Getter; +import org.sejongisc.backend.user.entity.Role; +import org.sejongisc.backend.user.entity.User; + +import java.time.LocalDateTime; +import java.util.UUID; + +@Getter +public class SignupResponse { + private final UUID userId; + private final String name; + private final String email; + private final Role role; + + @JsonFormat(pattern = "yyyy-MM-dd'T'HH:mm:ss", timezone = "Asia/Seoul") + private final LocalDateTime createdAt; + + @JsonFormat(pattern = "yyyy-MM-dd'T'HH:mm:ss", timezone = "Asia/Seoul") + private final LocalDateTime updatedAt; + + private SignupResponse(UUID userId, String name, String email, Role role, LocalDateTime createdAt, LocalDateTime updatedAt) { + this.userId=userId; + this.name=name; + this.email=email; + this.role=role; + this.createdAt = createdAt; + this.updatedAt = updatedAt; + } + + public static SignupResponse from(User user) { + return new SignupResponse( + user.getUserId(), + user.getName(), + user.getEmail(), + user.getRole(), + user.getCreatedDate(), + user.getUpdatedDate() + ); + } +} \ No newline at end of file diff --git a/backend/src/main/java/org/sejongisc/backend/user/entity/AuthProvider.java b/backend/src/main/java/org/sejongisc/backend/user/entity/AuthProvider.java new file mode 100644 index 00000000..6688e3fe --- /dev/null +++ b/backend/src/main/java/org/sejongisc/backend/user/entity/AuthProvider.java @@ -0,0 +1,5 @@ +package org.sejongisc.backend.user.entity; + +public enum AuthProvider { + GOOGLE, GITHUB, KAKAO +} diff --git a/backend/src/main/java/org/sejongisc/backend/user/entity/UserOauthAccount.java b/backend/src/main/java/org/sejongisc/backend/user/entity/UserOauthAccount.java new file mode 100644 index 00000000..a10ab39e --- /dev/null +++ b/backend/src/main/java/org/sejongisc/backend/user/entity/UserOauthAccount.java @@ -0,0 +1,34 @@ +package org.sejongisc.backend.user.entity; + +import jakarta.persistence.*; +import lombok.*; +import org.hibernate.annotations.UuidGenerator; +import org.sejongisc.backend.common.entity.postgres.BasePostgresEntity; + +import java.util.UUID; + +@Entity +@Table(name = "user_oauth_account") +@Getter +@Setter +@NoArgsConstructor +@AllArgsConstructor +@Builder +public class UserOauthAccount extends BasePostgresEntity { + + @Id + @GeneratedValue(strategy = GenerationType.UUID) + @Column(name = "user_oauth_account_id", columnDefinition = "uuid") + private UUID userOauthAccountId; + + @ManyToOne(fetch = FetchType.LAZY, optional = false) + @JoinColumn(name = "user_id", nullable = false, columnDefinition = "uuid") + private User user; + + @Enumerated(EnumType.STRING) + @Column(nullable = false) + private AuthProvider provider; + + @Column(name = "provider_uid", nullable = false) + private String providerUid; +} diff --git a/backend/src/test/java/org/sejongisc/backend/BackendApplicationTests.java b/backend/src/test/java/org/sejongisc/backend/BackendApplicationTests.java new file mode 100644 index 00000000..8dadbb2d --- /dev/null +++ b/backend/src/test/java/org/sejongisc/backend/BackendApplicationTests.java @@ -0,0 +1,15 @@ +package org.sejongisc.backend; + +import org.junit.jupiter.api.Test; +import org.springframework.boot.test.context.SpringBootTest; +import org.springframework.test.context.ActiveProfiles; + +@SpringBootTest +@ActiveProfiles("test") +class BackendApplicationTests { + + @Test + void contextLoads() { + } + +} diff --git a/backend/src/test/java/org/sejongisc/backend/attendance/controller/AttendanceSessionControllerTest.java b/backend/src/test/java/org/sejongisc/backend/attendance/controller/AttendanceSessionControllerTest.java index d6a9d89c..c29c9d24 100644 --- a/backend/src/test/java/org/sejongisc/backend/attendance/controller/AttendanceSessionControllerTest.java +++ b/backend/src/test/java/org/sejongisc/backend/attendance/controller/AttendanceSessionControllerTest.java @@ -114,7 +114,7 @@ void createSession_fail_noPermission() throws Exception { } @Test - @DisplayName("출석 세션 생성 실패: 유혀성 검증 오류") + @DisplayName("출석 세션 생성 실패: 유효성 검증 오류") @WithMockUser(roles = "PRESIDENT") void createSession_fail_validation() throws Exception { //given