Skip to content
Open
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
8 changes: 8 additions & 0 deletions settings.gradle
Original file line number Diff line number Diff line change
Expand Up @@ -2,5 +2,13 @@ pluginManagement {
plugins {
id 'org.jetbrains.kotlin.jvm' version '2.2.0'
}
repositories {
gradlePluginPortal()
}
}

plugins {
id 'org.gradle.toolchains.foojay-resolver-convention' version '0.9.0'
}

rootProject.name = 'Assu'
273 changes: 192 additions & 81 deletions src/main/java/com/assu/server/domain/auth/controller/AuthController.java

Large diffs are not rendered by default.

This file was deleted.

Original file line number Diff line number Diff line change
@@ -0,0 +1,16 @@
package com.assu.server.domain.auth.dto.common;

import io.swagger.v3.oas.annotations.media.Schema;

@Schema(description = "JWT 토큰 정보")
public record TokensDTO(
@Schema(description = "액세스 토큰", example = "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9...")
String accessToken,

@Schema(description = "리프레시 토큰", example = "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9...")
String refreshToken
) {
public static TokensDTO of(String accessToken, String refreshToken) {
return new TokensDTO(accessToken, refreshToken);
}
}

This file was deleted.

Original file line number Diff line number Diff line change
@@ -0,0 +1,58 @@
package com.assu.server.domain.auth.dto.common;

import com.assu.server.domain.member.entity.Member;
import com.assu.server.domain.user.entity.Student;
import com.fasterxml.jackson.annotation.JsonInclude;
import io.swagger.v3.oas.annotations.media.Schema;

@Schema(description = "사용자 기본 정보")
@JsonInclude(JsonInclude.Include.NON_NULL)
public record UserBasicInfoDTO(
@Schema(description = "이름/업체명/단체명", example = "홍길동")
String name,

@Schema(description = "대학교", example = "숭실대학교")
String university,

@Schema(description = "단과대", example = "IT공과대학")
String department,

@Schema(description = "전공/학과", example = "소프트웨어학부")
String major
) {
public static UserBasicInfoDTO from(Member member) {
String name = null;
String university = null;
String department = null;
String major = null;

switch (member.getRole()) {
case STUDENT -> {
Student student = member.getStudentProfile();
if (student != null) {
name = student.getName();
university = student.getUniversity().getDisplayName();
department = student.getDepartment().getDisplayName();
major = student.getMajor().getDisplayName();
}
}
case ADMIN -> {
var admin = member.getAdminProfile();
if (admin != null) {
name = admin.getName();
university = admin.getUniversity() != null ? admin.getUniversity().getDisplayName() : null;
department = admin.getDepartment() != null ? admin.getDepartment().getDisplayName() : null;
major = admin.getMajor() != null ? admin.getMajor().getDisplayName() : null;
}
}
case PARTNER -> {
var partner = member.getPartnerProfile();
if (partner != null) {
name = partner.getName();
}
}
}

return new UserBasicInfoDTO(name, university, department, major);
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,14 @@
package com.assu.server.domain.auth.dto.email;

import io.swagger.v3.oas.annotations.media.Schema;
import jakarta.validation.constraints.Email;
import jakarta.validation.constraints.NotBlank;

@Schema(description = "이메일 중복 확인 요청")
public record EmailVerificationCheckRequestDTO(
@Schema(description = "확인할 이메일 주소", example = "user@example.com")
@NotBlank(message = "이메일은 필수입니다.")
@Email(message = "올바른 이메일 형식이 아닙니다.")
String email
) {
}

This file was deleted.

Original file line number Diff line number Diff line change
@@ -0,0 +1,21 @@
package com.assu.server.domain.auth.dto.login;

import io.swagger.v3.oas.annotations.media.Schema;
import jakarta.validation.constraints.Email;
import jakarta.validation.constraints.NotBlank;
import jakarta.validation.constraints.Size;

@Schema(description = "파트너/관리자 공통 로그인 요청")
public record CommonLoginRequestDTO(
@Schema(description = "로그인 이메일", example = "user@example.com")
@NotBlank(message = "이메일은 필수입니다.")
@Email(message = "올바른 이메일 형식이 아닙니다.")
@Size(max = 255, message = "이메일은 255자를 넘을 수 없습니다.")
String email,

@Schema(description = "로그인 비밀번호(평문)", example = "P@ssw0rd!")
@NotBlank(message = "비밀번호는 필수입니다.")
@Size(min = 8, max = 64, message = "비밀번호는 8~64자여야 합니다.")
String password
) {
}

This file was deleted.

Original file line number Diff line number Diff line change
@@ -0,0 +1,38 @@
package com.assu.server.domain.auth.dto.login;

import com.assu.server.domain.auth.dto.common.UserBasicInfoDTO;
import com.assu.server.domain.auth.dto.common.TokensDTO;
import com.assu.server.domain.common.enums.ActivationStatus;
import com.assu.server.domain.common.enums.UserRole;
import com.assu.server.domain.member.entity.Member;
import com.fasterxml.jackson.annotation.JsonInclude;
import io.swagger.v3.oas.annotations.media.Schema;

@Schema(description = "로그인 성공 응답")
@JsonInclude(JsonInclude.Include.NON_NULL)
public record LoginResponseDTO(
@Schema(description = "회원 ID", example = "123")
Long memberId,

@Schema(description = "회원 역할", example = "STUDENT")
UserRole role,

@Schema(description = "회원 상태", example = "SUSPEND")
ActivationStatus status,

@Schema(description = "액세스 토큰/리프레시 토큰", example = "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9...")
TokensDTO tokens,

@Schema(description = "사용자 기본 정보 (캐싱용)")
UserBasicInfoDTO basicInfo
) {
public static LoginResponseDTO from(Member member, TokensDTO tokens) {
return new LoginResponseDTO(
member.getId(),
member.getRole(),
member.getIsActivated(),
tokens,
UserBasicInfoDTO.from(member)
);
}
}

This file was deleted.

Original file line number Diff line number Diff line change
@@ -0,0 +1,22 @@
package com.assu.server.domain.auth.dto.login;

import com.assu.server.domain.auth.dto.common.TokensDTO;
import io.swagger.v3.oas.annotations.media.Schema;

@Schema(description = "액세스 토큰 갱신 응답")
public record RefreshResponseDTO(
@Schema(description = "회원 ID", example = "123")
Long memberId,
@Schema(description = "새로운 액세스 토큰", example = "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9...")
String newAccess,
@Schema(description = "새로운 리프레시 토큰", example = "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9...")
String newRefresh
) {
public static RefreshResponseDTO from(Long memberId, TokensDTO tokens) {
return new RefreshResponseDTO(
memberId,
tokens.accessToken(),
tokens.refreshToken()
);
}
}

This file was deleted.

This file was deleted.

Original file line number Diff line number Diff line change
@@ -0,0 +1,14 @@
package com.assu.server.domain.auth.dto.phone;

import io.swagger.v3.oas.annotations.media.Schema;
import jakarta.validation.constraints.NotBlank;
import jakarta.validation.constraints.Pattern;

@Schema(description = "휴대폰 번호 중복가입 확인 및 인증번호 발송 요청")
public record PhoneAuthSendRequestDTO(
@Schema(description = "인증번호를 받을 휴대폰 번호", example = "01012345678")
@NotBlank(message = "전화번호는 필수입니다.")
@Pattern(regexp = "^010\\d{8}$", message = "올바른 전화번호 형식이 아닙니다.")
String phoneNumber
) {
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,18 @@
package com.assu.server.domain.auth.dto.phone;

import io.swagger.v3.oas.annotations.media.Schema;
import jakarta.validation.constraints.NotBlank;
import jakarta.validation.constraints.Pattern;

@Schema(description = "휴대폰 인증번호 검증 요청")
public record PhoneAuthVerifyRequestDTO(
@Schema(description = "인증받을 휴대폰 번호", example = "01012345678")
@NotBlank(message = "전화번호는 필수입니다.")
@Pattern(regexp = "^010\\d{8}$", message = "올바른 전화번호 형식이 아닙니다.")
String phoneNumber,

@Schema(description = "발송받은 인증번호(OTP)", example = "123456")
@NotBlank(message = "인증번호는 필수입니다.")
String authNumber
) {
}

This file was deleted.

Loading