Skip to content

Commit eef8792

Browse files
committed
fix: 오류 수정
1 parent dfd8960 commit eef8792

33 files changed

+550
-102
lines changed

.dev/devEnv.yml

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,16 @@
1+
DB_URL=jdbc:oracle:thin:@//localhost:1521/freepdb1
2+
DB_USERNAME=DEV_USER
3+
DB_PASSWORD=DevUser2025
4+
DDL_AUTO=update
5+
SHOW_SQL=true
6+
JWT_SECRET=39dafnlkefgo23idf04kvfdzmvr3rt2f
7+
JWT_ACCESS_TOKEN_EXPIRATION=1800000
8+
JWT_REFRESH_TOKEN_EXPIRATION=86400000
9+
REDIS_HOST=localhost
10+
REDIS_PORT=6400
11+
MAIL_HOST=stmp.gmail.com
12+
MAIL_PORT=587
13+
14+
MAIL_PASSWORD=bgpvfihaeufqzypn
15+
GOOGLE_SPREADSHEET_ID=1wrBpvkyU9yCYuWJoptQRz627G68w3VttQ_DgYiGZwSo
16+
GOOGLE_CREDENTIALS_JSON=ewogICJ0eXBlIjogInNlcnZpY2VfYWNjb3VudCIsCiAgInByb2plY3RfaWQiOiAiZGFzb213ZWJwYWdlIiwKICAicHJpdmF0ZV9rZXlfaWQiOiAiNTRhMmRhOWM0YTI2NjQ5YTY2Y2Q1MGNiMjBkM2RhZTJmZmE1Y2U1MyIsCiAgInByaXZhdGVfa2V5IjogIi0tLS0tQkVHSU4gUFJJVkFURSBLRVktLS0tLVxuTUlJRXZ3SUJBREFOQmdrcWhraUc5dzBCQVFFRkFBU0NCS2t3Z2dTbEFnRUFBb0lCQVFDM3lqbDVydHhNVlFzclxuMDNQaTBkZ21tb0NSenZFZ1N1eXlGRzcyTHVEQkF4T2VYY25pc1puV3JaRmJ2MllVMngvVkF0MS9xV2NNZi9xOVxuRjZuTTFhcHVSQnJXUVhtWUZlR0IzU0NSSk5IM000TkxOenVEY1Q2ajZVQ005Y09WdEpVRlI0SUFSRzZGRTBaNVxucFRpSWt6Wm5NNW5Fcy9xM2c1dHh3WE5HcFpVQUhuREVEV1poV2FLUS83b09GR1VRTFhTRWpsVnM1SUtDNjJxOFxuRXkzQ2RzS2JYOGFSQ2xFSTlIMjFKVmtDTGJSWENnVHg2ajlWVjRseXV1c3dsaTh4WlAwNllPRU9qUFVSZWRQQVxueWRCVDU3bDYrTDZZRzJFb0RObE96b3lWb1o0OXpVOXFHd25nM052SGJNa2tHL3ZVbW56WlU0Vk5QWHBkNjNrMFxuTnpSVDEvZ2xBZ01CQUFFQ2dnRUFNWmkvWU9CNHI1cWxqSnFmNDc0NEk5YSt5bG83aExqalhmMFlvcE9zOERrWlxuMHJ0QmowelpGRzg3VWpSNDRqanR3cWhteUp3WTVHMG01MTlhNFoxcFJCOVoxS2JQbnVTTXVlUkg5Uk1vSEJzSlxuRzhPWWFsU2xrRXNTTWRmaWcyUTdjTFRHMXJhZzBvV01sNmduOU9jeEg3RnpsZnJ4dGhNc1lBclJ4bWRKcWNHWFxuTERoQ25UU3dVT0xiaXZwcmxkTjR5b2lJeVU4cEVqQW1PN25jNkEyeGU1UlFPbTZQb3A5ZksyYUsvNGJCK3preVxuY3Zvb2lFTFRYRFh5YTMyQzdaQXZtb1dFa3J0ZmlZaTJOQW5MMURmOTNMZlRaUHJaOHMrYjd3SWZHSHNXM2RFd1xuVFZ1aUNvMHEwMGFDVDZEWnpEeGtNL3VSc2hwaTA0RkxycnJNaGFyMFl3S0JnUUQyWDRGRitGNk5LcmwwUFpNUVxuMHorU0IyYzZYZ3YzSExsQ1RqTm80eGV2Tm9nbTR5ZlJKK24wZTNJUEhWYUduY0ZycnZJNENnMjZXUkhFUDhDcVxuRU14cFZoMzFITXZSYVlUU2UrZjJieFphSk9jalBIeFhRMDlWVW5BWkltMkorUUFKbGFrQkF0M1FCVDltWlFoblxuRStXaWNvNnY4dlNZNURvOUpWRGFIQitVMndLQmdRQysrTEd4SmI4a1NUMzZ2N0ZmQVFJeTZhT2hjb2x5WnlCYVxueWowUkRKVkJjeWxBZHlvZzlvUFJwNi9EOG41L0gvMUVmL3JoUk9LWG42NTcrNnR4Sm9zcjJ4ak9ETEdHSWJ1VlxuL1grRUtFbi84U2p1a2k2RWFLRXhBV0kveTBSNWR6MWFIYmd5YzVuYitoY0RYaVF6R0ZKYm95UUd6QmdoS1FqOFxueGNXT0sxMjIvd0tCZ1FDcTduWUZNcDErK1o1emZHajFhbXNYaUpWaEZIRGV3SW56NjhlVlJNRmc2Y2VxbXowN1xueXFKeDRkZXZqdDVDUlY4MXM4b1BnVUluQUxibjNvZHdObmxydDdqUEgyeDFYTzB2RDVKUEVxR0NaMG9KMDJROVxuTXREdTFHUTd1L3dkbHFray9UV2xJdlQ3NXpnbWRZQlA2NmtOZk1kc1lYYThRTlA3S2xHZkVaWURzd0tCZ1FDRlxuanRSbStla2w3WHRGUkk4OXpDekhncE1IdEZ6Zi83T25DMDJPQU9qWnJ6cW9kUzZuZ3dCSnZpYTB1WUV5VXlNRFxucHlYRUtqTDJxNXlSNVQ3UGtZOC9pcWxjWVpBK0tKVlNuc2x4bWVPMjllZ1VnWE82OHBuWTlnakthTlJveHJYSFxuc29WQjg0c2xSMUNVOEdBTXcvUEZWdUU1UjcrUVlXeUJxNmN3ZUsrLzdRS0JnUURIWU95RkIvMmRZL01vZkFQUVxuVFU4MXdEei9sTFVtT0NiOGFQY3B6endjQXpiWGtIZjVpNzVuMVRJZzBpODVOWjVNQ3lXMzh0bHdjQnlLZm1uQlxuQ3NsYmVYZEhjVE1VeUo4YUFMeWdISFBDSDhHRW9QTENCZGkrWkx1dUdrVHIwUitvcHpPb0RyTk0zbkVONU11YVxuQ3dtYXNhUEkxODZBaGFDNXA1T3RndWtKQWc9PVxuLS0tLS1FTkQgUFJJVkFURSBLRVktLS0tLVxuIiwKICAiY2xpZW50X2VtYWlsIjogImRhc29tLXdlYi1nb29nbGUtc2hlZXRAZGFzb213ZWJwYWdlLmlhbS5nc2VydmljZWFjY291bnQuY29tIiwKICAiY2xpZW50X2lkIjogIjExNTgwNTY5ODcwMzU1MTc1NjA5MSIsCiAgImF1dGhfdXJpIjogImh0dHBzOi8vYWNjb3VudHMuZ29vZ2xlLmNvbS9vL29hdXRoMi9hdXRoIiwKICAidG9rZW5fdXJpIjogImh0dHBzOi8vb2F1dGgyLmdvb2dsZWFwaXMuY29tL3Rva2VuIiwKICAiYXV0aF9wcm92aWRlcl94NTA5X2NlcnRfdXJsIjogImh0dHBzOi8vd3d3Lmdvb2dsZWFwaXMuY29tL29hdXRoMi92MS9jZXJ0cyIsCiAgImNsaWVudF94NTA5X2NlcnRfdXJsIjogImh0dHBzOi8vd3d3Lmdvb2dsZWFwaXMuY29tL3JvYm90L3YxL21ldGFkYXRhL3g1MDkvZGFzb20td2ViLWdvb2dsZS1zaGVldCU0MGRhc29td2VicGFnZS5pYW0uZ3NlcnZpY2VhY2NvdW50LmNvbSIsCiAgInVuaXZlcnNlX2RvbWFpbiI6ICJnb29nbGVhcGlzLmNvbSIKfQo=

build.gradle

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -57,6 +57,8 @@ dependencies {
5757
implementation 'io.jsonwebtoken:jjwt-api:0.12.6'
5858
runtimeOnly 'io.jsonwebtoken:jjwt-impl:0.12.6'
5959
runtimeOnly 'io.jsonwebtoken:jjwt-jackson:0.12.6'
60+
61+
implementation 'software.amazon.awssdk:s3:2.28.23'
6062
}
6163

6264
tasks.named('test') {

docker-compose.yml

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,20 @@
1+
services:
2+
redis:
3+
container_name: dasom-web-redis
4+
image: redis:7.2.4
5+
ports:
6+
- "6400:6379"
7+
oracledb:
8+
image: gvenzl/oracle-free:23.5-faststart
9+
container_name: oracle19c
10+
ports:
11+
- "1521:1521"
12+
- "5500:5500"
13+
environment:
14+
- ORACLE_PDB=orcl
15+
- ORACLE_PASSWORD=DevUser2025
16+
- INIT_SGA_SIZE=1500
17+
- INIT_PGA_SIZE=500
18+
shm_size: "1g"
19+
volumes:
20+
- ./init-user.sql:/opt/oracle/scripts/setup/init-user.sql

init-user.sql

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,17 @@
1+
-- PDB 컨텍스트로 전환
2+
ALTER SESSION SET CONTAINER=ORCL;
3+
4+
-- DEV_USER 계정 생성 (비밀번호: DevUser2025)
5+
CREATE USER DEV_USER IDENTIFIED BY "DevUser2025";
6+
7+
-- 데이터베이스 접속 및 객체 생성을 위한 권한 부여
8+
GRANT CREATE SESSION TO DEV_USER;
9+
GRANT CREATE TABLE TO DEV_USER;
10+
GRANT CREATE VIEW TO DEV_USER;
11+
GRANT CREATE PROCEDURE TO DEV_USER;
12+
GRANT CREATE SEQUENCE TO DEV_USER;
13+
GRANT CREATE TRIGGER TO DEV_USER;
14+
15+
-- 테이블스페이스 사용 권한 부여
16+
ALTER USER DEV_USER QUOTA UNLIMITED ON USERS;
17+
GRANT UNLIMITED TABLESPACE TO DEV_USER;

src/main/java/dmu/dasom/api/domain/applicant/repository/ApplicantRepository.java

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -25,4 +25,5 @@ public interface ApplicantRepository extends JpaRepository<Applicant, Long> {
2525
Optional<Applicant> findByStudentNoAndContactEndsWith(@Param("studentNo") String studentNo,
2626
@Param("contactLastDigits") String contactLastDigits);
2727

28+
Optional<Applicant> findByStudentNoAndEmail(String studentNo, String email);
2829
}

src/main/java/dmu/dasom/api/domain/common/exception/ErrorCode.java

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -34,10 +34,14 @@ public enum ErrorCode {
3434
SLOT_FULL(400, "C025", "해당 슬롯이 가득 찼습니다."),
3535
RESERVATION_NOT_FOUND(400, "C026", "예약을 찾을 수 없습니다."),
3636
SLOT_NOT_ACTIVE(400, "C027", "해당 슬롯이 비활성화 되었습니다."),
37-
FILE_ENCODE_FAIL(400, "C028", "파일 인코딩에 실패하였습니다."),
37+
FILE_UPLOAD_FAIL(400, "C028", "파일 업로드에 실패하였습니다."),
3838
RECRUITMENT_NOT_ACTIVE(400, "C029", "모집 기간이 아닙니다."),
3939
NOT_FOUND_PARTICIPANT(400, "C030", "참가자를 찾을 수 없습니다."),
4040
EXECUTIVE_NOT_FOUND(400, "C031", "임원진을 찾을 수 없습니다."),
41+
GENERATION_NOT_FOUND(400, "C032", "저장된 기수를 찾을 수 없습니다."),
42+
INVALID_GENERATION_FORMAT(400, "C033", "유효하지 않은 기수 형식입니다. (예: '1기')"),
43+
VERIFICATION_CODE_NOT_VALID(400, "C034", "인증 코드가 유효하지 않습니다."),
44+
SLOT_UNAVAILABLE(400, "C035", "해당 슬롯을 예약할 수 없습니다.")
4145
;
4246

4347
private final int status;
Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,9 @@
1+
package dmu.dasom.api.domain.executive.service;
2+
3+
public class Example {
4+
public static void main(String[] args) {
5+
String a = "김다솜";
6+
String b = "김다솜";
7+
System.out.println(a.equals(b));
8+
}
9+
}

src/main/java/dmu/dasom/api/domain/google/enums/MailType.java

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,5 +2,6 @@
22

33
public enum MailType {
44
DOCUMENT_RESULT, // 서류 합격
5-
FINAL_RESULT // 최종 합격
5+
FINAL_RESULT, // 최종 합격
6+
VERIFICATION // 이메일 인증
67
}

src/main/java/dmu/dasom/api/domain/google/service/EmailService.java

Lines changed: 34 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -44,9 +44,8 @@ public void sendEmail(String to, String name, MailType mailType) {
4444

4545
// HTML 템플릿에 전달할 데이터 설정
4646
Context context = new Context();
47-
context.setVariable("name", name); // 지원자 이름 전달
48-
context.setVariable("buttonUrl", buttonUrl); // 버튼 링크 전달
49-
47+
context.setVariable("name", name);
48+
context.setVariable("buttonUrl", buttonUrl);
5049

5150
// HTML 템플릿 처리
5251
String htmlBody = templateEngine.process(mailTemplate.getTemplateName(), context);
@@ -60,11 +59,10 @@ public void sendEmail(String to, String name, MailType mailType) {
6059
helper.setText(htmlBody, true);
6160
helper.setFrom((from != null && !from.isEmpty()) ? from : "[email protected]");
6261

63-
// Content-Type을 명시적으로 설정
6462
message.setContent(htmlBody, "text/html; charset=utf-8");
6563

6664
javaMailSender.send(message);
67-
log.info("Email sent successfull {}", to);
65+
log.info("Email sent successfully {}", to);
6866
} catch (MessagingException e) {
6967
log.error("Failed to send email to {}: {}", to, e.getMessage());
7068
mailSendStatus = MailSendStatus.FAILURE;
@@ -76,4 +74,35 @@ public void sendEmail(String to, String name, MailType mailType) {
7674
}
7775
emailLogService.logEmailSending(to, mailSendStatus, errorMessage);
7876
}
77+
78+
/*
79+
* 면접 예약 변경을 위한 인증코드 발송
80+
* - VerificationCodeManager에서 생성된 코드를 이메일로 전송
81+
* - verify-num-email.html 템플릿을 이용해 코드와 버튼 링크 포함
82+
*/
83+
public void sendVerificationEmail(String to, String name, String code) throws MessagingException {
84+
String subject = "DASOM 면접 시간 변경을 위한 이메일 인증 코드 안내";
85+
86+
// 인증 코드만 템플릿으로 전달
87+
String emailContent = "인증 코드: <strong>" + code + "</strong>";
88+
89+
Context context = new Context();
90+
context.setVariable("name", name);
91+
context.setVariable("emailContent", emailContent);
92+
context.setVariable("buttonUrl", "https://dmu-dasom.or.kr");
93+
context.setVariable("buttonText", "인증 완료");
94+
95+
String htmlBody = templateEngine.process("verify-num-email", context);
96+
97+
MimeMessage message = javaMailSender.createMimeMessage();
98+
MimeMessageHelper helper = new MimeMessageHelper(message, true, "UTF-8");
99+
100+
helper.setTo(to);
101+
helper.setSubject(subject);
102+
helper.setText(htmlBody, true);
103+
helper.setFrom((from != null && !from.isEmpty()) ? from : "[email protected]");
104+
105+
javaMailSender.send(message);
106+
}
107+
79108
}

src/main/java/dmu/dasom/api/domain/interview/entity/InterviewReservation.java

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -36,4 +36,8 @@ public class InterviewReservation {
3636
@CreatedDate
3737
@Column(name = "created_at", nullable = false, updatable = false)
3838
private LocalDateTime createdAt; // 생성
39+
40+
public void setSlot(InterviewSlot slot) {
41+
this.slot = slot;
42+
}
3943
}

0 commit comments

Comments
 (0)