From 1dbf9e353981909e5e8d2734155ff0535965d52e Mon Sep 17 00:00:00 2001 From: Taehyeon Jo <70999462+whxogus215@users.noreply.github.com> Date: Wed, 2 Oct 2024 22:47:27 +0900 Subject: [PATCH 01/12] =?UTF-8?q?refactor(user):=20UserController=EA=B0=80?= =?UTF-8?q?=20UserDao=EB=A5=BC=20=EC=9D=98=EC=A1=B4=ED=95=98=EC=A7=80=20?= =?UTF-8?q?=EC=95=8A=EB=8F=84=EB=A1=9D=20=EB=B3=80=EA=B2=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - UserService에 updatePassword, getByStudentId 메서드 추가 - 커스텀 예외 UserNotFoundException 추가 --- .../controller/UserController.java | 11 +++-------- .../exception/UserNotFoundException.java | 8 ++++++++ .../gimmegonghakauth/service/UserService.java | 16 ++++++++++++++-- 3 files changed, 25 insertions(+), 10 deletions(-) create mode 100644 src/main/java/com/example/gimmegonghakauth/exception/UserNotFoundException.java diff --git a/src/main/java/com/example/gimmegonghakauth/controller/UserController.java b/src/main/java/com/example/gimmegonghakauth/controller/UserController.java index 62b5bf3..2f6d720 100644 --- a/src/main/java/com/example/gimmegonghakauth/controller/UserController.java +++ b/src/main/java/com/example/gimmegonghakauth/controller/UserController.java @@ -1,7 +1,6 @@ package com.example.gimmegonghakauth.controller; import com.example.gimmegonghakauth.dao.MajorsDao; -import com.example.gimmegonghakauth.dao.UserDao; import com.example.gimmegonghakauth.domain.UserDomain; import com.example.gimmegonghakauth.dto.ChangePasswordDto; import com.example.gimmegonghakauth.dto.UserJoinDto; @@ -13,7 +12,6 @@ import org.springframework.security.core.Authentication; import org.springframework.security.core.context.SecurityContextHolder; import org.springframework.security.core.userdetails.UserDetails; -import org.springframework.security.crypto.password.PasswordEncoder; import org.springframework.security.web.authentication.logout.SecurityContextLogoutHandler; import org.springframework.stereotype.Controller; import org.springframework.ui.Model; @@ -30,15 +28,13 @@ public class UserController { private final UserService userService; private final MajorsDao majorsDao; - private final UserDao userDao; - private final PasswordEncoder passwordEncoder; @GetMapping("") public String userInformation(Model model, Authentication authentication){ UserDetails userDetails = (UserDetails) authentication.getPrincipal(); Long studentId = Long.parseLong(userDetails.getUsername()); - UserDomain user = userDao.findByStudentId(studentId).get(); + UserDomain user = userService.getByStudentId(studentId); model.addAttribute("user",user); return "user/information"; @@ -110,15 +106,14 @@ public String changePassword(@Valid ChangePasswordDto changePasswordDto, BindingResult bindingResult, Authentication authentication) { UserDetails userDetails = (UserDetails) authentication.getPrincipal(); Long studentId = Long.parseLong(userDetails.getUsername()); - UserDomain user = userDao.findByStudentId(studentId).get(); + UserDomain user = userService.getByStudentId(studentId); if (bindingResult.hasErrors()) { return "user/changePassword"; } if (!userService.changePasswordValidation(changePasswordDto, bindingResult, user)) { return "user/changePassword"; //비밀번호 변경 검증 } - user.updatePassword(passwordEncoder.encode(changePasswordDto.getNewPassword1())); - userDao.save(user); + userService.updatePassword(user, changePasswordDto); //비밀번호 변경 return "redirect:/user/login"; //성공적인 비밀번호 변경시 로그인 페이지로 이동 } diff --git a/src/main/java/com/example/gimmegonghakauth/exception/UserNotFoundException.java b/src/main/java/com/example/gimmegonghakauth/exception/UserNotFoundException.java new file mode 100644 index 0000000..beb8afc --- /dev/null +++ b/src/main/java/com/example/gimmegonghakauth/exception/UserNotFoundException.java @@ -0,0 +1,8 @@ +package com.example.gimmegonghakauth.exception; + +public class UserNotFoundException extends RuntimeException { + + public UserNotFoundException(Long studentId) { + super(studentId + " 학생은 존재하지 않습니다."); + } +} diff --git a/src/main/java/com/example/gimmegonghakauth/service/UserService.java b/src/main/java/com/example/gimmegonghakauth/service/UserService.java index 49060b6..1a7d591 100644 --- a/src/main/java/com/example/gimmegonghakauth/service/UserService.java +++ b/src/main/java/com/example/gimmegonghakauth/service/UserService.java @@ -4,9 +4,10 @@ import com.example.gimmegonghakauth.dao.UserDao; import com.example.gimmegonghakauth.domain.CompletedCoursesDomain; import com.example.gimmegonghakauth.domain.MajorsDomain; +import com.example.gimmegonghakauth.domain.UserDomain; import com.example.gimmegonghakauth.dto.ChangePasswordDto; import com.example.gimmegonghakauth.dto.UserJoinDto; -import com.example.gimmegonghakauth.domain.UserDomain; +import com.example.gimmegonghakauth.exception.UserNotFoundException; import java.util.List; import org.springframework.security.core.userdetails.UsernameNotFoundException; import org.springframework.security.crypto.password.PasswordEncoder; @@ -41,6 +42,17 @@ public UserDomain create(String _studentId, String password, String email, return user; } + public UserDomain updatePassword(UserDomain user, ChangePasswordDto dto) { + user.updatePassword(passwordEncoder.encode(dto.getNewPassword1())); + userDao.save(user); + return user; + } + + public UserDomain getByStudentId(Long studentId) { + return userDao.findByStudentId(studentId) + .orElseThrow(() -> new UserNotFoundException(studentId)); + } + public boolean joinValidation(UserJoinDto userJoinDto, BindingResult bindingResult) { if (checkPassword(userJoinDto)) { bindingResult.rejectValue("password2", "passwordInCorrect", "2개의 패스워드가 일치하지 않습니다."); @@ -68,7 +80,7 @@ public boolean checkStudentId(String studentId) { return userDao.existsByStudentId(Long.parseLong(studentId)); } - public boolean checkEmail(String email){ + public boolean checkEmail(String email) { return userDao.existsByEmail(email); } From 33fcd647d78f809fc000a7085cc18e21ac778ecf Mon Sep 17 00:00:00 2001 From: Taehyeon Jo <70999462+whxogus215@users.noreply.github.com> Date: Wed, 2 Oct 2024 22:53:31 +0900 Subject: [PATCH 02/12] =?UTF-8?q?refactor:=20TestController=20=EC=82=AD?= =?UTF-8?q?=EC=A0=9C?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 개발 초기에 만들었고, 아예 사용 안되는 클래스라서 삭제함 --- .../controller/TestController.java | 27 ------------------- 1 file changed, 27 deletions(-) delete mode 100644 src/main/java/com/example/gimmegonghakauth/controller/TestController.java diff --git a/src/main/java/com/example/gimmegonghakauth/controller/TestController.java b/src/main/java/com/example/gimmegonghakauth/controller/TestController.java deleted file mode 100644 index b1c3348..0000000 --- a/src/main/java/com/example/gimmegonghakauth/controller/TestController.java +++ /dev/null @@ -1,27 +0,0 @@ -package com.example.gimmegonghakauth.controller; - -import org.springframework.web.bind.annotation.GetMapping; -import org.springframework.web.bind.annotation.RequestMapping; -import org.springframework.web.bind.annotation.RestController; - -@RestController -public class TestController { - - @GetMapping("/test") - public String test0() { - return "테스트트트트"; - } - - @GetMapping("/api/test") - public String test() { - return "SpringBoot 실행 성공"; - } - - @GetMapping("/api/hello") - public String hello() { - return "Hello"; - } - - // Github Actions 파이프라인 테스트 - // 주석 추가 -} From f435e8929c635070602e8a5262ad5abb6b79c803 Mon Sep 17 00:00:00 2001 From: Taehyeon Jo <70999462+whxogus215@users.noreply.github.com> Date: Wed, 2 Oct 2024 23:14:11 +0900 Subject: [PATCH 03/12] =?UTF-8?q?chore:=20sql=20.gitignore=EC=97=90?= =?UTF-8?q?=EC=84=9C=20=EC=A0=9C=EA=B1=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .gitignore | 1 - mysql/init/schema.sql | 79 ++++++ mysql/init/test-data.sql | 591 +++++++++++++++++++++++++++++++++++++++ 3 files changed, 670 insertions(+), 1 deletion(-) create mode 100644 mysql/init/schema.sql create mode 100644 mysql/init/test-data.sql diff --git a/.gitignore b/.gitignore index 014d05f..c4d147d 100644 --- a/.gitignore +++ b/.gitignore @@ -29,7 +29,6 @@ out/ !**/src/test/**/out/ *.csv -*.sql *.env ### NetBeans ### diff --git a/mysql/init/schema.sql b/mysql/init/schema.sql new file mode 100644 index 0000000..b748d79 --- /dev/null +++ b/mysql/init/schema.sql @@ -0,0 +1,79 @@ +DROP DATABASE IF EXISTS gonghak; +CREATE DATABASE gonghak default character set utf8mb4 collate utf8mb4_unicode_ci; +USE gonghak; + +DROP TABLE IF EXISTS major; +DROP TABLE IF EXISTS abeek; +DROP TABLE IF EXISTS completed_course; +DROP TABLE IF EXISTS course; +DROP TABLE IF EXISTS gonghak_course; +DROP TABLE IF EXISTS user; + +create table major +( + major_id bigint not null auto_increment, + major varchar(255) not null, + primary key (major_id) +); + +create table abeek +( + abeek_type tinyint not null check (abeek_type between 0 and 5), + min_credit integer not null, + year integer not null check ((year >= 14) and (year <= 24)), + abeek_id bigint not null auto_increment, + major_id bigint, + note tinytext, + primary key (abeek_id), + foreign key (major_id) + references major (major_id) +); + +create table course +( + credit integer not null, + course_id bigint not null, + name varchar(255) not null, + primary key (course_id) +); + +create table completed_course +( + semester integer not null check ((semester >= 1) and (semester <= 2)), + year integer not null check ((year >= 2015) and (year <= 2024)), + completed_course_id bigint not null auto_increment, + course_id bigint, + user_id bigint, + primary key (completed_course_id), + foreign key (course_id) + references course (course_id) +); + +create table gonghak_course +( + design_credit float(53) not null check ((design_credit >= 0) and (design_credit <= 6)), + year integer not null check ((year >= 15) and (year <= 24)), + course_id bigint, + gonghak_course_id bigint not null auto_increment, + major_id bigint, + course_category_const enum ('BSM','MSC','전공','전공기초','전공주제','전문교양','전선','전필') not null, + pass_category varchar(255) not null, + primary key (gonghak_course_id), + foreign key (course_id) + references course (course_id), + foreign key (major_id) + references major (major_id) +); + +create table user +( + major_id bigint, + student_id bigint not null unique, + user_id bigint not null auto_increment, + email varchar(255) not null, + name varchar(255) not null, + password varchar(255) not null, + primary key (user_id), + foreign key (major_id) + references major (major_id) +); diff --git a/mysql/init/test-data.sql b/mysql/init/test-data.sql new file mode 100644 index 0000000..da6534b --- /dev/null +++ b/mysql/init/test-data.sql @@ -0,0 +1,591 @@ +INSERT INTO major (major_id, major) +VALUES (NULL, '컴퓨터공학과'), + (NULL, '전자정보통신공학과'); + +INSERT INTO abeek (abeek_id, abeek_type, min_credit, year, major_id, note) +VALUES (NULL, 5, 18, 19, 1, 'this is a test note'), + (NULL, 0, 14, 19, 1, 'this is a test note'), + (NULL, 3, 12, 19, 1, 'this is a test note'), + (NULL, 2, 60, 19, 1, 'this is a test note'), + (NULL, 4, 92, 19, 1, 'this is a test note'), + (NULL, 1, 30, 19, 2, 'this is a test note'), + (NULL, 0, 14, 19, 2, 'this is a test note'), + (NULL, 3, 9, 19, 2, 'this is a test note'), + (NULL, 2, 54, 19, 2, 'this is a test note'), + (NULL, 4, 98, 19, 2, 'this is a test note'); + +INSERT INTO user (user_id, major_id, student_id, email, name, password) +VALUES (NULL, 1, 19011706, 'testEmail', '홍지섭', '$2a$10$8zybwDurM2ANNo89z7jHBOlNIc6mpp2ws0Ra9co.kYi7aiLXqRDG6'), + (NULL, 2, 19111111, 'testEmail123', '전통이', '$2a$10$y/6aBlcuQfusz3le/oFuCe5sBJ4tBOVH1dr96AC5B11T6.lZlRIOW'), + (NULL, 1, 12345678, 'testEmail', 'testUser', '$2a$10$GvBpgZVvDnjq8VTdxUPOjOZ/djhWlfIzwveZS/plinzDnDTXYK.Ky'); + + + +INSERT INTO course (credit, course_id, name) +VALUES (3, 107, '경영수학'), + (1, 285, '골프'), + (3, 304, '공업수학1'), + (3, 307, '공업수학2'), + (2, 464, '교육과정'), + (2, 476, '교육방법및교육공학'), + (2, 486, '교육사회'), + (2, 496, '교육심리'), + (2, 512, '교육철학및교육사'), + (2, 520, '교육평가'), + (2, 525, '교육학개론'), + (2, 534, '교육행정및교육경영'), + (3, 929, '독어'), + (3, 1234, 'testCourse1'), + (3, 1725, '선형대수'), + (3, 1769, '소프트웨어공학'), + (3, 1993, '심리학의이해'), + (4, 2345, 'testCourse2'), + (3, 2505, '인공지능'), + (3, 2638, '일반물리학1'), + (3, 2647, '일반물리학및실험1'), + (3, 2649, '일반물리학및실험2'), + (3, 2657, '일반생물학'), + (3, 2703, '일반화학'), + (3, 2719, '일반화학및실험1'), + (3, 2723, '일반화학및실험2'), + (3, 3129, '지구과학개론'), + (3, 3272, '컴파일러'), + (3, 3276, '컴퓨터구조론'), + (3, 3278, '컴퓨터구조'), + (3, 3281, '컴퓨터그래픽스'), + (3, 3284, '컴퓨터네트워크'), + (3, 3353, '통계학개론'), + (3, 3430, '프로그래밍'), + (3, 4111, '물리전자공학'), + (3, 4114, '전기회로'), + (3, 4118, '디지털시스템'), + (3, 4268, '데이터구조론'), + (3, 4310, '운영체제'), + (3, 4474, '통신이론'), + (3, 4475, '자동제어'), + (3, 4489, '한국의전통과문화'), + (3, 4543, '생활과경제'), + (3, 4546, '패션디자인의이해'), + (3, 4547, '식생활과건강'), + (3, 4596, '반도체공학'), + (3, 4599, '통신시스템'), + (3, 4600, '디지털신호처리'), + (3, 4635, '음식문화사'), + (3, 4698, '유선통신공학'), + (3, 4699, '데이터통신'), + (3, 4763, '과학사'), + (3, 4796, '과학철학'), + (3, 4798, '세계경제의이해'), + (3, 4829, '광전자공학'), + (3, 5106, '생명의미시적세계'), + (3, 5130, 'JAVA프로그래밍'), + (3, 5155, '경영통계학'), + (3, 5173, '생명의거시적세계'), + (3, 5192, '생활속의마케팅이해'), + (3, 5246, '신호및시스템'), + (3, 5532, '생명질서와자연보호'), + (3, 5537, '지구탐사'), + (3, 5541, '식물의세계'), + (1, 5565, '스쿼시'), + (3, 5611, '디지털논리회로'), + (3, 5617, 'Unix프로그래밍'), + (3, 5618, '네트워크프로그래밍'), + (3, 5636, '멀티미디어'), + (3, 5698, '패션코디네이션기초'), + (3, 5824, '패션과문화'), + (3, 5991, '스피치커뮤니케이션'), + (2, 6096, '한일교류사'), + (3, 6098, '기초미적분학'), + (3, 6132, '영상처리'), + (3, 6134, 'HCI개론'), + (3, 6139, '임베디드시스템'), + (3, 6208, '가상현실'), + (3, 6214, '일본어1'), + (3, 6215, '일본어2'), + (3, 6237, '웹프로그래밍'), + (3, 6270, '동양의철학사상'), + (3, 6279, '정보사회의사이버윤리'), + (2, 6283, '생활속의색채심리학'), + (2, 6286, '현대인과건강관리'), + (3, 6294, '음성처리'), + (2, 6422, '성과문화'), + (2, 6425, '스포츠와대중매체'), + (3, 6474, 'C#프로그래밍'), + (3, 6478, '무선통신'), + (2, 6538, '현대사회와스포츠'), + (3, 6558, '무선통신공학'), + (3, 6559, '정보이론'), + (3, 6562, '초고주파공학'), + (2, 6709, '운동과다이어트'), + (2, 6711, '건강과삶'), + (3, 6713, '미디어와현대사회'), + (3, 6714, '현대과학으로의여행'), + (2, 6716, '경력개발과멘토링'), + (3, 6844, 'Intensive English'), + (3, 6846, '지구환경과학입문'), + (3, 6935, '정보시스템설계'), + (3, 6954, 'Job Hunting Skills'), + (2, 7082, '취업과진로'), + (3, 7207, '기초중국어1'), + (3, 7208, '기초중국어2'), + (3, 7210, '역사와한국의영토'), + (3, 7211, '중국문화의이해'), + (2, 7214, '글로벌잉글리쉬1'), + (3, 7219, '데이터베이스'), + (2, 7221, '진로설정과자기계발'), + (3, 7235, '랜덤프로세스'), + (2, 7239, '글로벌잉글리쉬2'), + (3, 7313, '프로그래밍언어의개념'), + (3, 7321, '생활일본어'), + (3, 7338, '중국의정치경제와사회'), + (3, 7345, '미술심리치료'), + (3, 7369, '발레의이해와감상'), + (3, 7399, '영상매체속의영어'), + (3, 7401, '영어발음연습'), + (3, 7453, '전자회로1'), + (3, 7463, '차세대이동통신'), + (1, 7503, '영어읽기연습'), + (1, 7504, '영어듣기연습'), + (2, 7564, '이미지메이킹'), + (2, 7565, '우리차문화의이해'), + (3, 7568, '컴퓨터게임과문화'), + (3, 7588, '방송시스템'), + (3, 7620, '기초설계'), + (3, 7640, 'VHDL프로그래밍'), + (3, 7720, '디스플레이공학'), + (3, 7721, '반도체소자설계'), + (3, 7722, '전자회로2'), + (3, 7728, '문화와경제'), + (3, 7731, '철학과인간이해'), + (1, 7745, '교직소양을위한독서강좌2'), + (3, 7761, '동아시아와한반도'), + (1, 7771, '교양스키'), + (1, 7772, '교양배드민턴'), + (2, 7779, '현대인의정신건강과자기발견'), + (3, 7806, '기초반도체'), + (1, 7849, '교직소양을위한독서강좌1'), + (3, 8076, '기초광학및실험'), + (3, 8079, '광반도체및LED공학'), + (3, 8086, '디지털통신시스템'), + (3, 8263, '21세기외교전쟁'), + (0, 8272, '교직윤리함양워크숍'), + (2, 8276, '학교현장실습'), + (2, 8283, '교직실무'), + (3, 8300, '쟁점으로이해하는북한사회'), + (2, 8303, 'English Composition 1'), + (2, 8304, 'English Composition 2'), + (1, 8334, '교육봉사활동1'), + (1, 8335, '교육봉사활동2'), + (2, 8336, '교육봉사활동3'), + (2, 8337, '특수교육학개론'), + (1, 8364, '세종사회봉사1'), + (1, 8365, '세종사회봉사2'), + (3, 8377, '전산개론-I'), + (3, 8378, '전산개론-O'), + (3, 8380, '전산개론-M'), + (2, 8381, '세종리더십'), + (3, 8621, 'MATLAB프로그래밍'), + (3, 8622, '확률및랜덤변수'), + (3, 8626, '하드웨어프로그래밍'), + (3, 8627, '시스템반도체'), + (3, 8636, '멀티코어프로그래밍'), + (3, 8882, '동서양의윤리'), + (3, 8884, '국가와정체성'), + (3, 8885, '과학기술과사회'), + (3, 8887, '언어와문명'), + (3, 8888, '그리스로마신화의이해'), + (3, 8890, '천문학의세계'), + (3, 8892, '생명과학의미래'), + (3, 8894, '세계화와글로벌거버넌스'), + (3, 8895, 'EU의정치경제와사회'), + (3, 8896, '언어와사회의이해'), + (3, 8898, '영어로하는프리젠테이션'), + (2, 8910, '생활지도및상담'), + (1, 8913, '동양고전강독1'), + (1, 8914, '서양고전강독1'), + (1, 8932, '동양고전강독2'), + (1, 8933, '서양고전강독2'), + (3, 8934, '인류학과현대사회'), + (3, 8936, '정치경제학의이해'), + (3, 8937, '현대과학기술의이해'), + (3, 8939, '지구의이해'), + (3, 8966, '꽃의세계'), + (5, 9000, 'testCourse3'), + (3, 9001, 'testCourse4'), + (3, 9002, 'testCourse5'), + (1, 9030, '취업역량개발론'), + (3, 9031, '한국현대사의이해'), + (2, 9033, '독서토론'), + (2, 9034, '디자인이노베이션'), + (3, 9035, '창업의이론과실제'), + (1, 9045, '창업과기업가정신1'), + (2, 9046, '글로벌잉글리쉬1(진로탐색)'), + (2, 9047, '글로벌잉글리쉬2(진로탐색)'), + (1, 9048, '글로벌잉글리쉬1(심화)'), + (1, 9049, '글로벌잉글리쉬2(심화)'), + (1, 9057, '서양고전강독3'), + (1, 9058, '서양고전강독4'), + (3, 9060, '미디어빅뱅시대의기업과브랜드'), + (2, 9061, '웰빙레저스포츠'), + (2, 9065, 'English Writing 1'), + (2, 9066, 'English Writing 2'), + (3, 9067, '문제해결을위한글쓰기와발표'), + (3, 9068, '서양철학:쟁점과토론'), + (2, 9073, 'English Speaking Strategies(TS) 1'), + (2, 9074, 'English Speaking Strategies(TS) 2'), + (3, 9251, '중급미술심리치료'), + (3, 9252, '영상스토리텔링'), + (3, 9259, 'K-Pop Music 1'), + (3, 9261, 'K-Pop Music 2'), + (3, 9265, 'K-Pop Dance 1'), + (3, 9268, 'K-Pop Dance 2'), + (2, 9345, 'English Speaking Strategies(O) 1'), + (2, 9346, 'English Speaking Strategies(O) 2'), + (3, 9352, '사고와표현1'), + (3, 9353, '사고와표현2'), + (3, 9354, '한국의언어와문화1'), + (3, 9355, '한국의언어와문화2'), + (3, 9356, '한국전통문화의이해'), + (3, 9357, '서양철학의이해'), + (1, 9452, '창업과기업가정신2'), + (3, 9453, '보컬트레이닝'), + (3, 9455, '경제학의이해'), + (3, 9489, '세계사:인간과문명'), + (3, 9648, '데이터분석과도표작성'), + (3, 9649, '전자기1'), + (3, 9650, '데이터통신설계'), + (3, 9654, '전자정보통신공학특강A'), + (3, 9655, '광통신공학'), + (3, 9658, '전기회로실험'), + (3, 9659, '전자기2'), + (3, 9661, '반도체공정실험'), + (3, 9662, '전자회로설계'), + (3, 9663, '멀티미디어설계'), + (3, 9665, '패턴인식'), + (3, 9666, '마이크로컴퓨터실험'), + (2, 9707, '생명시스템공학입문'), + (3, 9708, '기초생물통계학'), + (3, 9738, '서양종교의이해'), + (3, 9739, '복지국가의이해'), + (3, 9740, '동양의철학사상-노장과불교'), + (3, 9768, '성의과학'), + (3, 9769, '국제개발협력과해외봉사'), + (3, 9775, '동양종교의이해'), + (3, 9776, '동양의철학사상-공맹과성리학'), + (3, 9778, '경영학의이해'), + (1, 9780, '고전특강'), + (3, 9784, '기후변화와창조경영'), + (3, 9785, '공간마케팅'), + (3, 9789, '프로그래밍입문-P'), + (3, 9790, '고급프로그래밍입문-P'), + (3, 9791, '고급프로그래밍입문-C'), + (3, 9799, '소프트웨어기초코딩'), + (4, 9912, 'C프로그래밍및실습'), + (4, 9913, '고급C프로그래밍및실습'), + (3, 9914, '공학설계기초(산학프로젝트입문)'), + (2, 9936, 'Technical Writing기초'), + (1, 9938, '동서양고전문학강독'), + (3, 9939, '동서양종교의이해'), + (3, 9947, '캡스톤디자인A'), + (3, 9948, '캡스톤디자인B'), + (4, 9952, '자료구조및실습'), + (4, 9954, '알고리즘및실습'), + (3, 9955, '이산수학및프로그래밍'), + (3, 9956, '문제해결및실습:JAVA'), + (3, 9957, '오픈소스SW개론'), + (3, 9959, '확률통계및프로그래밍'), + (6, 9960, 'Capstone디자인(산학협력프로젝트)'), + (3, 9961, '선형대수및프로그래밍'), + (3, 9966, '소프트웨어특강1'), + (3, 9967, '특허와창업'), + (3, 9973, '소프트웨어특강2'), + (2, 9981, 'English Listening'), + (2, 9982, 'English Reading'), + (3, 9992, '문제해결및실습:C++'), + (3, 10000, '기계학습'), + (2, 10083, '취업전략및사회진출'), + (3, 10084, '오픈소스SW공학'), + (2, 10110, '문화콘텐츠와성서'), + (1, 10111, '졸업연구및진로1'), + (1, 10112, '졸업연구및진로2'), + (3, 10132, '유니스토리'), + (3, 10133, 'Relations between North and South Korea'), + (3, 10134, 'Korean Politics'), + (1, 10135, '재난대응과안전리더십'), + (3, 10140, '일변수미적분학'), + (3, 10141, '다변수미적분학'), + (1, 10351, '대학생활과진로설계'), + (2, 10352, 'English Listening Practice 1'), + (2, 10353, 'English Listening Practice 2'), + (2, 10354, 'English Reading Practice 1'), + (2, 10355, 'English Reading Practice 2'), + (2, 10356, '대학생을위한실용금융'), + (1, 10357, '수요집현강좌'), + (3, 10358, '행복한가정만들기'), + (3, 10359, 'SHP고전강좌:Reading Intellectus 1'), + (1, 10360, '청년에게들려주는통일이야기'), + (3, 10361, '먹고즐기는자연'), + (3, 10362, '푸른바다생물이야기'), + (3, 10363, '곤충의새로운가치'), + (3, 10396, 'K-MOOC:알기쉬운드론항법제어'), + (3, 10402, '인간과우주'), + (3, 10403, '동양사상산책'), + (3, 10404, '유대인의창의성과리더십'), + (3, 10406, '인물로보는세계사'), + (3, 10407, '시사로보는경제이야기'), + (1, 10410, 'K-MOOC:웨어러블컴퓨터디자인'), + (1, 10411, 'K-MOOC:모빌리티디자인방법론'), + (3, 10412, 'K-MOOC:콘텐츠산업의비즈니스전략'), + (3, 10415, '자기주도창의교양Ⅲ'), + (3, 10418, '자기주도창의전공Ⅰ'), + (3, 10419, '자기주도창의전공Ⅱ'), + (3, 10420, '자기주도창의전공Ⅲ'), + (3, 10421, '자기주도창의전공Ⅳ'), + (3, 10426, '두뇌로알아보는우리의삶'), + (3, 10427, 'SHP고전강좌:Reading Intellectus 2'), + (3, 10440, '문제해결기법'), + (3, 10528, '컴퓨팅사고기반기초코딩'), + (2, 10529, 'Technical Writing기초2'), + (3, 10530, 'SHP고전강좌:Writing Intellectus 1'), + (3, 10531, '세계시민정신'), + (2, 10532, '아시아공동체의이해'), + (2, 10534, '학교폭력예방및학생의이해'), + (3, 10538, '융합적사고'), + (1, 10539, '애지헌강좌1'), + (1, 10540, '애지헌강좌2'), + (3, 10541, 'SHP고전강좌:Writing Intellectus 2'), + (1, 10542, 'K-MOOC:일반인을위한물리코딩'), + (1, 10543, 'K-MOOC:코딩과스토리텔링'), + (1, 10544, 'K-MOOC:빅데이터와텍스트마이닝'), + (1, 10651, '진로오딧세이'), + (3, 10652, 'SHP고전강좌:Building Intellectus 1'), + (2, 10653, '안보학'), + (2, 10654, '안전및조직관리사례연구'), + (2, 10655, '조직리더십'), + (2, 10656, '조직리더십사례연구'), + (1, 10663, 'SHP고전강좌:Building Intellectus 2'), + (3, 10664, '기술과창업'), + (3, 10665, '빅데이터로세상보기'), + (2, 10666, '세종인을위한오케스트라첫걸음'), + (3, 10667, '인문지리학의이해'), + (3, 10668, '자연지리학의이해'), + (3, 10669, '한국전쟁을통해보는한국의이해'), + (3, 10797, '융합적사고에기반한인문사회계글쓰기'), + (3, 10798, '융합적사고에기반한이공계글쓰기'), + (2, 10799, '세종인을위한합창'), + (3, 10800, '라틴아메리카의언어와문화'), + (3, 500398, '지구촌문화의이해와테마여행'), + (3, 500698, '설득력있는프리젠테이션'), + (3, 501245, '팝으로영어청취하기'), + (3, 501253, '영화및사진치료'), + (3, 501266, '사회적기업의이해와창업'), + (3, 501270, '인간행동의심리적이해'), + (3, 501274, '한글의세계화'), + (3, 501277, 'TOEIC R/C'), + (3, 501297, '생활속의법률이야기'), + (3, 501300, '인간관계심리학'), + (3, 501301, '커피아카데미'), + (3, 501309, '가족스트레스와대처'), + (3, 501328, '알기쉬운코딩'), + (3, 501330, '생활중국어'), + (3, 501331, '디지털게임의이해'), + (3, 501332, '나혼자영상만들기'), + (3, 501338, '유튜브영상편집기초'), + (3, 600008, '문화기술과사회변동'), + (3, 600010, '웰니스와삶의질'), + (3, 600011, '글로벌시대의예술과가치'), + (3, 600015, '생태친화적기업경영'), + (3, 600018, '문화콘텐츠스토리텔링전략'), + (3, 600020, '음식과세계문화'), + (3, 600022, '성공하는문화콘텐츠소재개발전략'), + (3, 600023, '상상과창조'), + (3, 600028, '생활속의계약과협상'), + (2, 600029, '저작권과스마트폰의이해'), + (3, 600030, '문화행정론'), + (3, 600031, '철학과인간가치'), + (3, 600033, '테크노경영학(스타트업종합설계)'), + (3, 600034, '모두의스타트업코딩'), + (3, 600036, '4차산업혁명:융합적분석과인문학의대안'); + +INSERT INTO gonghak_course (design_credit, year, course_id, gonghak_course_id, major_id, course_category_const, + pass_category) +VALUES (0, 19, 1234, 1, 1, 'BSM', '인필'), + (0, 19, 2345, 2, 1, 'BSM', '인필'), + (1, 19, 9000, 3, 1, '전선', '인선'), + (1, 19, 9002, 4, 1, '전필', '인선'), + (0, 19, 9067, 5, 1, '전문교양', '인필'), + (0, 19, 10351, 6, 1, '전문교양', '인필'), + (0, 19, NULL, 7, 1, '전문교양', '인필'), + (0, 19, 9790, 8, 1, '전문교양', '인필'), + (0, 19, 6098, 9, 1, 'BSM', '인필'), + (0, 19, 2647, 10, 1, 'BSM', '인필'), + (0, 19, 9912, 11, 1, '전공주제', '인필'), + (0, 19, 9045, 12, 1, '전문교양', '인필'), + (0, 19, 10352, 13, 1, '전문교양', '인필'), + (0, 19, 9068, 14, 1, '전문교양', '인필'), + (0, 19, 304, 15, 1, 'BSM', '인필'), + (1, 19, 9913, 16, 1, '전공주제', '인필'), + (3, 19, 9914, 17, 1, '전공주제', '인필'), + (0, 19, NULL, 18, 1, '전공주제', '인선'), + (0, 19, 9489, 19, 1, '전문교양', '인필'), + (0, 19, 9952, 20, 1, '전공주제', '인필'), + (1, 19, 4118, 21, 1, '전공주제', '인필'), + (1, 19, NULL, 22, 1, '전공주제', '인선'), + (0, 19, 6237, 23, 1, '전공주제', '인선'), + (0, 19, NULL, 24, 1, '전공주제', '인선'), + (0, 19, 10354, 25, 1, '전문교양', '인필'), + (0, 19, 9955, 26, 1, 'BSM', '인필'), + (0, 19, 9954, 27, 1, '전공주제', '인필'), + (0, 19, 3276, 28, 1, '전공주제', '인필'), + (1, 19, 9956, 29, 1, '전공주제', '인선'), + (0, 19, 9957, 30, 1, '전공주제', '인선'), + (0, 19, 5636, 31, 1, '전공주제', '인선'), + (1, 19, NULL, 32, 1, '전공주제', '인선'), + (0, 19, 9959, 33, 1, 'BSM', '인필'), + (0, 19, 4310, 34, 1, '전공주제', '인필'), + (1, 19, 10084, 35, 1, '전공주제', '인선'), + (1, 19, 7219, 36, 1, '전공주제', '인선'), + (1, 19, 3281, 37, 1, '전공주제', '인선'), + (0, 19, 5246, 38, 1, '전공주제', '인선'), + (2, 19, NULL, 39, 1, '전공주제', '인선'), + (0, 19, 7313, 40, 1, '전공주제', '인선'), + (1, 19, 6474, 41, 1, '전공주제', '인선'), + (1, 19, 7640, 42, 1, '전공주제', '인선'), + (0, 19, NULL, 43, 1, '전공주제', '인선'), + (0, 19, NULL, 44, 1, '전문교양', '인선'), + (0, 19, 9961, 45, 1, 'BSM', '인필'), + (0, 19, 3284, 46, 1, '전공주제', '인필'), + (0, 19, 4600, 47, 1, '전공주제', '인선'), + (0, 19, 1769, 48, 1, '전공주제', '인선'), + (1, 19, 5617, 49, 1, '전공주제', '인선'), + (1, 19, NULL, 50, 1, '전공주제', '인선'), + (0, 19, NULL, 51, 1, '전공주제', '인선'), + (2, 19, NULL, 52, 1, '전공주제', '인선'), + (0, 19, NULL, 53, 1, '전공주제', '인선'), + (0, 19, 4599, 54, 1, '전공주제', '인선'), + (0, 19, 8636, 55, 1, '전공주제', '인선'), + (0, 19, 10440, 56, 1, '전공주제', '인선'), + (0, 19, 10111, 57, 1, '전공주제', '인선'), + (6, 19, 9960, 58, 1, '전공주제', '인필'), + (1, 19, 6132, 59, 1, '전공주제', '인선'), + (0, 19, 6208, 60, 1, '전공주제', '인선'), + (1, 19, 6139, 61, 1, '전공주제', '인선'), + (0, 19, NULL, 62, 1, '전공주제', '인선'), + (1, 19, 5618, 63, 1, '전공주제', '인선'), + (0, 19, 4699, 64, 1, '전공주제', '인선'), + (0, 19, NULL, 65, 1, '전공주제', '인선'), + (0, 19, 6478, 66, 1, '전공주제', '인선'), + (0, 19, NULL, 67, 1, '전공주제', '인선'), + (0, 19, 2505, 68, 1, '전공주제', '인선'), + (0, 19, 9665, 69, 1, '전공주제', '인선'), + (0, 19, 9966, 70, 1, '전공주제', '인선'), + (0, 19, NULL, 71, 1, '전공주제', '인선'), + (0, 19, NULL, 72, 1, '전공주제', '인선'), + (0, 19, 10112, 73, 1, '전공주제', '인선'), + (0, 19, 9967, 74, 1, '전공주제', '인선'), + (0, 19, NULL, 75, 1, '전공주제', '인선'), + (0, 19, NULL, 76, 1, '전공주제', '인선'), + (0, 19, NULL, 77, 1, '전공주제', '인선'), + (0, 19, 6134, 78, 1, '전공주제', '인선'), + (0, 19, NULL, 79, 1, '전공주제', '인선'), + (0, 19, NULL, 80, 1, '전공주제', '인선'), + (0, 19, NULL, 81, 1, '전공주제', '인선'), + (0, 19, NULL, 82, 1, '전공주제', '인선'), + (0, 19, 3272, 83, 1, '전공주제', '인선'), + (0, 19, NULL, 84, 1, '전공주제', '인선'), + (0, 19, 9973, 85, 1, '전공주제', '인선'), + (0, 19, NULL, 86, 1, '전공주제', '인선'), + (0, 19, 6208, 87, 1, '전공주제', '인선'), + (0, 19, 9067, 88, 2, '전문교양', '인필'), + (0, 19, 8364, 89, 2, '전문교양', '인필'), + (0, 19, 10140, 90, 2, 'MSC', '인필'), + (0, 19, 9791, 91, 2, 'MSC', '인필'), + (0, 19, 2703, 92, 2, 'MSC', '인필'), + (0, 19, 2647, 93, 2, 'MSC', '인필'), + (0, 19, 10352, 94, 2, '전문교양', '인필'), + (0, 19, 9068, 95, 2, '전문교양', '인필'), + (0, 19, 304, 96, 2, 'MSC', '인필'), + (0, 19, 1725, 97, 2, 'MSC', '인필'), + (0, 19, 3430, 98, 2, 'MSC', '인필'), + (0, 19, 2649, 99, 2, 'MSC', '인필'), + (0, 19, NULL, 100, 2, '전문교양', '인필'), + (0, 19, 307, 101, 2, 'MSC', '인필'), + (0, 19, 8622, 102, 2, 'MSC', '인필'), + (0, 19, 4114, 103, 2, '전공', '인선'), + (0, 19, 8621, 104, 2, '전공', '인선'), + (0, 19, 5611, 105, 2, '전공', '인선'), + (0, 19, 10354, 106, 2, '전문교양', '인필'), + (0, 19, 5246, 107, 2, '전공', '인선'), + (0, 19, 4111, 108, 2, '전공', '인선'), + (0, 19, 5130, 109, 2, '전공', '인선'), + (0, 19, 3276, 110, 2, '전공', '인선'), + (0, 19, 9658, 111, 2, '전공', '인선'), + (3, 19, 7620, 112, 2, '전공', '인필'), + (0, 19, 7453, 113, 2, '전공', '인선'), + (0, 19, 4474, 114, 2, '전공', '인선'), + (0, 19, 9649, 115, 2, '전공', '인선'), + (0, 19, 7806, 116, 2, '전공', '인선'), + (0, 19, 4600, 117, 2, '전공', '인선'), + (0, 19, 8626, 118, 2, '전공', '인선'), + (0, 19, 4268, 119, 2, '전공', '인선'), + (0, 19, 7235, 120, 2, '전공', '인선'), + (0, 19, 4475, 121, 2, '전공', '인선'), + (0, 19, 4699, 122, 2, '전공', '인선'), + (0, 19, 8076, 123, 2, '전공', '인선'), + (0, 19, 4829, 124, 2, '전공', '인선'), + (0, 19, 3284, 125, 2, '전공', '인선'), + (0, 19, 8086, 126, 2, '전공', '인선'), + (0, 19, 6294, 127, 2, '전공', '인선'), + (0, 19, 6132, 128, 2, '전공', '인선'), + (0, 19, 9648, 129, 2, '전공', '인선'), + (0, 19, 7722, 130, 2, '전공', '인선'), + (0, 19, 7720, 131, 2, '전공', '인선'), + (0, 19, 9659, 132, 2, '전공', '인선'), + (0, 19, 4596, 133, 2, '전공', '인선'), + (0, 19, 5618, 134, 2, '전공', '인선'), + (0, 19, 6139, 135, 2, '전공', '인선'), + (0, 19, 6559, 136, 2, '전공', '인선'), + (2, 19, 7721, 137, 2, '전공', '인선'), + (2, 19, 9650, 138, 2, '전공', '인선'), + (2, 19, 6935, 139, 2, '전공', '인선'), + (0, 19, 9654, 140, 2, '전공', '인선'), + (0, 19, NULL, 141, 2, '전공', '인선'), + (0, 19, NULL, 142, 2, '전공', '인선'), + (0, 19, 6562, 143, 2, '전공', '인선'), + (0, 19, NULL, 144, 2, '전공', '인선'), + (0, 19, 6558, 145, 2, '전공', '인선'), + (0, 19, 8627, 146, 2, '전공', '인선'), + (0, 19, 9655, 147, 2, '전공', '인선'), + (0, 19, NULL, 148, 2, '전공', '인선'), + (0, 19, 2505, 149, 2, '전공', '인선'), + (0, 19, NULL, 150, 2, '전공', '인선'), + (0, 19, NULL, 151, 2, '전공', '인선'), + (0, 19, 9661, 152, 2, '전공', '인선'), + (0, 19, 9666, 153, 2, '전공', '인선'), + (0, 19, NULL, 154, 2, '전공', '인선'), + (2, 19, 9662, 155, 2, '전공', '인선'), + (2, 19, NULL, 156, 2, '전공', '인선'), + (2, 19, 9663, 157, 2, '전공', '인선'), + (3, 19, 9947, 158, 2, '전공', '인선'), + (0, 19, NULL, 159, 2, '전공', '인선'), + (0, 19, NULL, 160, 2, '전공', '인선'), + (0, 19, NULL, 161, 2, '전공', '인선'), + (0, 19, NULL, 162, 2, '전공', '인선'), + (0, 19, NULL, 163, 2, '전공', '인선'), + (0, 19, NULL, 164, 2, '전공', '인선'), + (0, 19, NULL, 165, 2, '전공', '인선'), + (0, 19, 8079, 166, 2, '전공', '인선'), + (0, 19, 4698, 167, 2, '전공', '인선'), + (0, 19, 7463, 168, 2, '전공', '인선'), + (0, 19, NULL, 169, 2, '전공', '인선'), + (0, 19, 7588, 170, 2, '전공', '인선'), + (0, 19, NULL, 171, 2, '전공', '인선'), + (0, 19, 9665, 172, 2, '전공', '인선'), + (0, 19, NULL, 173, 2, '전공', '인선'), + (3, 19, 9948, 174, 2, '전공', '인선'); + +INSERT INTO completed_course (semester, year, course_id, user_id) +VALUES (1, 2019, 1234, 1), + (1, 2019, 2345, 1), + (1, 2019, 9000, 1), + (1, 2019, 9001, 1); From 9491344739b9ee055b3d81bf0f8f68feef2890e3 Mon Sep 17 00:00:00 2001 From: Taehyeon Jo <70999462+whxogus215@users.noreply.github.com> Date: Wed, 2 Oct 2024 23:36:03 +0900 Subject: [PATCH 04/12] =?UTF-8?q?refactor:=20updatePassword=20=ED=8C=8C?= =?UTF-8?q?=EB=9D=BC=EB=AF=B8=ED=84=B0=20=EC=88=98=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../example/gimmegonghakauth/controller/UserController.java | 2 +- .../com/example/gimmegonghakauth/service/UserService.java | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/src/main/java/com/example/gimmegonghakauth/controller/UserController.java b/src/main/java/com/example/gimmegonghakauth/controller/UserController.java index 2f6d720..dd142a4 100644 --- a/src/main/java/com/example/gimmegonghakauth/controller/UserController.java +++ b/src/main/java/com/example/gimmegonghakauth/controller/UserController.java @@ -113,7 +113,7 @@ public String changePassword(@Valid ChangePasswordDto changePasswordDto, if (!userService.changePasswordValidation(changePasswordDto, bindingResult, user)) { return "user/changePassword"; //비밀번호 변경 검증 } - userService.updatePassword(user, changePasswordDto); + userService.updatePassword(user, changePasswordDto.getNewPassword1()); //비밀번호 변경 return "redirect:/user/login"; //성공적인 비밀번호 변경시 로그인 페이지로 이동 } diff --git a/src/main/java/com/example/gimmegonghakauth/service/UserService.java b/src/main/java/com/example/gimmegonghakauth/service/UserService.java index 1a7d591..df987a3 100644 --- a/src/main/java/com/example/gimmegonghakauth/service/UserService.java +++ b/src/main/java/com/example/gimmegonghakauth/service/UserService.java @@ -42,8 +42,8 @@ public UserDomain create(String _studentId, String password, String email, return user; } - public UserDomain updatePassword(UserDomain user, ChangePasswordDto dto) { - user.updatePassword(passwordEncoder.encode(dto.getNewPassword1())); + public UserDomain updatePassword(UserDomain user, String newPassword) { + user.updatePassword(passwordEncoder.encode(newPassword)); userDao.save(user); return user; } From b20fb66fccc4e50afce50f4e8a4bbf7dc337ed97 Mon Sep 17 00:00:00 2001 From: Taehyeon Jo <70999462+whxogus215@users.noreply.github.com> Date: Thu, 3 Oct 2024 11:33:43 +0900 Subject: [PATCH 05/12] =?UTF-8?q?refactor:=20UserService=EC=9D=98=20Passwo?= =?UTF-8?q?rdEncoder=20=EC=9D=98=EC=A1=B4=EC=84=B1=20=EC=97=AD=EC=A0=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - UserService가 UserEncoder 인터페이스에 의존 - UserEncoder를 구현한 구현체가 PasswordEncoder를 의존 --- .../gimmegonghakauth/service/UserService.java | 25 ++++----- .../service/port/UserEncoder.java | 8 +++ .../user/infrastructure/UserEncoderImpl.java | 23 ++++++++ .../Service/UserServiceTest.java | 52 +++++++++++++++++++ 4 files changed, 92 insertions(+), 16 deletions(-) create mode 100644 src/main/java/com/example/gimmegonghakauth/service/port/UserEncoder.java create mode 100644 src/main/java/com/example/gimmegonghakauth/user/infrastructure/UserEncoderImpl.java create mode 100644 src/test/java/com/example/gimmegonghakauth/Service/UserServiceTest.java diff --git a/src/main/java/com/example/gimmegonghakauth/service/UserService.java b/src/main/java/com/example/gimmegonghakauth/service/UserService.java index df987a3..3662b68 100644 --- a/src/main/java/com/example/gimmegonghakauth/service/UserService.java +++ b/src/main/java/com/example/gimmegonghakauth/service/UserService.java @@ -8,34 +8,28 @@ import com.example.gimmegonghakauth.dto.ChangePasswordDto; import com.example.gimmegonghakauth.dto.UserJoinDto; import com.example.gimmegonghakauth.exception.UserNotFoundException; +import com.example.gimmegonghakauth.service.port.UserEncoder; import java.util.List; +import lombok.RequiredArgsConstructor; import org.springframework.security.core.userdetails.UsernameNotFoundException; -import org.springframework.security.crypto.password.PasswordEncoder; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; import org.springframework.validation.BindingResult; @Transactional @Service +@RequiredArgsConstructor public class UserService { private final UserDao userDao; - private final CompletedCoursesDao completedCoursesDao; - private final PasswordEncoder passwordEncoder; - - public UserService(UserDao userDao, CompletedCoursesDao completedCoursesDao, - PasswordEncoder passwordEncoder) { - this.userDao = userDao; - this.completedCoursesDao = completedCoursesDao; - this.passwordEncoder = passwordEncoder; - } + private final UserEncoder userEncoder; public UserDomain create(String _studentId, String password, String email, MajorsDomain majorsDomain, String name) { Long studentId = Long.parseLong(_studentId); UserDomain user = UserDomain.builder() - .studentId(studentId).password(passwordEncoder.encode(password)) + .studentId(studentId).password(userEncoder.encode(password)) .email(email).majorsDomain(majorsDomain).name(name) .build(); userDao.save(user); @@ -43,7 +37,7 @@ public UserDomain create(String _studentId, String password, String email, } public UserDomain updatePassword(UserDomain user, String newPassword) { - user.updatePassword(passwordEncoder.encode(newPassword)); + user.updatePassword(userEncoder.encode(newPassword)); userDao.save(user); return user; } @@ -90,7 +84,7 @@ public boolean withdrawal(String _studentId, String password) { UserDomain user = userDao.findByStudentId(studentId) .orElseThrow(() -> new UsernameNotFoundException("학번이 존재하지 않습니다.")); - if (passwordEncoder.matches(password, user.getPassword())) { + if (userEncoder.matches(password, user.getPassword())) { List coursesList = completedCoursesDao.findByUserDomain(user); if (!coursesList.isEmpty()) { // CompletedCourses 테이블에서 해당하는 행들을 삭제 @@ -107,12 +101,12 @@ public boolean changePasswordValidation(ChangePasswordDto changePasswordDto, BindingResult bindingResult, UserDomain user) { String password = user.getPassword(); String inputPassword = changePasswordDto.getCurrentPassword(); - if (!passwordEncoder.matches(inputPassword, password)) { //입력한 패스워드가 현재 패스워드와 일치하지 않을 경우 + if (!userEncoder.matches(inputPassword, password)) { //입력한 패스워드가 현재 패스워드와 일치하지 않을 경우 bindingResult.rejectValue("currentPassword", "currentPasswordInCorrect", "현재 패스워드가 일치하지 않습니다."); return false; } - if (passwordEncoder.matches(changePasswordDto.getNewPassword1(), + if (userEncoder.matches(changePasswordDto.getNewPassword1(), password)) { //입력한 새 패스워드가 현재 패스워드와 일치하는 경우 bindingResult.rejectValue("newPassword1", "sameCurrentPassword", "현재 패스워드와 다른 패스워드를 입력해주세요."); @@ -126,5 +120,4 @@ public boolean changePasswordValidation(ChangePasswordDto changePasswordDto, } return true; } - } diff --git a/src/main/java/com/example/gimmegonghakauth/service/port/UserEncoder.java b/src/main/java/com/example/gimmegonghakauth/service/port/UserEncoder.java new file mode 100644 index 0000000..c27546f --- /dev/null +++ b/src/main/java/com/example/gimmegonghakauth/service/port/UserEncoder.java @@ -0,0 +1,8 @@ +package com.example.gimmegonghakauth.service.port; + +public interface UserEncoder { + + String encode(String rawPassword); + + boolean matches(String rawPassword, String encodedPassword); +} diff --git a/src/main/java/com/example/gimmegonghakauth/user/infrastructure/UserEncoderImpl.java b/src/main/java/com/example/gimmegonghakauth/user/infrastructure/UserEncoderImpl.java new file mode 100644 index 0000000..ec88cb9 --- /dev/null +++ b/src/main/java/com/example/gimmegonghakauth/user/infrastructure/UserEncoderImpl.java @@ -0,0 +1,23 @@ +package com.example.gimmegonghakauth.user.infrastructure; + +import com.example.gimmegonghakauth.service.port.UserEncoder; +import lombok.RequiredArgsConstructor; +import org.springframework.security.crypto.password.PasswordEncoder; +import org.springframework.stereotype.Component; + +@Component +@RequiredArgsConstructor +public class UserEncoderImpl implements UserEncoder { + + private final PasswordEncoder passwordEncoder; + + @Override + public String encode(String rawPassword) { + return passwordEncoder.encode(rawPassword); + } + + @Override + public boolean matches(String rawPassword, String encodedPassword) { + return passwordEncoder.matches(rawPassword, encodedPassword); + } +} diff --git a/src/test/java/com/example/gimmegonghakauth/Service/UserServiceTest.java b/src/test/java/com/example/gimmegonghakauth/Service/UserServiceTest.java new file mode 100644 index 0000000..12b712c --- /dev/null +++ b/src/test/java/com/example/gimmegonghakauth/Service/UserServiceTest.java @@ -0,0 +1,52 @@ +package com.example.gimmegonghakauth.Service; + +import static org.assertj.core.api.Assertions.assertThat; + +import com.example.gimmegonghakauth.domain.UserDomain; +import com.example.gimmegonghakauth.dto.ChangePasswordDto; +import com.example.gimmegonghakauth.service.UserService; +import org.junit.jupiter.api.Test; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.boot.test.context.SpringBootTest; +import org.springframework.security.crypto.password.PasswordEncoder; +import org.springframework.test.context.ActiveProfiles; +import org.springframework.transaction.annotation.Transactional; + +@SpringBootTest +@Transactional +@ActiveProfiles("test") +class UserServiceTest { + + private final Long id = 10000101L; + private final String password = "test"; + private final String email = "test@gmail.com"; + private final String name = "test_user"; + + @Autowired + private UserService userService; + + @Autowired + private PasswordEncoder passwordEncoder; + + @Test + void create로_유저를_생성할_수_있다() { + //givne, when + UserDomain user = userService.create(String.valueOf(id), password, email, null, name); + + //then + assertThat(user.getId()).isNotNull(); + } + + @Test + void updatePassword로_유저의_비밀번호를_변경할_수_있다() { + //given + UserDomain user = userService.create(String.valueOf(id), password, email, null, name); + String newPassword = passwordEncoder.encode("test123"); + + //when + UserDomain updatedUser = userService.updatePassword(user, newPassword); + + //then + assertThat(updatedUser.getPassword()).isEqualTo(newPassword); + } +} From 158060916d3a023619de1b44ae189f326ae17902 Mon Sep 17 00:00:00 2001 From: Taehyeon Jo <70999462+whxogus215@users.noreply.github.com> Date: Thu, 3 Oct 2024 12:51:31 +0900 Subject: [PATCH 06/12] =?UTF-8?q?test(UserService):=20create,=20updatePass?= =?UTF-8?q?word=20=EB=A9=94=EC=84=9C=EB=93=9C=20=ED=85=8C=EC=8A=A4?= =?UTF-8?q?=ED=8A=B8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Service/UserServiceTest.java | 10 ++----- .../mock/FakeUserEncoder.java | 28 +++++++++++++++++++ 2 files changed, 31 insertions(+), 7 deletions(-) create mode 100644 src/test/java/com/example/gimmegonghakauth/mock/FakeUserEncoder.java diff --git a/src/test/java/com/example/gimmegonghakauth/Service/UserServiceTest.java b/src/test/java/com/example/gimmegonghakauth/Service/UserServiceTest.java index 12b712c..de3388a 100644 --- a/src/test/java/com/example/gimmegonghakauth/Service/UserServiceTest.java +++ b/src/test/java/com/example/gimmegonghakauth/Service/UserServiceTest.java @@ -3,12 +3,11 @@ import static org.assertj.core.api.Assertions.assertThat; import com.example.gimmegonghakauth.domain.UserDomain; -import com.example.gimmegonghakauth.dto.ChangePasswordDto; import com.example.gimmegonghakauth.service.UserService; +import com.example.gimmegonghakauth.service.port.UserEncoder; import org.junit.jupiter.api.Test; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.boot.test.context.SpringBootTest; -import org.springframework.security.crypto.password.PasswordEncoder; import org.springframework.test.context.ActiveProfiles; import org.springframework.transaction.annotation.Transactional; @@ -25,9 +24,6 @@ class UserServiceTest { @Autowired private UserService userService; - @Autowired - private PasswordEncoder passwordEncoder; - @Test void create로_유저를_생성할_수_있다() { //givne, when @@ -41,12 +37,12 @@ class UserServiceTest { void updatePassword로_유저의_비밀번호를_변경할_수_있다() { //given UserDomain user = userService.create(String.valueOf(id), password, email, null, name); - String newPassword = passwordEncoder.encode("test123"); + String newPassword = "test123"; //when UserDomain updatedUser = userService.updatePassword(user, newPassword); //then - assertThat(updatedUser.getPassword()).isEqualTo(newPassword); + assertThat(updatedUser.getPassword()).isEqualTo("Fake" + newPassword); } } diff --git a/src/test/java/com/example/gimmegonghakauth/mock/FakeUserEncoder.java b/src/test/java/com/example/gimmegonghakauth/mock/FakeUserEncoder.java new file mode 100644 index 0000000..8468fcb --- /dev/null +++ b/src/test/java/com/example/gimmegonghakauth/mock/FakeUserEncoder.java @@ -0,0 +1,28 @@ +package com.example.gimmegonghakauth.mock; + +import com.example.gimmegonghakauth.service.port.UserEncoder; +import org.springframework.context.annotation.Primary; +import org.springframework.context.annotation.Profile; +import org.springframework.stereotype.Component; + +@Component +@Profile("test") +@Primary +public class FakeUserEncoder implements UserEncoder { + + private final String PREFIX = "Fake"; + + @Override + public String encode(String rawPassword) { + return PREFIX + rawPassword; + } + + @Override + public boolean matches(String rawPassword, String encodedPassword) { + String password = rawPassword + PREFIX; + if (password.equals(encodedPassword)) { + return true; + } + return false; + } +} From 96a509cccb489e99d47947288fcd3a00147291b0 Mon Sep 17 00:00:00 2001 From: Taehyeon Jo <70999462+whxogus215@users.noreply.github.com> Date: Sun, 6 Oct 2024 12:40:43 +0900 Subject: [PATCH 07/12] =?UTF-8?q?refactor:=20UserDao=20=EC=9D=B4=EB=A6=84?= =?UTF-8?q?=20=EB=B3=80=EA=B2=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - UserDao -> UserRepository --- .../{ => user}/controller/EmailVerificationController.java | 2 +- .../{ => user}/controller/UserController.java | 2 +- .../gimmegonghakauth/{ => user}/domain/UserDomain.java | 0 .../gimmegonghakauth/{ => user}/domain/UserRole.java | 0 .../infrastructure/UserRepository.java} | 6 +++--- .../gimmegonghakauth/{ => user}/service/UserService.java | 0 .../{ => user/service}/dto/ChangePasswordDto.java | 0 .../{ => user/service}/dto/UserJoinDto.java | 0 .../{ => user}/service/port/UserEncoder.java | 0 9 files changed, 5 insertions(+), 5 deletions(-) rename src/main/java/com/example/gimmegonghakauth/{ => user}/controller/EmailVerificationController.java (93%) rename src/main/java/com/example/gimmegonghakauth/{ => user}/controller/UserController.java (98%) rename src/main/java/com/example/gimmegonghakauth/{ => user}/domain/UserDomain.java (100%) rename src/main/java/com/example/gimmegonghakauth/{ => user}/domain/UserRole.java (100%) rename src/main/java/com/example/gimmegonghakauth/{dao/UserDao.java => user/infrastructure/UserRepository.java} (61%) rename src/main/java/com/example/gimmegonghakauth/{ => user}/service/UserService.java (100%) rename src/main/java/com/example/gimmegonghakauth/{ => user/service}/dto/ChangePasswordDto.java (100%) rename src/main/java/com/example/gimmegonghakauth/{ => user/service}/dto/UserJoinDto.java (100%) rename src/main/java/com/example/gimmegonghakauth/{ => user}/service/port/UserEncoder.java (100%) diff --git a/src/main/java/com/example/gimmegonghakauth/controller/EmailVerificationController.java b/src/main/java/com/example/gimmegonghakauth/user/controller/EmailVerificationController.java similarity index 93% rename from src/main/java/com/example/gimmegonghakauth/controller/EmailVerificationController.java rename to src/main/java/com/example/gimmegonghakauth/user/controller/EmailVerificationController.java index ab7f530..8847f13 100644 --- a/src/main/java/com/example/gimmegonghakauth/controller/EmailVerificationController.java +++ b/src/main/java/com/example/gimmegonghakauth/user/controller/EmailVerificationController.java @@ -1,6 +1,6 @@ package com.example.gimmegonghakauth.controller; -import com.example.gimmegonghakauth.dto.UserJoinDto; +import com.example.gimmegonghakauth.user.service.dto.UserJoinDto; import com.example.gimmegonghakauth.service.EmailVerificationService; import java.util.Map; import org.springframework.beans.factory.annotation.Autowired; diff --git a/src/main/java/com/example/gimmegonghakauth/controller/UserController.java b/src/main/java/com/example/gimmegonghakauth/user/controller/UserController.java similarity index 98% rename from src/main/java/com/example/gimmegonghakauth/controller/UserController.java rename to src/main/java/com/example/gimmegonghakauth/user/controller/UserController.java index dd142a4..50d95a8 100644 --- a/src/main/java/com/example/gimmegonghakauth/controller/UserController.java +++ b/src/main/java/com/example/gimmegonghakauth/user/controller/UserController.java @@ -4,7 +4,7 @@ import com.example.gimmegonghakauth.domain.UserDomain; import com.example.gimmegonghakauth.dto.ChangePasswordDto; import com.example.gimmegonghakauth.dto.UserJoinDto; -import com.example.gimmegonghakauth.service.UserService; +import com.example.gimmegonghakauth.user.service.UserService; import jakarta.servlet.http.HttpServletRequest; import jakarta.servlet.http.HttpServletResponse; import jakarta.validation.Valid; diff --git a/src/main/java/com/example/gimmegonghakauth/domain/UserDomain.java b/src/main/java/com/example/gimmegonghakauth/user/domain/UserDomain.java similarity index 100% rename from src/main/java/com/example/gimmegonghakauth/domain/UserDomain.java rename to src/main/java/com/example/gimmegonghakauth/user/domain/UserDomain.java diff --git a/src/main/java/com/example/gimmegonghakauth/domain/UserRole.java b/src/main/java/com/example/gimmegonghakauth/user/domain/UserRole.java similarity index 100% rename from src/main/java/com/example/gimmegonghakauth/domain/UserRole.java rename to src/main/java/com/example/gimmegonghakauth/user/domain/UserRole.java diff --git a/src/main/java/com/example/gimmegonghakauth/dao/UserDao.java b/src/main/java/com/example/gimmegonghakauth/user/infrastructure/UserRepository.java similarity index 61% rename from src/main/java/com/example/gimmegonghakauth/dao/UserDao.java rename to src/main/java/com/example/gimmegonghakauth/user/infrastructure/UserRepository.java index 7687bd3..0138370 100644 --- a/src/main/java/com/example/gimmegonghakauth/dao/UserDao.java +++ b/src/main/java/com/example/gimmegonghakauth/user/infrastructure/UserRepository.java @@ -1,12 +1,12 @@ -package com.example.gimmegonghakauth.dao; +package com.example.gimmegonghakauth.user.infrastructure; -import com.example.gimmegonghakauth.domain.UserDomain; +import com.example.gimmegonghakauth.user.domain.UserDomain; import java.util.Optional; import org.springframework.data.jpa.repository.JpaRepository; import org.springframework.stereotype.Repository; @Repository -public interface UserDao extends JpaRepository { +public interface UserRepository extends JpaRepository { Optional findByStudentId(Long studentId); diff --git a/src/main/java/com/example/gimmegonghakauth/service/UserService.java b/src/main/java/com/example/gimmegonghakauth/user/service/UserService.java similarity index 100% rename from src/main/java/com/example/gimmegonghakauth/service/UserService.java rename to src/main/java/com/example/gimmegonghakauth/user/service/UserService.java diff --git a/src/main/java/com/example/gimmegonghakauth/dto/ChangePasswordDto.java b/src/main/java/com/example/gimmegonghakauth/user/service/dto/ChangePasswordDto.java similarity index 100% rename from src/main/java/com/example/gimmegonghakauth/dto/ChangePasswordDto.java rename to src/main/java/com/example/gimmegonghakauth/user/service/dto/ChangePasswordDto.java diff --git a/src/main/java/com/example/gimmegonghakauth/dto/UserJoinDto.java b/src/main/java/com/example/gimmegonghakauth/user/service/dto/UserJoinDto.java similarity index 100% rename from src/main/java/com/example/gimmegonghakauth/dto/UserJoinDto.java rename to src/main/java/com/example/gimmegonghakauth/user/service/dto/UserJoinDto.java diff --git a/src/main/java/com/example/gimmegonghakauth/service/port/UserEncoder.java b/src/main/java/com/example/gimmegonghakauth/user/service/port/UserEncoder.java similarity index 100% rename from src/main/java/com/example/gimmegonghakauth/service/port/UserEncoder.java rename to src/main/java/com/example/gimmegonghakauth/user/service/port/UserEncoder.java From 6ced604fa3494d8e4bd7da61dbca1493a30a7566 Mon Sep 17 00:00:00 2001 From: Taehyeon Jo <70999462+whxogus215@users.noreply.github.com> Date: Sun, 6 Oct 2024 12:43:14 +0900 Subject: [PATCH 08/12] =?UTF-8?q?refactor:=20user=EB=B6=80=EB=B6=84?= =?UTF-8?q?=EB=A7=8C=20=EB=8F=84=EB=A9=94=EC=9D=B8=20=ED=8C=A8=ED=82=A4?= =?UTF-8?q?=EC=A7=80=20=EA=B5=AC=EC=A1=B0=EB=A1=9C=20=EB=B3=80=EA=B2=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../example/gimmegonghakauth/InitData.java | 19 ++++------- .../controller/StatusController.java | 8 ++--- .../dao/CompletedCoursesDao.java | 2 +- .../domain/CompletedCoursesDomain.java | 1 + .../service/CompletedCoursesService.java | 14 ++++---- .../service/GonghakCalculateService.java | 2 +- .../service/UserSecurityService.java | 10 +++--- .../ComputerMajorGonghakRecommendService.java | 2 +- .../ElecInfoMajorGonghakRecommendService.java | 2 +- .../recommend/GonghakRecommendService.java | 2 +- .../RecommendServiceSelectManager.java | 6 ++-- .../EmailVerificationController.java | 4 +-- .../user/controller/UserController.java | 8 ++--- .../user/domain/UserDomain.java | 3 +- .../user/domain/UserRole.java | 2 +- .../user/infrastructure/UserEncoderImpl.java | 2 +- .../service/EmailVerificationService.java | 2 +- .../user/service/UserService.java | 28 ++++++++-------- .../user/service/dto/ChangePasswordDto.java | 2 +- .../user/service/dto/UserJoinDto.java | 2 +- .../user/service/port/UserEncoder.java | 2 +- .../Controller/UserControllerTest.java | 11 +++---- .../CompletedCoursesServiceDataTest.java | 32 ++++++++----------- .../Service/GonghakCalculateServiceTest.java | 2 +- .../Service/GonghakRecommendServiceTest.java | 8 ++--- .../Service/UserSecurityServiceTest.java | 14 ++++---- .../dao/GonghakRepositoryTest.java | 7 ++-- .../mock/FakeUserEncoder.java | 2 +- .../service}/UserServiceTest.java | 7 ++-- 29 files changed, 96 insertions(+), 110 deletions(-) rename src/main/java/com/example/gimmegonghakauth/{ => user}/service/EmailVerificationService.java (99%) rename src/test/java/com/example/gimmegonghakauth/{Service => user/service}/UserServiceTest.java (83%) diff --git a/src/main/java/com/example/gimmegonghakauth/InitData.java b/src/main/java/com/example/gimmegonghakauth/InitData.java index 18bb39f..9f288cf 100644 --- a/src/main/java/com/example/gimmegonghakauth/InitData.java +++ b/src/main/java/com/example/gimmegonghakauth/InitData.java @@ -1,20 +1,13 @@ package com.example.gimmegonghakauth; import com.example.gimmegonghakauth.constant.AbeekTypeConst; -import com.example.gimmegonghakauth.constant.CourseCategoryConst; import com.example.gimmegonghakauth.dao.AbeekDao; -import com.example.gimmegonghakauth.dao.CompletedCoursesDao; -import com.example.gimmegonghakauth.dao.CoursesDao; -import com.example.gimmegonghakauth.dao.GonghakCoursesDao; import com.example.gimmegonghakauth.dao.MajorsDao; -import com.example.gimmegonghakauth.dao.UserDao; +import com.example.gimmegonghakauth.user.infrastructure.UserRepository; import com.example.gimmegonghakauth.domain.AbeekDomain; import com.example.gimmegonghakauth.domain.AbeekDomain.AbeekDomainBuilder; -import com.example.gimmegonghakauth.domain.CompletedCoursesDomain; -import com.example.gimmegonghakauth.domain.CoursesDomain; -import com.example.gimmegonghakauth.domain.GonghakCoursesDomain; import com.example.gimmegonghakauth.domain.MajorsDomain; -import com.example.gimmegonghakauth.domain.UserDomain; +import com.example.gimmegonghakauth.user.domain.UserDomain; import com.example.gimmegonghakauth.service.recommend.MajorName; import lombok.RequiredArgsConstructor; import org.springframework.beans.factory.annotation.Value; @@ -32,7 +25,7 @@ public class InitData { private final MajorsDao majorsDao; private final AbeekDao abeekDao; - private final UserDao userDao; + private final UserRepository userRepository; private final PasswordEncoder passwordEncoder; @Value("${admin1}") @@ -223,7 +216,7 @@ public void initDatabase() { .password(passwordEncoder.encode("qwer")) .studentId(admin1) .majorsDomain(elecInfoMajor).build(); - userDao.save(user1); + userRepository.save(user1); UserDomain user2 = UserDomain.builder() .email("testEmail2@sju.ac.kr") @@ -231,7 +224,7 @@ public void initDatabase() { .password(passwordEncoder.encode("qwer")) .studentId(admin2) .majorsDomain(dataScienceMajor).build(); - userDao.save(user2); + userRepository.save(user2); UserDomain user3 = UserDomain.builder() .email("testEmail3@sju.ac.kr") @@ -239,7 +232,7 @@ public void initDatabase() { .password(passwordEncoder.encode("qwer")) .studentId(admin3) .majorsDomain(computerMajor).build(); - userDao.save(user3); + userRepository.save(user3); } diff --git a/src/main/java/com/example/gimmegonghakauth/controller/StatusController.java b/src/main/java/com/example/gimmegonghakauth/controller/StatusController.java index 23869b2..02e66f3 100644 --- a/src/main/java/com/example/gimmegonghakauth/controller/StatusController.java +++ b/src/main/java/com/example/gimmegonghakauth/controller/StatusController.java @@ -1,8 +1,8 @@ package com.example.gimmegonghakauth.controller; import com.example.gimmegonghakauth.constant.AbeekTypeConst; -import com.example.gimmegonghakauth.dao.UserDao; -import com.example.gimmegonghakauth.domain.UserDomain; +import com.example.gimmegonghakauth.user.infrastructure.UserRepository; +import com.example.gimmegonghakauth.user.domain.UserDomain; import com.example.gimmegonghakauth.dto.GonghakResultDto.ResultPointDto; import com.example.gimmegonghakauth.dto.IncompletedCoursesDto; import com.example.gimmegonghakauth.service.GonghakCalculateService; @@ -27,7 +27,7 @@ public class StatusController { private final GonghakCalculateService gonghakCalculateService; private final RecommendServiceSelectManager recommendServiceSelectManager; - private final UserDao userDao; + private final UserRepository userRepository; // 사용자의 공학인증 현황과 추천 과목을 가져온다. @GetMapping("/status") @@ -36,7 +36,7 @@ public String readGonghakStatusResult(Authentication authentication, Model model Long studentId = Long.parseLong(userDetails.getUsername()); // 컨트롤러가 UserDomain 객체를 가져오는 역할을 수행하고 있음. - UserDomain student = userDao.findByStudentId(studentId).get(); + UserDomain student = userRepository.findByStudentId(studentId).get(); readUserResultRatio(model, student); readUserRecommendCourses(model, studentId, student); diff --git a/src/main/java/com/example/gimmegonghakauth/dao/CompletedCoursesDao.java b/src/main/java/com/example/gimmegonghakauth/dao/CompletedCoursesDao.java index efe4e8c..0a81fca 100644 --- a/src/main/java/com/example/gimmegonghakauth/dao/CompletedCoursesDao.java +++ b/src/main/java/com/example/gimmegonghakauth/dao/CompletedCoursesDao.java @@ -1,7 +1,7 @@ package com.example.gimmegonghakauth.dao; import com.example.gimmegonghakauth.domain.CompletedCoursesDomain; -import com.example.gimmegonghakauth.domain.UserDomain; +import com.example.gimmegonghakauth.user.domain.UserDomain; import java.util.List; import org.springframework.data.jpa.repository.JpaRepository; import org.springframework.stereotype.Repository; diff --git a/src/main/java/com/example/gimmegonghakauth/domain/CompletedCoursesDomain.java b/src/main/java/com/example/gimmegonghakauth/domain/CompletedCoursesDomain.java index 2d21558..0151c0d 100644 --- a/src/main/java/com/example/gimmegonghakauth/domain/CompletedCoursesDomain.java +++ b/src/main/java/com/example/gimmegonghakauth/domain/CompletedCoursesDomain.java @@ -1,5 +1,6 @@ package com.example.gimmegonghakauth.domain; +import com.example.gimmegonghakauth.user.domain.UserDomain; import jakarta.persistence.Column; import jakarta.persistence.Entity; import jakarta.persistence.FetchType; diff --git a/src/main/java/com/example/gimmegonghakauth/service/CompletedCoursesService.java b/src/main/java/com/example/gimmegonghakauth/service/CompletedCoursesService.java index 6ca58f7..f442eab 100644 --- a/src/main/java/com/example/gimmegonghakauth/service/CompletedCoursesService.java +++ b/src/main/java/com/example/gimmegonghakauth/service/CompletedCoursesService.java @@ -2,10 +2,10 @@ import com.example.gimmegonghakauth.dao.CompletedCoursesDao; import com.example.gimmegonghakauth.dao.CoursesDao; -import com.example.gimmegonghakauth.dao.UserDao; +import com.example.gimmegonghakauth.user.infrastructure.UserRepository; import com.example.gimmegonghakauth.domain.CompletedCoursesDomain; import com.example.gimmegonghakauth.domain.CoursesDomain; -import com.example.gimmegonghakauth.domain.UserDomain; +import com.example.gimmegonghakauth.user.domain.UserDomain; import com.example.gimmegonghakauth.exception.FileException; import java.io.IOException; import java.util.ArrayList; @@ -29,13 +29,13 @@ public class CompletedCoursesService { private final CompletedCoursesDao completedCoursesDao; private final CoursesDao coursesDao; // CoursesDao 변수 선언 - private final UserDao userDao; + private final UserRepository userRepository; public CompletedCoursesService(CompletedCoursesDao completedCoursesDao, CoursesDao coursesDao, - UserDao userDao) { + UserRepository userRepository) { this.completedCoursesDao = completedCoursesDao; this.coursesDao = coursesDao; // 생성자를 통한 CoursesDao 초기화 - this.userDao = userDao; + this.userRepository = userRepository; } final int FIRST_ROW = 4; @@ -48,7 +48,7 @@ public void extractExcelFile(MultipartFile file, UserDetails userDetails) //DB에 해당 사용자의 기이수 과목 정보 확인 Long studentId = Long.parseLong(userDetails.getUsername()); - UserDomain user = userDao.findByStudentId(studentId).get(); + UserDomain user = userRepository.findByStudentId(studentId).get(); checkUser(user); ////엑셀 내용 검증 @@ -64,7 +64,7 @@ public void extractExcelFile(MultipartFile file, UserDetails userDetails) @Transactional(readOnly = true) public List getExcelList(UserDetails userDetails) { Long studentId = Long.parseLong(userDetails.getUsername()); - UserDomain userDomain = userDao.findByStudentId(studentId).get(); + UserDomain userDomain = userRepository.findByStudentId(studentId).get(); return completedCoursesDao.findByUserDomain(userDomain); } diff --git a/src/main/java/com/example/gimmegonghakauth/service/GonghakCalculateService.java b/src/main/java/com/example/gimmegonghakauth/service/GonghakCalculateService.java index 3394c07..9067e42 100644 --- a/src/main/java/com/example/gimmegonghakauth/service/GonghakCalculateService.java +++ b/src/main/java/com/example/gimmegonghakauth/service/GonghakCalculateService.java @@ -2,7 +2,7 @@ import com.example.gimmegonghakauth.constant.AbeekTypeConst; import com.example.gimmegonghakauth.dao.GonghakRepository; -import com.example.gimmegonghakauth.domain.UserDomain; +import com.example.gimmegonghakauth.user.domain.UserDomain; import com.example.gimmegonghakauth.dto.GonghakCoursesByMajorDto; import com.example.gimmegonghakauth.dto.GonghakResultDto; import com.example.gimmegonghakauth.dto.GonghakResultDto.ResultPointDto; diff --git a/src/main/java/com/example/gimmegonghakauth/service/UserSecurityService.java b/src/main/java/com/example/gimmegonghakauth/service/UserSecurityService.java index bd3a237..759fcaa 100644 --- a/src/main/java/com/example/gimmegonghakauth/service/UserSecurityService.java +++ b/src/main/java/com/example/gimmegonghakauth/service/UserSecurityService.java @@ -1,8 +1,8 @@ package com.example.gimmegonghakauth.service; -import com.example.gimmegonghakauth.dao.UserDao; -import com.example.gimmegonghakauth.domain.UserDomain; -import com.example.gimmegonghakauth.domain.UserRole; +import com.example.gimmegonghakauth.user.infrastructure.UserRepository; +import com.example.gimmegonghakauth.user.domain.UserDomain; +import com.example.gimmegonghakauth.user.domain.UserRole; import java.util.ArrayList; import java.util.List; import java.util.Optional; @@ -23,7 +23,7 @@ @Service public class UserSecurityService implements UserDetailsService { - private final UserDao userDao; + private final UserRepository userRepository; @Value("${admin1}") private Long admin1; @@ -62,7 +62,7 @@ public UserDomain validateUsername(String username) try { Long studentId = Long.parseLong(username); // parseLong 과정에서 변환할 수 없다면 exception - Optional _siteUser = this.userDao.findByStudentId(studentId); + Optional _siteUser = this.userRepository.findByStudentId(studentId); if (_siteUser.isEmpty()) { throw new UsernameNotFoundException("사용자를 찾을 수 없습니다"); } diff --git a/src/main/java/com/example/gimmegonghakauth/service/recommend/ComputerMajorGonghakRecommendService.java b/src/main/java/com/example/gimmegonghakauth/service/recommend/ComputerMajorGonghakRecommendService.java index 0ab1304..55e6578 100644 --- a/src/main/java/com/example/gimmegonghakauth/service/recommend/ComputerMajorGonghakRecommendService.java +++ b/src/main/java/com/example/gimmegonghakauth/service/recommend/ComputerMajorGonghakRecommendService.java @@ -4,7 +4,7 @@ import com.example.gimmegonghakauth.constant.AbeekTypeConst; import com.example.gimmegonghakauth.constant.CourseCategoryConst; import com.example.gimmegonghakauth.dao.GonghakRepository; -import com.example.gimmegonghakauth.domain.UserDomain; +import com.example.gimmegonghakauth.user.domain.UserDomain; import com.example.gimmegonghakauth.dto.GonghakRecommendCoursesDto; import com.example.gimmegonghakauth.dto.GonghakStandardDto; import com.example.gimmegonghakauth.dto.IncompletedCoursesDto; diff --git a/src/main/java/com/example/gimmegonghakauth/service/recommend/ElecInfoMajorGonghakRecommendService.java b/src/main/java/com/example/gimmegonghakauth/service/recommend/ElecInfoMajorGonghakRecommendService.java index 5b85feb..f403f9a 100644 --- a/src/main/java/com/example/gimmegonghakauth/service/recommend/ElecInfoMajorGonghakRecommendService.java +++ b/src/main/java/com/example/gimmegonghakauth/service/recommend/ElecInfoMajorGonghakRecommendService.java @@ -3,7 +3,7 @@ import com.example.gimmegonghakauth.constant.AbeekTypeConst; import com.example.gimmegonghakauth.constant.CourseCategoryConst; import com.example.gimmegonghakauth.dao.GonghakRepository; -import com.example.gimmegonghakauth.domain.UserDomain; +import com.example.gimmegonghakauth.user.domain.UserDomain; import com.example.gimmegonghakauth.dto.GonghakRecommendCoursesDto; import com.example.gimmegonghakauth.dto.GonghakStandardDto; import com.example.gimmegonghakauth.dto.IncompletedCoursesDto; diff --git a/src/main/java/com/example/gimmegonghakauth/service/recommend/GonghakRecommendService.java b/src/main/java/com/example/gimmegonghakauth/service/recommend/GonghakRecommendService.java index f810edf..6e25260 100644 --- a/src/main/java/com/example/gimmegonghakauth/service/recommend/GonghakRecommendService.java +++ b/src/main/java/com/example/gimmegonghakauth/service/recommend/GonghakRecommendService.java @@ -1,6 +1,6 @@ package com.example.gimmegonghakauth.service.recommend; -import com.example.gimmegonghakauth.domain.UserDomain; +import com.example.gimmegonghakauth.user.domain.UserDomain; import com.example.gimmegonghakauth.dto.GonghakRecommendCoursesDto; public interface GonghakRecommendService { diff --git a/src/main/java/com/example/gimmegonghakauth/service/recommend/RecommendServiceSelectManager.java b/src/main/java/com/example/gimmegonghakauth/service/recommend/RecommendServiceSelectManager.java index 50e09fc..0d1da05 100644 --- a/src/main/java/com/example/gimmegonghakauth/service/recommend/RecommendServiceSelectManager.java +++ b/src/main/java/com/example/gimmegonghakauth/service/recommend/RecommendServiceSelectManager.java @@ -2,7 +2,7 @@ import static com.example.gimmegonghakauth.service.recommend.MajorName.*; -import com.example.gimmegonghakauth.dao.UserDao; +import com.example.gimmegonghakauth.user.infrastructure.UserRepository; import com.example.gimmegonghakauth.domain.MajorsDomain; import lombok.RequiredArgsConstructor; import org.springframework.context.ApplicationContext; @@ -15,11 +15,11 @@ public class RecommendServiceSelectManager { private final ApplicationContext applicationContext; - private final UserDao userDao; + private final UserRepository userRepository; // 학과에 따른 추천 서비스를 설정한다. public GonghakRecommendService selectRecommendService(Long studentId) { - MajorsDomain majorsDomain = userDao.findByStudentId(studentId).get() + MajorsDomain majorsDomain = userRepository.findByStudentId(studentId).get() .getMajorsDomain(); if (majorsDomain.getMajor().contains(ELEC_INFO.getName())) { return applicationContext.getBean("elecInfoMajorGonghakRecommendService", diff --git a/src/main/java/com/example/gimmegonghakauth/user/controller/EmailVerificationController.java b/src/main/java/com/example/gimmegonghakauth/user/controller/EmailVerificationController.java index 8847f13..037ddee 100644 --- a/src/main/java/com/example/gimmegonghakauth/user/controller/EmailVerificationController.java +++ b/src/main/java/com/example/gimmegonghakauth/user/controller/EmailVerificationController.java @@ -1,7 +1,7 @@ -package com.example.gimmegonghakauth.controller; +package com.example.gimmegonghakauth.user.controller; import com.example.gimmegonghakauth.user.service.dto.UserJoinDto; -import com.example.gimmegonghakauth.service.EmailVerificationService; +import com.example.gimmegonghakauth.user.service.EmailVerificationService; import java.util.Map; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.web.bind.annotation.PostMapping; diff --git a/src/main/java/com/example/gimmegonghakauth/user/controller/UserController.java b/src/main/java/com/example/gimmegonghakauth/user/controller/UserController.java index 50d95a8..b106945 100644 --- a/src/main/java/com/example/gimmegonghakauth/user/controller/UserController.java +++ b/src/main/java/com/example/gimmegonghakauth/user/controller/UserController.java @@ -1,9 +1,9 @@ -package com.example.gimmegonghakauth.controller; +package com.example.gimmegonghakauth.user.controller; import com.example.gimmegonghakauth.dao.MajorsDao; -import com.example.gimmegonghakauth.domain.UserDomain; -import com.example.gimmegonghakauth.dto.ChangePasswordDto; -import com.example.gimmegonghakauth.dto.UserJoinDto; +import com.example.gimmegonghakauth.user.domain.UserDomain; +import com.example.gimmegonghakauth.user.service.dto.ChangePasswordDto; +import com.example.gimmegonghakauth.user.service.dto.UserJoinDto; import com.example.gimmegonghakauth.user.service.UserService; import jakarta.servlet.http.HttpServletRequest; import jakarta.servlet.http.HttpServletResponse; diff --git a/src/main/java/com/example/gimmegonghakauth/user/domain/UserDomain.java b/src/main/java/com/example/gimmegonghakauth/user/domain/UserDomain.java index 84517fd..f602f8a 100644 --- a/src/main/java/com/example/gimmegonghakauth/user/domain/UserDomain.java +++ b/src/main/java/com/example/gimmegonghakauth/user/domain/UserDomain.java @@ -1,6 +1,7 @@ -package com.example.gimmegonghakauth.domain; +package com.example.gimmegonghakauth.user.domain; +import com.example.gimmegonghakauth.domain.MajorsDomain; import jakarta.persistence.Column; import jakarta.persistence.Entity; import jakarta.persistence.FetchType; diff --git a/src/main/java/com/example/gimmegonghakauth/user/domain/UserRole.java b/src/main/java/com/example/gimmegonghakauth/user/domain/UserRole.java index 49aa14b..225a62a 100644 --- a/src/main/java/com/example/gimmegonghakauth/user/domain/UserRole.java +++ b/src/main/java/com/example/gimmegonghakauth/user/domain/UserRole.java @@ -1,4 +1,4 @@ -package com.example.gimmegonghakauth.domain; +package com.example.gimmegonghakauth.user.domain; import lombok.Getter; import org.apache.catalina.User; diff --git a/src/main/java/com/example/gimmegonghakauth/user/infrastructure/UserEncoderImpl.java b/src/main/java/com/example/gimmegonghakauth/user/infrastructure/UserEncoderImpl.java index ec88cb9..4d9bb9d 100644 --- a/src/main/java/com/example/gimmegonghakauth/user/infrastructure/UserEncoderImpl.java +++ b/src/main/java/com/example/gimmegonghakauth/user/infrastructure/UserEncoderImpl.java @@ -1,6 +1,6 @@ package com.example.gimmegonghakauth.user.infrastructure; -import com.example.gimmegonghakauth.service.port.UserEncoder; +import com.example.gimmegonghakauth.user.service.port.UserEncoder; import lombok.RequiredArgsConstructor; import org.springframework.security.crypto.password.PasswordEncoder; import org.springframework.stereotype.Component; diff --git a/src/main/java/com/example/gimmegonghakauth/service/EmailVerificationService.java b/src/main/java/com/example/gimmegonghakauth/user/service/EmailVerificationService.java similarity index 99% rename from src/main/java/com/example/gimmegonghakauth/service/EmailVerificationService.java rename to src/main/java/com/example/gimmegonghakauth/user/service/EmailVerificationService.java index c41c564..39f2eb0 100644 --- a/src/main/java/com/example/gimmegonghakauth/service/EmailVerificationService.java +++ b/src/main/java/com/example/gimmegonghakauth/user/service/EmailVerificationService.java @@ -1,4 +1,4 @@ -package com.example.gimmegonghakauth.service; +package com.example.gimmegonghakauth.user.service; import com.example.gimmegonghakauth.constant.UnivCertTypeConst; import com.example.gimmegonghakauth.constant.UnivcertErrorMessageConst; diff --git a/src/main/java/com/example/gimmegonghakauth/user/service/UserService.java b/src/main/java/com/example/gimmegonghakauth/user/service/UserService.java index 3662b68..3af5cd8 100644 --- a/src/main/java/com/example/gimmegonghakauth/user/service/UserService.java +++ b/src/main/java/com/example/gimmegonghakauth/user/service/UserService.java @@ -1,14 +1,14 @@ -package com.example.gimmegonghakauth.service; +package com.example.gimmegonghakauth.user.service; import com.example.gimmegonghakauth.dao.CompletedCoursesDao; -import com.example.gimmegonghakauth.dao.UserDao; +import com.example.gimmegonghakauth.user.infrastructure.UserRepository; import com.example.gimmegonghakauth.domain.CompletedCoursesDomain; import com.example.gimmegonghakauth.domain.MajorsDomain; -import com.example.gimmegonghakauth.domain.UserDomain; -import com.example.gimmegonghakauth.dto.ChangePasswordDto; -import com.example.gimmegonghakauth.dto.UserJoinDto; +import com.example.gimmegonghakauth.user.domain.UserDomain; +import com.example.gimmegonghakauth.user.service.dto.ChangePasswordDto; +import com.example.gimmegonghakauth.user.service.dto.UserJoinDto; import com.example.gimmegonghakauth.exception.UserNotFoundException; -import com.example.gimmegonghakauth.service.port.UserEncoder; +import com.example.gimmegonghakauth.user.service.port.UserEncoder; import java.util.List; import lombok.RequiredArgsConstructor; import org.springframework.security.core.userdetails.UsernameNotFoundException; @@ -21,7 +21,7 @@ @RequiredArgsConstructor public class UserService { - private final UserDao userDao; + private final UserRepository userRepository; private final CompletedCoursesDao completedCoursesDao; private final UserEncoder userEncoder; @@ -32,18 +32,18 @@ public UserDomain create(String _studentId, String password, String email, .studentId(studentId).password(userEncoder.encode(password)) .email(email).majorsDomain(majorsDomain).name(name) .build(); - userDao.save(user); + userRepository.save(user); return user; } public UserDomain updatePassword(UserDomain user, String newPassword) { user.updatePassword(userEncoder.encode(newPassword)); - userDao.save(user); + userRepository.save(user); return user; } public UserDomain getByStudentId(Long studentId) { - return userDao.findByStudentId(studentId) + return userRepository.findByStudentId(studentId) .orElseThrow(() -> new UserNotFoundException(studentId)); } @@ -71,17 +71,17 @@ public boolean checkPassword(UserJoinDto userJoinDto) { } public boolean checkStudentId(String studentId) { - return userDao.existsByStudentId(Long.parseLong(studentId)); + return userRepository.existsByStudentId(Long.parseLong(studentId)); } public boolean checkEmail(String email) { - return userDao.existsByEmail(email); + return userRepository.existsByEmail(email); } public boolean withdrawal(String _studentId, String password) { Long studentId = Long.parseLong(_studentId); - UserDomain user = userDao.findByStudentId(studentId) + UserDomain user = userRepository.findByStudentId(studentId) .orElseThrow(() -> new UsernameNotFoundException("학번이 존재하지 않습니다.")); if (userEncoder.matches(password, user.getPassword())) { @@ -90,7 +90,7 @@ public boolean withdrawal(String _studentId, String password) { // CompletedCourses 테이블에서 해당하는 행들을 삭제 completedCoursesDao.deleteAllInBatch(coursesList); } //해당 유저를 참조하는 CompletedCourses 테이블 먼저 삭제 - userDao.delete(user); + userRepository.delete(user); return true; } else { return false; diff --git a/src/main/java/com/example/gimmegonghakauth/user/service/dto/ChangePasswordDto.java b/src/main/java/com/example/gimmegonghakauth/user/service/dto/ChangePasswordDto.java index 49f3d9a..5b882f8 100644 --- a/src/main/java/com/example/gimmegonghakauth/user/service/dto/ChangePasswordDto.java +++ b/src/main/java/com/example/gimmegonghakauth/user/service/dto/ChangePasswordDto.java @@ -1,4 +1,4 @@ -package com.example.gimmegonghakauth.dto; +package com.example.gimmegonghakauth.user.service.dto; import jakarta.validation.constraints.NotBlank; import lombok.Getter; diff --git a/src/main/java/com/example/gimmegonghakauth/user/service/dto/UserJoinDto.java b/src/main/java/com/example/gimmegonghakauth/user/service/dto/UserJoinDto.java index afed00c..1033a01 100644 --- a/src/main/java/com/example/gimmegonghakauth/user/service/dto/UserJoinDto.java +++ b/src/main/java/com/example/gimmegonghakauth/user/service/dto/UserJoinDto.java @@ -1,4 +1,4 @@ -package com.example.gimmegonghakauth.dto; +package com.example.gimmegonghakauth.user.service.dto; import jakarta.validation.constraints.Email; import jakarta.validation.constraints.NotBlank; diff --git a/src/main/java/com/example/gimmegonghakauth/user/service/port/UserEncoder.java b/src/main/java/com/example/gimmegonghakauth/user/service/port/UserEncoder.java index c27546f..08d59dd 100644 --- a/src/main/java/com/example/gimmegonghakauth/user/service/port/UserEncoder.java +++ b/src/main/java/com/example/gimmegonghakauth/user/service/port/UserEncoder.java @@ -1,4 +1,4 @@ -package com.example.gimmegonghakauth.service.port; +package com.example.gimmegonghakauth.user.service.port; public interface UserEncoder { diff --git a/src/test/java/com/example/gimmegonghakauth/Controller/UserControllerTest.java b/src/test/java/com/example/gimmegonghakauth/Controller/UserControllerTest.java index 8d6156b..33525df 100644 --- a/src/test/java/com/example/gimmegonghakauth/Controller/UserControllerTest.java +++ b/src/test/java/com/example/gimmegonghakauth/Controller/UserControllerTest.java @@ -3,13 +3,11 @@ import static org.springframework.security.test.web.servlet.request.SecurityMockMvcRequestPostProcessors.csrf; import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.post; import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.redirectedUrl; -import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.redirectedUrlPattern; import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.status; import com.example.gimmegonghakauth.dao.MajorsDao; -import com.example.gimmegonghakauth.dao.UserDao; -import com.example.gimmegonghakauth.domain.MajorsDomain; -import com.example.gimmegonghakauth.domain.UserDomain; +import com.example.gimmegonghakauth.user.infrastructure.UserRepository; +import com.example.gimmegonghakauth.user.domain.UserDomain; import jakarta.transaction.Transactional; import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.DisplayName; @@ -21,7 +19,6 @@ import org.springframework.security.crypto.bcrypt.BCryptPasswordEncoder; import org.springframework.security.test.context.support.WithMockUser; import org.springframework.test.context.ActiveProfiles; -import org.springframework.test.context.TestPropertySource; import org.springframework.test.web.servlet.MockMvc; import org.springframework.test.web.servlet.result.MockMvcResultMatchers; @@ -39,7 +36,7 @@ public class UserControllerTest { private MockMvc mockMvc; @Autowired - private UserDao userDao; + private UserRepository userRepository; @Autowired private MajorsDao majorsDao; @@ -53,7 +50,7 @@ public void setUser() { .majorsDomain(majorsDao.findByMajor("컴퓨터공학과")) .name("testUser") .build(); - userDao.save(user); + userRepository.save(user); } @Test diff --git a/src/test/java/com/example/gimmegonghakauth/Service/CompletedCoursesServiceDataTest.java b/src/test/java/com/example/gimmegonghakauth/Service/CompletedCoursesServiceDataTest.java index 61726b4..96c6b65 100644 --- a/src/test/java/com/example/gimmegonghakauth/Service/CompletedCoursesServiceDataTest.java +++ b/src/test/java/com/example/gimmegonghakauth/Service/CompletedCoursesServiceDataTest.java @@ -3,14 +3,11 @@ import com.example.gimmegonghakauth.dao.CompletedCoursesDao; import com.example.gimmegonghakauth.dao.CoursesDao; import com.example.gimmegonghakauth.dao.MajorsDao; -import com.example.gimmegonghakauth.dao.UserDao; +import com.example.gimmegonghakauth.user.infrastructure.UserRepository; import com.example.gimmegonghakauth.domain.CompletedCoursesDomain; import com.example.gimmegonghakauth.domain.CoursesDomain; -import com.example.gimmegonghakauth.domain.MajorsDomain; -import com.example.gimmegonghakauth.domain.UserDomain; +import com.example.gimmegonghakauth.user.domain.UserDomain; import com.example.gimmegonghakauth.service.CompletedCoursesService; -import jakarta.persistence.EntityManager; -import jakarta.persistence.PersistenceContext; import java.util.ArrayList; import java.util.List; import org.junit.jupiter.api.BeforeEach; @@ -18,12 +15,9 @@ import org.junit.jupiter.api.Nested; import org.junit.jupiter.api.Test; import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.boot.test.autoconfigure.jdbc.AutoConfigureTestDatabase; -import org.springframework.boot.test.autoconfigure.orm.jpa.DataJpaTest; import org.springframework.boot.test.context.SpringBootTest; import org.springframework.context.annotation.Import; import org.springframework.test.context.ActiveProfiles; -import org.springframework.test.context.TestPropertySource; import org.springframework.transaction.annotation.Transactional; @@ -43,7 +37,7 @@ public class CompletedCoursesServiceDataTest { private MajorsDao majorsDao; @Autowired - private UserDao userDao; + private UserRepository userRepository; @Autowired private CompletedCoursesDao completedCoursesDao; @@ -76,7 +70,7 @@ public void setUser() { .majorsDomain(majorsDao.findByMajor("컴퓨터공학과")) .name("testUser") .build(); - userDao.save(user); + userRepository.save(user); } @Test @@ -85,7 +79,7 @@ public void testUploadFile() { //기이수 과목 데이터1 CompletedCoursesDomain data1 = CompletedCoursesDomain.builder(). - userDomain(userDao.findByStudentId(19111111L).get()). + userDomain(userRepository.findByStudentId(19111111L).get()). coursesDomain(coursesDao.findByCourseId(12345L)). year(23).semester("1학기"). build(); @@ -93,7 +87,7 @@ public void testUploadFile() { //기이수 과목 데이터2 CompletedCoursesDomain data2 = CompletedCoursesDomain.builder(). - userDomain(userDao.findByStudentId(19111111L).get()). + userDomain(userRepository.findByStudentId(19111111L).get()). coursesDomain(coursesDao.findByCourseId(54321L)). year(23).semester("1학기"). build(); @@ -107,14 +101,14 @@ public void testUploadFile() { dataList.add(data1); dataList.add(data2); - UserDomain user = userDao.findByStudentId(19111111L).get(); + UserDomain user = userRepository.findByStudentId(19111111L).get(); assertEquals(dataList, completedCoursesDao.findByUserDomain(user)); } @Test @DisplayName("재업로드 테스트1(첫 업로드)") public void testUserUploadStatus1() { - UserDomain user = userDao.findByStudentId(19111111L).get(); + UserDomain user = userRepository.findByStudentId(19111111L).get(); //데이터 확인 completedCoursesService.checkUser(user); @@ -132,7 +126,7 @@ public void testUserUploadStatus2() { //기이수 과목 데이터 1 CompletedCoursesDomain data1 = CompletedCoursesDomain.builder(). - userDomain(userDao.findByStudentId(19111111L).get()). + userDomain(userRepository.findByStudentId(19111111L).get()). coursesDomain(coursesDao.findByCourseId(12345L)). year(23).semester("1학기"). build(); @@ -142,7 +136,7 @@ public void testUserUploadStatus2() { List dataList = new ArrayList<>(); dataList.add(data1); - UserDomain user = userDao.findByStudentId(19111111L).get(); + UserDomain user = userRepository.findByStudentId(19111111L).get(); //데이터 삭제 completedCoursesService.checkUser(user); @@ -160,14 +154,14 @@ public void testUserUploadStatus3() { //기이수 과목 데이터 1 CompletedCoursesDomain data1 = CompletedCoursesDomain.builder(). - userDomain(userDao.findByStudentId(19111111L).get()). + userDomain(userRepository.findByStudentId(19111111L).get()). coursesDomain(coursesDao.findByCourseId(12345L)). year(23).semester("1학기"). build(); //기이수 과목 데이터 2 CompletedCoursesDomain data2 = CompletedCoursesDomain.builder(). - userDomain(userDao.findByStudentId(19111111L).get()). + userDomain(userRepository.findByStudentId(19111111L).get()). coursesDomain(coursesDao.findByCourseId(12345L)). year(23).semester("1학기"). build(); @@ -179,7 +173,7 @@ public void testUserUploadStatus3() { dataList.add(data1); dataList.add(data2); - UserDomain user = userDao.findByStudentId(19111111L).get(); + UserDomain user = userRepository.findByStudentId(19111111L).get(); //데이터 삭제 completedCoursesService.checkUser(user); diff --git a/src/test/java/com/example/gimmegonghakauth/Service/GonghakCalculateServiceTest.java b/src/test/java/com/example/gimmegonghakauth/Service/GonghakCalculateServiceTest.java index 467992d..0868c43 100644 --- a/src/test/java/com/example/gimmegonghakauth/Service/GonghakCalculateServiceTest.java +++ b/src/test/java/com/example/gimmegonghakauth/Service/GonghakCalculateServiceTest.java @@ -9,7 +9,7 @@ import com.example.gimmegonghakauth.dao.GonghakDao; import com.example.gimmegonghakauth.dao.GonghakRepository; import com.example.gimmegonghakauth.domain.MajorsDomain; -import com.example.gimmegonghakauth.domain.UserDomain; +import com.example.gimmegonghakauth.user.domain.UserDomain; import com.example.gimmegonghakauth.dto.GonghakResultDto.ResultPointDto; import com.example.gimmegonghakauth.service.GonghakCalculateService; import java.util.Map; diff --git a/src/test/java/com/example/gimmegonghakauth/Service/GonghakRecommendServiceTest.java b/src/test/java/com/example/gimmegonghakauth/Service/GonghakRecommendServiceTest.java index 9da87bb..96f6549 100644 --- a/src/test/java/com/example/gimmegonghakauth/Service/GonghakRecommendServiceTest.java +++ b/src/test/java/com/example/gimmegonghakauth/Service/GonghakRecommendServiceTest.java @@ -3,8 +3,8 @@ import static org.assertj.core.api.Assertions.assertThat; import com.example.gimmegonghakauth.constant.AbeekTypeConst; -import com.example.gimmegonghakauth.dao.UserDao; -import com.example.gimmegonghakauth.domain.UserDomain; +import com.example.gimmegonghakauth.user.infrastructure.UserRepository; +import com.example.gimmegonghakauth.user.domain.UserDomain; import com.example.gimmegonghakauth.dto.IncompletedCoursesDto; import com.example.gimmegonghakauth.dto.LoginDto; import com.example.gimmegonghakauth.service.recommend.ComputerMajorGonghakRecommendService; @@ -27,7 +27,7 @@ class GonghakRecommendServiceTest { @Autowired - private UserDao userDao; + private UserRepository userRepository; @Autowired private RecommendServiceSelectManager recommendServiceSelectManager; @@ -46,7 +46,7 @@ void recommendServiceSelectManagerTest(){ @Test void createRecommendCoursesTest(){ - UserDomain testUser = userDao.findByStudentId(COM_TEST_STUDENT_ID).get(); + UserDomain testUser = userRepository.findByStudentId(COM_TEST_STUDENT_ID).get(); GonghakRecommendService comGonghakRecommendService = recommendServiceSelectManager.selectRecommendService( new LoginDto(COM_TEST_STUDENT_ID).getStudentId()); diff --git a/src/test/java/com/example/gimmegonghakauth/Service/UserSecurityServiceTest.java b/src/test/java/com/example/gimmegonghakauth/Service/UserSecurityServiceTest.java index e91e364..0f52f70 100644 --- a/src/test/java/com/example/gimmegonghakauth/Service/UserSecurityServiceTest.java +++ b/src/test/java/com/example/gimmegonghakauth/Service/UserSecurityServiceTest.java @@ -5,10 +5,10 @@ import static org.junit.jupiter.api.Assertions.assertTrue; import static org.mockito.Mockito.when; -import com.example.gimmegonghakauth.dao.UserDao; +import com.example.gimmegonghakauth.user.infrastructure.UserRepository; import com.example.gimmegonghakauth.domain.MajorsDomain; -import com.example.gimmegonghakauth.domain.UserDomain; -import com.example.gimmegonghakauth.domain.UserRole; +import com.example.gimmegonghakauth.user.domain.UserDomain; +import com.example.gimmegonghakauth.user.domain.UserRole; import com.example.gimmegonghakauth.service.UserSecurityService; import java.util.Optional; import org.junit.jupiter.api.BeforeEach; @@ -33,7 +33,7 @@ public class UserSecurityServiceTest { @Mock - private UserDao userDao; + private UserRepository userRepository; @InjectMocks private UserSecurityService userSecurityService; @@ -59,7 +59,7 @@ public void testLoadUserByUsernameSuccess1() { .majorsDomain(major).name("test") .build(); - Mockito.when(userDao.findByStudentId(studentId)).thenReturn(Optional.of(mockUser)); + Mockito.when(userRepository.findByStudentId(studentId)).thenReturn(Optional.of(mockUser)); try { // loadUserByUsername 메서드 호출 @@ -84,7 +84,7 @@ public void testLoadUserByUsernameSuccess2() { .studentId(studentId).password("1234").email("1234@naver.com") .majorsDomain(major).name("test") .build(); - when(userDao.findByStudentId(studentId)).thenReturn(Optional.of(mockUser)); + when(userRepository.findByStudentId(studentId)).thenReturn(Optional.of(mockUser)); //Mock User 생성 // When @@ -103,7 +103,7 @@ public void testLoadUserByUsernameSuccess2() { public void testLoadUserByUsernameFailure() { // Given Long studentId = 123456L; - when(userDao.findByStudentId(studentId)).thenReturn(Optional.empty()); + when(userRepository.findByStudentId(studentId)).thenReturn(Optional.empty()); // When, Then assertThrows(UsernameNotFoundException.class, () -> diff --git a/src/test/java/com/example/gimmegonghakauth/dao/GonghakRepositoryTest.java b/src/test/java/com/example/gimmegonghakauth/dao/GonghakRepositoryTest.java index d35de66..41cba0e 100644 --- a/src/test/java/com/example/gimmegonghakauth/dao/GonghakRepositoryTest.java +++ b/src/test/java/com/example/gimmegonghakauth/dao/GonghakRepositoryTest.java @@ -6,11 +6,12 @@ import com.example.gimmegonghakauth.constant.CourseCategoryConst; import com.example.gimmegonghakauth.domain.CompletedCoursesDomain; import com.example.gimmegonghakauth.domain.MajorsDomain; -import com.example.gimmegonghakauth.domain.UserDomain; +import com.example.gimmegonghakauth.user.domain.UserDomain; import com.example.gimmegonghakauth.dto.GonghakCoursesByMajorDto; import com.example.gimmegonghakauth.dto.GonghakStandardDto; import com.example.gimmegonghakauth.dto.IncompletedCoursesDto; import com.example.gimmegonghakauth.service.recommend.MajorName; +import com.example.gimmegonghakauth.user.infrastructure.UserRepository; import java.util.ArrayList; import java.util.Arrays; import java.util.List; @@ -41,7 +42,7 @@ class GonghakRepositoryTest { @Autowired private CompletedCoursesDao completedCoursesDao; @Autowired - private UserDao userDao; + private UserRepository userRepository; @Autowired private CoursesDao coursesDao; @@ -69,7 +70,7 @@ void setUserAndCompletedCourse() { .majorsDomain(majorsDao.findByMajor("컴퓨터공학과")) .name("testUser") .build(); - userDao.save(user); + userRepository.save(user); CompletedCoursesDomain course1 = CompletedCoursesDomain.builder() .coursesDomain(coursesDao.findByName("Capstone디자인(산학협력프로젝트)")) diff --git a/src/test/java/com/example/gimmegonghakauth/mock/FakeUserEncoder.java b/src/test/java/com/example/gimmegonghakauth/mock/FakeUserEncoder.java index 8468fcb..d23fb79 100644 --- a/src/test/java/com/example/gimmegonghakauth/mock/FakeUserEncoder.java +++ b/src/test/java/com/example/gimmegonghakauth/mock/FakeUserEncoder.java @@ -1,6 +1,6 @@ package com.example.gimmegonghakauth.mock; -import com.example.gimmegonghakauth.service.port.UserEncoder; +import com.example.gimmegonghakauth.user.service.port.UserEncoder; import org.springframework.context.annotation.Primary; import org.springframework.context.annotation.Profile; import org.springframework.stereotype.Component; diff --git a/src/test/java/com/example/gimmegonghakauth/Service/UserServiceTest.java b/src/test/java/com/example/gimmegonghakauth/user/service/UserServiceTest.java similarity index 83% rename from src/test/java/com/example/gimmegonghakauth/Service/UserServiceTest.java rename to src/test/java/com/example/gimmegonghakauth/user/service/UserServiceTest.java index de3388a..e09bc56 100644 --- a/src/test/java/com/example/gimmegonghakauth/Service/UserServiceTest.java +++ b/src/test/java/com/example/gimmegonghakauth/user/service/UserServiceTest.java @@ -1,10 +1,9 @@ -package com.example.gimmegonghakauth.Service; +package com.example.gimmegonghakauth.user.service; import static org.assertj.core.api.Assertions.assertThat; -import com.example.gimmegonghakauth.domain.UserDomain; -import com.example.gimmegonghakauth.service.UserService; -import com.example.gimmegonghakauth.service.port.UserEncoder; +import com.example.gimmegonghakauth.user.domain.UserDomain; +import com.example.gimmegonghakauth.user.service.UserService; import org.junit.jupiter.api.Test; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.boot.test.context.SpringBootTest; From fd2cce2160e15466ce51508d49a2b459580334ac Mon Sep 17 00:00:00 2001 From: Taehyeon Jo <70999462+whxogus215@users.noreply.github.com> Date: Sun, 6 Oct 2024 13:20:27 +0900 Subject: [PATCH 09/12] =?UTF-8?q?fix:=20FakeUserEncoder=20=EB=8F=84?= =?UTF-8?q?=EC=9E=85=20=ED=9B=84,=20UserControllerTest=20=ED=86=B5?= =?UTF-8?q?=EA=B3=BC=ED=95=98=EB=8F=84=EB=A1=9D=20=EC=88=98=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - FakeUserEncoder에서 재정의한 matches 메서드 오류 수정 --- .../gimmegonghakauth/Controller/UserControllerTest.java | 3 ++- .../com/example/gimmegonghakauth/mock/FakeUserEncoder.java | 2 +- 2 files changed, 3 insertions(+), 2 deletions(-) diff --git a/src/test/java/com/example/gimmegonghakauth/Controller/UserControllerTest.java b/src/test/java/com/example/gimmegonghakauth/Controller/UserControllerTest.java index 33525df..1c4cd14 100644 --- a/src/test/java/com/example/gimmegonghakauth/Controller/UserControllerTest.java +++ b/src/test/java/com/example/gimmegonghakauth/Controller/UserControllerTest.java @@ -6,6 +6,7 @@ import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.status; import com.example.gimmegonghakauth.dao.MajorsDao; +import com.example.gimmegonghakauth.mock.FakeUserEncoder; import com.example.gimmegonghakauth.user.infrastructure.UserRepository; import com.example.gimmegonghakauth.user.domain.UserDomain; import jakarta.transaction.Transactional; @@ -43,7 +44,7 @@ public class UserControllerTest { @BeforeEach public void setUser() { - String encodedPassword = new BCryptPasswordEncoder().encode("qwer"); + String encodedPassword = new FakeUserEncoder().encode("qwer"); UserDomain user = UserDomain.builder().studentId(19111111L) .password(encodedPassword).email("test@sju.com") diff --git a/src/test/java/com/example/gimmegonghakauth/mock/FakeUserEncoder.java b/src/test/java/com/example/gimmegonghakauth/mock/FakeUserEncoder.java index d23fb79..2ee8da7 100644 --- a/src/test/java/com/example/gimmegonghakauth/mock/FakeUserEncoder.java +++ b/src/test/java/com/example/gimmegonghakauth/mock/FakeUserEncoder.java @@ -19,7 +19,7 @@ public String encode(String rawPassword) { @Override public boolean matches(String rawPassword, String encodedPassword) { - String password = rawPassword + PREFIX; + String password = PREFIX + rawPassword; if (password.equals(encodedPassword)) { return true; } From c2238170bdbbb69574de97f86ede259bbcdc671a Mon Sep 17 00:00:00 2001 From: Taehyeon Jo <70999462+whxogus215@users.noreply.github.com> Date: Sun, 6 Oct 2024 15:27:28 +0900 Subject: [PATCH 10/12] =?UTF-8?q?test:=20UserService=20=ED=85=8C=EC=8A=A4?= =?UTF-8?q?=ED=8A=B8=20=EC=BD=94=EB=93=9C=20=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - getByStudentId 테스트 --- .../user/service/UserServiceTest.java | 30 ++++++++++++++++++- 1 file changed, 29 insertions(+), 1 deletion(-) diff --git a/src/test/java/com/example/gimmegonghakauth/user/service/UserServiceTest.java b/src/test/java/com/example/gimmegonghakauth/user/service/UserServiceTest.java index e09bc56..7cbf7da 100644 --- a/src/test/java/com/example/gimmegonghakauth/user/service/UserServiceTest.java +++ b/src/test/java/com/example/gimmegonghakauth/user/service/UserServiceTest.java @@ -1,9 +1,10 @@ package com.example.gimmegonghakauth.user.service; import static org.assertj.core.api.Assertions.assertThat; +import static org.assertj.core.api.Assertions.assertThatThrownBy; +import com.example.gimmegonghakauth.exception.UserNotFoundException; import com.example.gimmegonghakauth.user.domain.UserDomain; -import com.example.gimmegonghakauth.user.service.UserService; import org.junit.jupiter.api.Test; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.boot.test.context.SpringBootTest; @@ -44,4 +45,31 @@ class UserServiceTest { //then assertThat(updatedUser.getPassword()).isEqualTo("Fake" + newPassword); } + + @Test + void 사용자의_학번으로_User를_가져올_수_있다() { + //given + UserDomain user = userService.create(String.valueOf(id), password, email, null, name); + + //when + UserDomain findUser = userService.getByStudentId(id); + + //then + assertThat(findUser.getStudentId()).isEqualTo(user.getStudentId()); + assertThat(findUser.getEmail()).isEqualTo(user.getEmail()); + assertThat(findUser.getName()).isEqualTo(user.getName()); + } + + @Test + void 사용자의_학번으로_User를_찾지_못하면_예외가_발생한다() { + //given + UserDomain user = userService.create(String.valueOf(id), password, email, null, name); + Long wrongId = 10000000L; + + //when & then + assertThatThrownBy(() -> userService.getByStudentId(wrongId)) + .isInstanceOf(UserNotFoundException.class); + } + + } From a4bac538d96c97d0261610c5182bdfe471fa5a9e Mon Sep 17 00:00:00 2001 From: Taehyeon Jo <70999462+whxogus215@users.noreply.github.com> Date: Sun, 6 Oct 2024 15:38:39 +0900 Subject: [PATCH 11/12] =?UTF-8?q?style:=20=EB=A7=A8=20=EB=B0=91=20?= =?UTF-8?q?=EA=B3=B5=EB=B0=B1=20=EC=A0=9C=EA=B1=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../example/gimmegonghakauth/user/service/UserServiceTest.java | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/src/test/java/com/example/gimmegonghakauth/user/service/UserServiceTest.java b/src/test/java/com/example/gimmegonghakauth/user/service/UserServiceTest.java index 7cbf7da..7058964 100644 --- a/src/test/java/com/example/gimmegonghakauth/user/service/UserServiceTest.java +++ b/src/test/java/com/example/gimmegonghakauth/user/service/UserServiceTest.java @@ -5,6 +5,7 @@ import com.example.gimmegonghakauth.exception.UserNotFoundException; import com.example.gimmegonghakauth.user.domain.UserDomain; +import org.junit.jupiter.api.Nested; import org.junit.jupiter.api.Test; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.boot.test.context.SpringBootTest; @@ -70,6 +71,4 @@ class UserServiceTest { assertThatThrownBy(() -> userService.getByStudentId(wrongId)) .isInstanceOf(UserNotFoundException.class); } - - } From d980ccf9c32e8e1602f18a3e19d6570feaac9710 Mon Sep 17 00:00:00 2001 From: Taehyeon Jo <70999462+whxogus215@users.noreply.github.com> Date: Sat, 7 Sep 2024 11:21:44 +0900 Subject: [PATCH 12/12] =?UTF-8?q?refactor:=20UserService=20=EB=82=B4?= =?UTF-8?q?=EB=B6=80=EC=97=90=EC=84=9C=20=EC=82=AC=EC=9A=A9=EB=90=98?= =?UTF-8?q?=EB=8A=94=20=EB=A9=94=EC=84=9C=EB=93=9C=20=EC=A0=91=EA=B7=BC=20?= =?UTF-8?q?=EC=A0=9C=EC=96=B4=EC=9E=90=20=EB=B3=80=EA=B2=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - checkPassword, checkStudentId, checkEmail을 private으로 변경 --- .../example/gimmegonghakauth/user/service/UserService.java | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/main/java/com/example/gimmegonghakauth/user/service/UserService.java b/src/main/java/com/example/gimmegonghakauth/user/service/UserService.java index 3af5cd8..6dc1a77 100644 --- a/src/main/java/com/example/gimmegonghakauth/user/service/UserService.java +++ b/src/main/java/com/example/gimmegonghakauth/user/service/UserService.java @@ -63,18 +63,18 @@ public boolean joinValidation(UserJoinDto userJoinDto, BindingResult bindingResu return true; } - public boolean checkPassword(UserJoinDto userJoinDto) { + private boolean checkPassword(UserJoinDto userJoinDto) { if (!userJoinDto.getPassword1().equals(userJoinDto.getPassword2())) { return true; } return false; } - public boolean checkStudentId(String studentId) { + private boolean checkStudentId(String studentId) { return userRepository.existsByStudentId(Long.parseLong(studentId)); } - public boolean checkEmail(String email) { + private boolean checkEmail(String email) { return userRepository.existsByEmail(email); }