From 5ce866e392bb4a29483eb044cb1206ad271f6f87 Mon Sep 17 00:00:00 2001 From: davidpiao Date: Tue, 8 Nov 2022 00:43:42 +0900 Subject: [PATCH 1/5] =?UTF-8?q?[feat#79]=20=ED=85=8C=EC=8A=A4=ED=8A=B8=20?= =?UTF-8?q?=EC=BB=A8=ED=8A=B8=EB=A1=A4=EB=9F=AC=20=EA=B5=AC=ED=98=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../server/hispath/common/TestController.java | 845 ++++++++++++++---- 1 file changed, 685 insertions(+), 160 deletions(-) diff --git a/src/main/java/com/server/hispath/common/TestController.java b/src/main/java/com/server/hispath/common/TestController.java index 7692427..92a29a7 100644 --- a/src/main/java/com/server/hispath/common/TestController.java +++ b/src/main/java/com/server/hispath/common/TestController.java @@ -67,10 +67,10 @@ public ResponseEntity initAll() { saveDepartment(); saveStudent(); saveManager(); - // saveNotice(); -// saveActivities(); -// saveParticipant(); -// saveScholarship(); + saveNotice(); + saveActivities(); + saveScholarship(); +// saveParticipant(); init all에 포함 금지! 따로 실행 // saveResumes(); return ResponseEntity.ok(null); } @@ -342,97 +342,172 @@ private void saveManager() { private void saveNotice() { List l = new ArrayList(); for (Long i = Long.valueOf(1); i < 8; i++) { - Manager temp = managerRepository.findById(i).orElseThrow(ManagerNotFoundException::new); - l.add(temp); + if(i != 5 && i != 6){ + Manager temp = managerRepository.findById(i).orElseThrow(ManagerNotFoundException::new); + l.add(temp); + } } noticeRepository.save(Notice.builder() - .manager(l.get(1)) - .title("Welcome to notice") - .content("This is the first notice") - .viewCnt(100) - .importance(true) - .pubDate(LocalDate.of(2022, Month.SEPTEMBER, 5)) - .expDate(LocalDate.of(2022, Month.SEPTEMBER, 12)) - .build()); + .manager(l.get(1)) + .title("원클릭 컴공 전공 상담신청 서비스 안내") + .content("

상담 받기 좋은 계절입니다.

 

질문거리, 고민거리는 있지만 어느 교수님께 물어야 할 지 모르겠다면...

교수님께 상담 요청 이메일, 어떻게 써야 할지 몰라 망설여지신다면...

편하게 이것저것 여쭤보고 싶은데 안면 있는 교수님이 없어 막막하시다면...

 

원클릭 컴공 전공상담신청을 이용해보시기 바랍니다!

 

 https://forms.gle/n8mvzfJ51Ahzaujz8

 

접수한 내용을 바탕으로 가능한 빨리 적절한 교수님을 찾아 매칭해드립니다. 

 

학생 이메일 도메인 변경에 따라 Google Form 주소도 업데이트 했으니

참고하시기 바랍니다.

 

- 홍신

") + .viewCnt(0) + .importance(true) + .pubDate(LocalDate.of(2022, Month.APRIL, 19)) + .expDate(LocalDate.of(2022, Month.APRIL, 26)) + .build()); noticeRepository.save(Notice.builder() - .manager(l.get(2)) - .title("Second notice") - .content("This is the second notice") - .viewCnt(90) - .importance(false) - .pubDate(LocalDate.of(2022, Month.SEPTEMBER, 6)) - .expDate(LocalDate.of(2022, Month.SEPTEMBER, 18)) - .build()); + .manager(l.get(2)) + .title("2022 BizFlow M Pre-Contest (신청기간연장 ~6.7(화))") + .content("


                                                                                         

 

 ■  접수기간 : 2022년 5월 25일 (수) ~ 6월 7일 (화)

 

 ■  접수링크 : https://docs.google.com/forms/d/1BR9IKalGSdDPKR4Hi6dvW8dpL57dKhvfz0oliJatRno/edit

         

 ■  참가자격

      한동대학교 재학생으로서 다음 사항 중 1개라도 해당되는 팀 (휴학생 팀원 참여 가능)

      1) 팀원 중 BizFlow Camp 수료자가 있는 경우

      2) 팀원 중 이전 BizFlow AppDev Contest 수상자(참가상 포함)가 있는 경우

      3) 팀원 중 BizFlow AppDev 사용 경험자가 있는 경우

      4) 팀원 모두 BizFlow AppDev 사용 경험은 없지만, 웹사이트 제작 경험이 있는 경우 

 

 ■ 컨테스트 내용   

     。사전 제시된 미션을 BizFlow M을 사용하여 구현한 후, 기한 내에 제출함 

     。미션 링크 : https://www.notion.so/HGU-X-AppDev-2022-Precontest-473e3aed71554cf2899238fd49ca3d6b

     。컨테스트 미션에 대한 설명 영상https://youtu.be/od_lQFIrj7g

     。이번 컨테스트 진행 중 질문답변을 위해 다음 링크를 사용하기 바랍니다.    

       클라썸 입장 링크: www.classum.com/EXSTQA 

 

 ■ 팀 구성 : 1~3인으로 팀 구성 (개인 참가 가능)



 ■ 수상팀에게는 여름방학 중에 진행되는 본 컨테스트 출전 자격이 주어집니다.

    1) 최우수상 : 1팀 60만원

     2) 우수상 : 5팀 내외 40만원

     3) 장려상 : 10팀 내외 20만원

     4) 참가상 : 기념품 지급

 

                    * 지적재산권 동의서 양식 첨부파일 확인 


") + .viewCnt(0) + .importance(true) + .pubDate(LocalDate.of(2022, Month.MAY, 24)) + .expDate(LocalDate.of(2022, Month.MAY, 30)) + .build()); noticeRepository.save(Notice.builder() - .manager(l.get(3)) - .title("SW festival") - .content("This is the third notice") - .viewCnt(50) - .importance(false) - .pubDate(LocalDate.of(2022, Month.SEPTEMBER, 9)) - .expDate(LocalDate.of(2022, Month.SEPTEMBER, 20)) - .build()); + .manager(l.get(3)) + .title("2022-2 사전 학점인정 안내(타대학 교환·학점교류)") + .content("

22-2학기 타대학 교환·학점교류를 통해 전산전자공학부의 컴퓨터공학(심화), 전자공학(심화) 전공 학점으로 인정받고자 하는 학생은, 아래의 내용을 확인하시고 사전학점인정원 제출하시기 바랍니다.



1. 신청기간: ~2022.8.14.

     * 각 대학마다 수강신청기간이 다르므로, 본인 대학 수강신청기간 전에 신청 바람



2. 제출서류: 사전학점인정원, 해당 과목 강의계획서



3. 제출방법: csee@handong.edu로 온라인 제출



4. 사전학점인정 절차

  가. 학생이 학부사무실로 사전학점인정원 제출

  나. 해당 전공의 프로그램위원회에서 제출된 자료 검토하여 학점인정 여부 판단

  다. 검토완료 된 사전학점인정원을 학부사무실에서 학생 메일로 송부



5. 유의사항

  가. 각 대학마다 수강신청기간이 다르므로, 사전학점인정 승인 받은 후 수강신청 할 수 있도록 시간 여유를 두고 미리 신청 바람

  나. 본인서명 필수 /  담당교수 확인란은 비워 제출

  다. '해당전공'란은 컴퓨터공학 or 전자공학을 기입

  라. 이전 학기에 학점교류를 통해 전공 인정받은 학생의 경우 아래 내용 함께 제출

    1) 이전 교류대학명: 

    2) 인정 과목명:

    3) 총 인정학점:

  마. 사전학점인정원 승인을 받았더라도, 다른 수강 교과목과 내용이 중복되는 경우 추후 학점인정을 받지 못할 수 있음





문의 : 260-1414 / csee@handong.edu

") + .viewCnt(0) + .importance(false) + .pubDate(LocalDate.of(2022, Month.JUNE, 2)) + .expDate(LocalDate.of(2022, Month.JUNE, 15)) + .build()); noticeRepository.save(Notice.builder() - .manager(l.get(4)) - .title("Capstone festival") - .content("Capstone festival in November") - .viewCnt(80) - .importance(true) - .pubDate(LocalDate.of(2022, Month.SEPTEMBER, 5)) - .expDate(LocalDate.of(2022, Month.SEPTEMBER, 30)) - .build()); + .manager(l.get(4)) + .title("2022년 8월 졸업생 학위증 및 상장 교부 안내") + .content("

9/2(금) 15시까지 신청 건 우편 발송되었습니다. 

 

---------------------------------------------------------------------------

 

안녕하세요?

전산전자공학부입니다.



졸업을 진심으로 축하드립니다.\uD83C\uDF89



학위증은 8/17(수)부터 학부사무실(NTH309)에서 직접 수령 가능합니다.



우편(착불 4500원 정도)으로 받고자 하는 학생은 

9/4(일)까지 구글폼( https://forms.gle/YC33x2dgMp2o6FFP7 ) 작성해주시기 바랍니다.



이전 졸업생 중 학위증을 수령하지 않은 학생도 신청하시기 바랍니다.



<유의사항>

1. 학위증은 23년 2월 학위수여식까지 보관하며, 그 후 분실에 대해 책임지지 않습니다.

2. 학위증 재발급은 불가하니, 꼭 수령하시기 바랍니다.



감사합니다:D



문의) 전산전자공학부사무실 260-1414

") + .viewCnt(0) + .importance(true) + .pubDate(LocalDate.of(2022, Month.JUNE, 7)) + .expDate(LocalDate.of(2022, Month.JUNE, 29)) + .build()); noticeRepository.save(Notice.builder() - .manager(l.get(5)) - .title("GongPgi festival") - .content("GongPgi festival in October") - .viewCnt(100) - .importance(true) - .pubDate(LocalDate.of(2022, Month.SEPTEMBER, 20)) - .expDate(LocalDate.of(2022, Month.SEPTEMBER, 27)) - .build()); + .manager(l.get(4)) + .title("2022년 8월 졸업생 학위증 및 상장 교부 안내") + .content("

9/2(금) 15시까지 신청 건 우편 발송되었습니다. 

 

---------------------------------------------------------------------------

 

안녕하세요?

전산전자공학부입니다.



졸업을 진심으로 축하드립니다.\uD83C\uDF89



학위증은 8/17(수)부터 학부사무실(NTH309)에서 직접 수령 가능합니다.



우편(착불 4500원 정도)으로 받고자 하는 학생은 

9/4(일)까지 구글폼( https://forms.gle/YC33x2dgMp2o6FFP7 ) 작성해주시기 바랍니다.



이전 졸업생 중 학위증을 수령하지 않은 학생도 신청하시기 바랍니다.



<유의사항>

1. 학위증은 23년 2월 학위수여식까지 보관하며, 그 후 분실에 대해 책임지지 않습니다.

2. 학위증 재발급은 불가하니, 꼭 수령하시기 바랍니다.



감사합니다:D



문의) 전산전자공학부사무실 260-1414

") + .viewCnt(0) + .importance(true) + .pubDate(LocalDate.of(2022, Month.JUNE, 21)) + .expDate(LocalDate.of(2022, Month.JUNE, 27)) + .build()); noticeRepository.save(Notice.builder() - .manager(l.get(2)) - .title("CSEE lecture") - .content("At october 17 in NTH 313") - .viewCnt(56) - .importance(false) - .pubDate(LocalDate.of(2022, Month.SEPTEMBER, 18)) - .expDate(LocalDate.of(2022, Month.SEPTEMBER, 25)) - .build()); + .manager(l.get(3)) + .title("[BK21 인공지능 교육연구단] 2022-2 참여대학원생 등록서류 제출 및 연구장학금 신청 안내") + .content("

한동대학교 BK21 인공지능 사업단

2022학년도 2학기 참여대학원생 등록서류 제출 및 연구장학금 신청 안내

 

 

한동대학교 전산전자공학과 4단계 BK21 ‘산업혁신을 위한 AI 고급 인재교육연구단’ (BK21 인공지능사업단)에서 다음과 같이 등록 서류를 제출하여주시기 바랍니다.

 


1. 4단계 BK21 참여대학원생 기준 (다음의 조건을 모두 충족한 자)

BK21 참여교수의 지도학생 중 전일제(4대보험에 가입되어 있지 않은 학생)로 등록(연구생 등록 포함)한 석·박사과정 대학원생으로 다음 각 호에 해당하는 자

-입학한 지 2년이 지나지 않은 석사과정생

-입학한 지 4년이 지나지 않은 박사과정생 및 박사 수료생

-입학한 지 6년이 지나지 않은 석박통합과정생 및 석박통합과정 수료생

(위의 기간 기산 시 휴학 및 군복무 기간은 제외함).

 

위의 자격을 충족한 경우 ‘참여대학원생’으로 등록되어 ‘지원대학원생’ 선발 기회 등 BK21 사업의 지원을 받을 수 있음.

 

2. 지원대학원생 선발 및 연구장학금 지급

1) 참여대학원생으로 등록된 학생 중 70% 이내의 대학원생을 ‘지원대학원생’으로 선발해 연구장학금을 지급함.

2) 지원기간: 2022.09.01.~2023.02.28. (6개월 단위로 선발)

3) 선발기준: 지도교수 추천을 받은 참여대학원생 중 연구/프로젝트 성과 평가에 의해 선발

4) 역할 및 임무

- BK21 참여교수 연구실에서 논문 연구 및 산학 프로젝트를 성실히 수행 (주 40시간 이상)

- 사업단이 주관하는 각종 세미나, 포럼 등의 학술 활동에 참여

- 사업단이 요구하는 성과 자료 보고

 


3. 참여대학원생 등록서류 제출안내(등록서류는 단순참여, 장학금 지원 받는 학생 모두 제출해주세요.)

1) 첨부된 제출서류 다운 및 작성 후 BK21 사업단 사무실로 서류 제출.

2) 지도교수로부터 지원대학원생(장학금 받는 학생)으로 추천받은 대학원생은 5.제출서류 함께 제출

 

4. 서류 제출 기간: 2022년 8월 29일(월) 13:00 - 9월 7일(수) 17:00 (제출기한 엄수)




5. 제출서류

- 연구자등록번호 발급 방법

: KRI(한국연구업적통합정보시스템 http://www.kri.go.kr)에 접속 회원가입→연구자등록번호 발급 

  (가입 시 소속을 반드시 ‘한동대학교’로 가입) 



1) 재학증명서 1부. 연구생등록자의 경우 연구생등록증 1부(2022년 9월 1일자 기준으로 제출)

2) 개인정보 수집 이용 제공 동의서 1부. (BK사업에 처음 참여하는 학생만 제출)

3) 참여인력 서약서 1부. 

4) 참여대학원생 확약서 1부.

5) BK21 연구장학금 신청서 1부. (지원대학원생-BK장학금 받는 학생만 제출)

6) 전산전자공학과 학기 보고서 1부.

7) 재학증명서 1부.(9월 1일 기준)

 

8) 연구재단 필수 제출 서류 '4대 보험 가입 증명서' 1부. (22.10.1일 기준일로하여 메일로 회신)

(**10월1일 기준으로 출력 후 제출 바랍니다. 9월에는 제출하지 않아도 됩니다!)

- 출력 방법: 4대 사회보험 포털서비스(http://www.4insure.or.kr) 로그인(회원가입, 공인인증서 필요) → 상단 메뉴 증명서발급(가입내역확인) 클릭 후 출력

 

9) 대학원 성적표 1부. (신입생은 제출X)

 

<한국연구재단 필수 수강!!-참여기간 중 1회 수강 후 수료증 제출해야함, 교육 미이수자 및  22-2학기 신입생만 수강하면 됩니다.>

10) 온라인 교육 수료증 (http://alpha-campus.kr/) 에 접속하여 로그인 후 상단 메뉴의 '탐색'->'온라인교육' -> '건강한 연구환경 조성을 위한 인권침해예방교육'클릭 ->'수강신청' 클릭 후 팝업창에서 수강신청 정보 확인 및 '신청완료'-> '학습'-> '학습중과정'-> '건강한 연구환경 조성을 위한 인권침해예방교육' 순서대로 클릭 후 '학습하기'

컨텐츠 수강 후 ‘MY'-> '학습이력'클릭 후 수료증 발급 및 보관) 

*수료증은 메일로 회신부탁합니다. 

 

11) 통장사본 및 신분증 사본 각 1부.

 

※ 외국인 참여대학원생의 경우 외국인 등록증 앞, 뒤 사본(D-2비자 여부 및 만료기한 확인) 제출.

※ 기존 참여대학원생이 지원할 경우: 2)개인정보 수집 이용 제공 동의서, 10)온라인 교육 수료증 제출 생략.

 

6. 서류 제출 및 문의처

1) BK21사업단 사무실: 뉴턴홀 309호 전산전자공학부 사무실 담당자 고라경(Tel: 260-3150)

2) 신청 시 모든 서류는 위 제출서류 순서대로 정리하여 원본 제출 바랍니다.

 

7. 유의사항: 제출된 서류는 반환하지 않으며, 허위사실 기재 시 선발을 취소함.

") + .viewCnt(0) + .importance(false) + .pubDate(LocalDate.of(2022, Month.JULY, 1)) + .expDate(LocalDate.of(2022, Month.JULY, 14)) + .build()); noticeRepository.save(Notice.builder() - .manager(l.get(5)) - .title("SW news for October") - .content("Is coming soon!") - .viewCnt(1004) - .importance(true) - .pubDate(LocalDate.of(2022, Month.SEPTEMBER, 7)) - .expDate(LocalDate.of(2022, Month.OCTOBER, 12)) - .build()); + .manager(l.get(2)) + .title("2022 한동 SW페스티벌 수상자 안내 및 서류 제출 요청(10월 19일(수)까지)") + .content("

2022 한동 SW페스티벌 수상자 안내 및 서류 제출 요청(10월 19일(수)까지)

  

'2022 한동 SW페스티벌'에 참여한 모든 참가자들에게 감사드리며 수상팀을 안내드립니다. 

자세한 수상팀 명단은 첨부파일에서 확인 가능합니다.

수상한 모든 팀들 축하드립니다. 



[상금]

수상팀 제출 서류는 아래 설문지를 통해 팀대표 1명만 제출바랍니다.(팀장이 대표로 수령)

서류 제출 마감일은 10월 19일(수)입니다. 빠른 상금 수령을 위해 마감 기한을 꼭 지켜주세요!!

설문지로 바로이동



[상장]

배부기간: 10.20(목) ~ 21(금). 팀별 1부 발급

배  부  처: SW중심대학지원사업단, 뉴턴홀 218호

   * 상장 수령 시 개인정보 이용 동의서 서명도 함께 해주세요.

 

 

문의 : SW중심대학 지원사업단 이윤정(260-1478 / lyj1515@handong.edu)

") + .viewCnt(0) + .importance(false) + .pubDate(LocalDate.of(2022, Month.JULY, 7)) + .expDate(LocalDate.of(2022, Month.JULY, 12)) + .build()); noticeRepository.save(Notice.builder() - .manager(l.get(1)) - .title("SW news for Novem") - .content("Is going to be FUNNN") - .viewCnt(0) - .importance(true) - .pubDate(LocalDate.of(2022, Month.OCTOBER, 21)) - .expDate(LocalDate.of(2022, Month.OCTOBER, 30)) - .build()); + .manager(l.get(1)) + .title("[전산전자공학부] 2022 CSEE Lab Week에 초대합니다.") + .content("

안녕하세요? \"\uD83D\uDCBB\"

전산전자공학부, 일반대학원 전산전자공학과가 9주차 10/24(월)~10/28(금)에 각 연구실에 대해 알아가고 다양한 연구의 내용을 공유하는 시간을 가지려고 합니다. 



저희 전산전자공학부, 일반대학원 전산전자공학과에서 어떤 주제의 연구들을 진행하고 있는지 Lab설명회, 포스터세션을 통해 이야기를 듣고 싶은 학생들의 많은 참여 바랍니다. 



행사에 참석하면 입시관련된 정보 또한 얻을 수 있으니 AI를 포함한 ICT관련 분야 진학에 관심있는 모든 학부생들의 참여를 환영합니다. 



\"d24;\"온라인 Lab 멘토링 실시 (기간: 10/24(월)~10/28(금))

(아래 링크접속 후 각 Lab의 오픈카톡방을 통한 자유로운 상담 가능)


https://docs.google.com/document/d/1vPNIac3vfuBxzr3-IsqVqEAFwJtA-6dXiE_RvKhXJHo/edit#

 

 

\"d24;\" Lab토크쇼(10/27(목) 18시30분~) 사전질문 작성

제출된 질문은 Lab 토크쇼에서 활용되며, 추첨을 통하여 커피쿠폰을 드립니다.

https://forms.gle/a8XWyqXcTec8vdwq5

 

 

\"d24;\" CSEE Lab Week 행사 참석 희망자(만찬 참여 포함)는 아래 설문지 필수 작성


https://docs.google.com/forms/d/1wkUWbYgcPFFTfrI-M3aOonQYRd_Oq6VHugJx6rVkuRE/edit?pli=1



**10/28(금)** 포스터세션이 종료되고 만찬(오후 5시 예정)이 있을 예정입니다.

만찬은 인원수 제한으로 선착순으로 신청을 받습니다.






\"\uD83C\uDF81\"event\"\uD83C\uDF81\" CSEE Lab Week 참가자 커피쿠폰 증정 

 

 

* 문의: 전산전자공학과 고라경 선생님 (전화: 054-260-3150)

") + .viewCnt(0) + .importance(true) + .pubDate(LocalDate.of(2022, Month.AUGUST, 5)) + .expDate(LocalDate.of(2022, Month.AUGUST, 25)) + .build()); noticeRepository.save(Notice.builder() - .manager(l.get(6)) - .title("SW Festival ends") - .content("See you next year!") - .viewCnt(0) - .importance(true) - .pubDate(LocalDate.of(2022, Month.NOVEMBER, 2)) - .expDate(LocalDate.of(2022, Month.NOVEMBER, 9)) - .build()); + .manager(l.get(0)) + .title("2022-2 비교과 졸업요건 서류 제출 안내(~12/16)") + .content("

안녕하세요?

17학번이후인 1전공 컴퓨터공학/AI·컴퓨터공학심화 학생 중 캡스톤디자인 교과목 수강생 및 2023.2월 졸업예정자에게 안내드립니다.

비교과 졸업요건 만족 여부 확인을 위해 첨부 된 양식 작성하여 구글폼으로 제출해주시기 바랍니다.

   * 비교과 졸업요건은 히즈넷-학생 졸업심사화면의 '학부추가졸업요건'에 해당합니다.

   * 해당 학생들에게는 문자로 안내하였습니다.

<17학번부터 적용되는 비교과 졸업요건>

- 산학프로젝트 1개 이상 수행 (산학R&D프로젝트, 또는 산학연계 교과목프로젝트 (예: 캡스톤디자인))

- 캡스톤프로젝트 결과물 등을 특허, 논문, SW시제품 중 한 가지 형태로 1건 이상 제출하여야 함 (공동 출원자/저자 모두 인정).

- 비교과 졸업요건은 캡스톤디자인 과목을 산학 주제로 수행한 결과를 논문 발표, 특허출원, 또는 SW등록함으로써 자연스럽게 충족 가능함.

1. 제출기한: 16주차 금요일(12/16)까지

2. 제출방법: 구글폼(https://forms.gle/Q7X1VfJL176h2TJ38) 제출

  - 23.2월에 졸업하는 경우, 12/16(금)까지 제출하셔야 졸업 가능합니다.(다음학기 ‘학사학위취득유예’ 학생 포함)

  - 23.2월에 졸업하지 않는 경우, 다음 학기에 제출하실 수 있습니다.(구글폼에 '졸업안함' 제출)

3. 참고사항

  가. 이전에 증빙서류로 제출하였던 사례

    1) 논문: 정식 게재된 목차 및 논문 스캔본, 발표 포스터 스캔본

    2) 특허: 특허청의 공식 문서로 출원번호 또는 등록번호와 발명자 정보(주소지 포함)가 기재되어 있는 서류

                 (특허출원서, 특허증, 공개특허공보, 등록특허공보 중 1개 선택)

    3) 시제품제작 (아래 3개 항목 중 1가지 선택)

      가) SW등록: SW등록증, 프로그램등록신청명세서, 저작권 등록증 등

      나) 앱 출시: 출시 된 앱의 스토어 게시 화면 캡쳐 이미지, 앱 출시 확인서 사본 등

      다) 상용서비스 수준 확인 : 산학프로젝트 참여 기업체의 담당자 또는 기업체 멘토가 작성한 시제품 확인서(첨부 양식)

  나. 자주묻는질문

    1) 비교과 졸업요건을 충족하기 위한 결과물은 꼭 캡스톤디자인의 결과물이어야 하나요?

          - 반드시 캡스톤 결과물이어야 할 필요는 없습니다.

    2) 저작권 등록을 한 학생이 대표로 하게되어 등록증에 한명의 이름만 기재되는데 어떻게 하나요?

          - 등록증에 들어있는 제목과 캡스톤 제목이 일치하면 같은 팀원에게 동일하게 적용됩니다.                                            다만, 서류는 개인별로 제출하셔야 합니다.



문의) csee@handong.edu

") + .viewCnt(0) + .importance(true) + .pubDate(LocalDate.of(2022, Month.AUGUST, 8)) + .expDate(LocalDate.of(2022, Month.DECEMBER, 16)) + .build()); + noticeRepository.save(Notice.builder() + .manager(l.get(0)) + .title("[이랜드이노플] 채용설명회 안내 및 수요조사") + .content("

안녕하세요:) 반갑습니다.

이랜드이노플 인사팀입니다.



금번 [이랜드이노플X한동대학교] 채용설명회에 참여해주시는 분들께 감사의 의미로 간식 및 기념품을 제공해드리고자 수요조사를 진행하게 되었습니다. 일정은 아래와 같이 진행되며, 참석을 원하시는 분들께서는 본 설문에 응답해주시기를 부탁드립니다:)

 

1. 채용설명회

  가. 일시: 2022.11.16(수) 12:00~12:50

  나. 장소: 뉴턴홀 310호

  다. 참석 혜택

    - 채용설명회에 발걸음 해주시는 학생분들께 아래와 같은 혜택을 드리고자 합니다.

      1) 서류전형 시 가산점 부여

      2) 기념품 제공

      3) Q&A 시간에 학생분들이 궁금해하시는 포인트들을 최대한 답변해드리고자 합니다.

    + (한동대 Only) 간식 제공> [한동대] 이랜드이노플 채용설명회 참여 신청서: https://forms.gle/s9B5JbDPsviRBEoq5

 

2. 채용 안내

  가. 채용일정: 2022.11.4(금)~11.21(월)

  나. 이랜드이노플 채용 관련 링크

    - 채용사이트: https://careers.eland.co.kr/announce/recruit/hxKeGGXNip4urmc1ZmHDz7PJVJ2-

    - Notion 이노플 공채 블로그: https://elandinnople.oopy.io/38d9b929-de4f-46eb-8234-d5b231973e74

    - 네이버블로그: https://blog.naver.com/elandinnople

 

") + .viewCnt(0) + .importance(true) + .pubDate(LocalDate.of(2022, Month.SEPTEMBER, 6)) + .expDate(LocalDate.of(2022, Month.SEPTEMBER, 26)) + .build()); + noticeRepository.save(Notice.builder() + .manager(l.get(1)) + .title("[대학원] 세미나(11월 11일, 손현우 교수)-아날로그 연산기 기반의 학습가능한 신경망 시스템") + .content("

정보통신대학원 세미나를 소개합니다.

 

이번 세미나는 온.오프라인(한국어 강의)으로 진행 되며, 학부생, 대학원생, 교직원 누구나 참여 가능합니다. 

 

*특강에 참여한 전전 학부생들에게는(대학원생 제외) 소중대 마일리지를 적립해드리니, 관심있는 학생들의 많은 참여 바랍니다. (ZOOM 접속 후 닉네임을 학번, 이름으로 변경 필수!)

 

 

 

 

▶▶세미나5-정보통신대학원 세미나 2022년 2학기

 

 

 

 아날로그 연산기 기반의 학습가능한 신경망

 

손현우 교수

 

경상국립대학교

 

 

 초록



AI 알고리즘의 발전과 함께 IoT를 위한 에너지 효율적인 AI 하드웨어의 필요성이 증가하고 있다. 최근 BinaryNet 알고리즘을 이용하여 추론 과정에서 더 높은 효율을 위한 아날로그 연산기 기반의 하드웨어 가속기 [1] 가 제안되었지만, 학습과 추론이 가능한 AI 하드웨어는 여전히 상대적으로 높은 정확도의 곱셈과 함께 복잡한 학습 과정을 필요로 한다. 또한 인 메모리 하드웨어 구조는 적은 데이터 이동 및 대규모 병렬 동작으로 인하여 높은 에너지 효율과 낮은 지연 시간을 달성할 수 있지만, 아날로그 연산 특성 때문에 PVT 변화에 취약하여 오프라인으로 학습된 가중치를 사용시 상당한 성능저하를 유발할 수 있다. 최근 보고된 온칩 학습 가능한 오토인코더 [2] 와 서포트 벡터 머신 (SVM) [3] 은 소프트웨어로 입증된 AI 알고리즘의 아날로그 연산이 온칩 학습에 성공적으로 사용될 수 있음을 보여주었지만, 단일 오토인코더 유닛 또는 단일 레이어의 SVM으로 응용이 제한되었다. 본 논문 [4] 은 다층 신경망의 학습을 위해 널리 사용되는 오류 역전파 알고리즘을 수행하는 신경망 시스템을 제안한다 (그림. 1). 제안된 시스템의 한 구성 단위로서, 전류형 곱셈누적 연산 (MAC) 프로세서는 병렬 MAC연산으로 순전파 및 역전파를 모두 수행한다. 지도 학습을 위해, 제안된 시스템은 28nm CMOS 기술로 제작된 두 개의 프로세서 칩과 FPGA를 사용하여 두 레이어의 신경망에서 검증되었다. 제안된 시스템은 아날로그 기반 MAC을 위한 보정 회로 없이 동일한 아날로그 기반 MAC을 통해 학습 데이터를 학습함으로써 칩 대 칩 변화 및 아날로그 동작의 불완전성을 보상하였다. 제안된 시스템은 1-b (+1, 0, -1) 배치 업데이트를 사용하여 22×22의 사이즈로 조정된 MNIST 데이터 셋의 분류에서 약 97%의 인식률을 달성하였다.


 

*일시 11월 11일 (금), 16시~


* 장소 NTH412호

*ZOOM https://handong.zoom.us/j/86244954271

*회의ID 862 4495 4271

*문의 4단계 BK21 AI사업단 (260-3150)



") + .viewCnt(0) + .importance(true) + .pubDate(LocalDate.of(2022, Month.SEPTEMBER, 9)) + .expDate(LocalDate.of(2022, Month.SEPTEMBER, 15)) + .build()); + noticeRepository.save(Notice.builder() + .manager(l.get(2)) + .title("[SW중심대] 11월 2일(수) 류석문 쏘카 CTO 특강 안내") + .content("

[SW중심대] 11월 2일(수) 류석문  쏘카 CTO 특강 안내






 

1. 강사 : 류석문 쏘카 CTO


2. 주제 :  프로그래머로 산다는 것

 

3. 일시 : 2022년 11월 2일 (수) 오후 1시 

 

4. 장소 : 오석관 405호, 401호,

 

5. 소감문 제출 방법 : 링크 접속 후 제출 (https://forms.gle/gRtNgqWtFnxYmMXVA)


    * 공프기 및 캡스톤 수강생 외 학생들은 강의 시청 후 반드시 소감문을 제출하셔야 합니다. (11. 4(금) 밤12시까지)







   ☎ 문의 : SW중심대학 지원사업단 김선영 (T.260-1492, E-Mail : pooh8276@handong.edu)

") + .viewCnt(0) + .importance(true) + .pubDate(LocalDate.of(2022, Month.OCTOBER, 7)) + .expDate(LocalDate.of(2022, Month.OCTOBER, 28)) + .build()); + + noticeRepository.save(Notice.builder() + .manager(l.get(3)) + .title("\"일본 IT 강독\" 2022년 2학기 첫번쨰 모임이 이번주 수요일 11월 09일 저녁 8시에 열립니다.") + .content("

 \"일본 IT 강독\"   2022년 2학기 첫번? 모임이 이번주  수요일 11월 09일 저녁 8시에 열립니다.



2022년2학기 일본IT학회 주관 \"일본 IT 강독\"



일본의  IT시스템 개발문서, IT 트렌드 관련 일본어 기사 등을 같이 읽어 나가는 시간입니다. 일본은 IT시스템 개발과정에서 Documentation을 아주 철저히 하고 있습니다. 따라서 일본 IT 취업시 일본어를 읽고 쓰는 능력은 회화능력 이상으로 중요합니다. IT관련 일본어 문서를 읽어나가며 일본어를 더 공부하고 싶게 하고자 합니다.



본 시간은 22년이상 일본에서 IT개발자로서 일본인들과 함께 일해오신 일본 도레이쿠 김종환 대표님이 직접 강의합니다.



참여자격 : 일본어 초급 수준(한동대학교 일본어  I 수강 수준)



일정

제 1 차 모임. 11월 09일(수 저녁 8시) 11주차 

제 2 차 모임. 11월 23일(수 저녁 8시) 13주차 

 

줌 접속 주소

https://handong.zoom.us/j/82808657679



- 참석자에게는 마일리지가 부여됩니다.

- 문의 : 김기석 교수(peterkim@handong.edu) ,박훈성(01043417017 / 21800333@handong.ac.kr) 

") + .viewCnt(0) + .importance(true) + .pubDate(LocalDate.of(2022, Month.NOVEMBER, 1)) + .expDate(LocalDate.of(2022, Month.NOVEMBER, 7)) + .build()); + noticeRepository.save(Notice.builder() + .manager(l.get(2)) + .title("23-1학기 공학프로젝트기획(공프기) 사전신청 안내") + .content("

2023년 봄학기 공학프로젝트기획(공프기)을 수강하기 원하는 학생은

11월 6일까지 아래 링크의 웹사이트에서 사전 신청을 접수하시기 바랍니다.

http://walab.handong.edu/csc/

사전 신청은 공학프로젝트기획 주제 제안과 팀 구성 과정을 효율적으로 하기 위한 작업이니, 

수강 의사가 조금이라도 있다면 반드시 사전 신청을 접수하기 바랍니다.

사전신청에 접수한 학생에 한하여 관련 공지사항과 공프기 주제 제안 내용을 공개할 예정입니다.


  • 2023-1학기 공프기를 위한 일정 계획

    • 2022-2학기 9주차

      • CSEE Lab week (연구실 소개)

    • 2022-2학기 10주차

      • 2023-1학기를 위한 사전신청

      • 수강 예정 학생 수 파악 및 예상 프로젝트 팀 수 확정

    • 2022-2학기 12주차 ~

      • 주제 공개

      • 관심이 있는 주제/교수님께 개별 연락하여 팀 구성

") + .viewCnt(0) + .importance(true) + .pubDate(LocalDate.of(2022, Month.OCTOBER, 25)) + .expDate(LocalDate.of(2022, Month.OCTOBER, 31)) + .build()); + noticeRepository.save(Notice.builder() + .manager(l.get(3)) + .title("SW Festival ends") + .content("See you next year!") + .viewCnt(0) + .importance(true) + .pubDate(LocalDate.of(2022, Month.NOVEMBER, 2)) + .expDate(LocalDate.of(2022, Month.NOVEMBER, 9)) + .build()); + noticeRepository.save(Notice.builder() + .manager(l.get(2)) + .title("[지역선도대학] 2022 대경권 대학생 AI프로그래밍 경진대회 개최") + .content("

2022 대경권 대학생 AI프로그래밍 경진대회 개최 









지역선도대학육성사업에서는 재학생들의 인공지능(AI) 컴퓨팅 사고역량, 프로그래밍 역량 문제해결 역량 강화 등을 위하여 2022 대경권 대학생 AI프로그래밍 경진대회를 개최합니다.





■ 접수기간: 2022. 10. 26.(수) ~ 11. 9.(수) 까지 

■ 접수방법: 대회 홈페이지에서 직접 신청(참가비 무료)



대회 홈페이지 주소 및 자세한 내용은 지역선도대학육성사업 홈페이지 → 온라인신청 → 진행프로그램에서 가능

(https://spoke.knu.ac.kr/03_sub/01_sub.html)



■ 문의 : 안영은 연구원(054-260-3124, aye3384@handong.edu)

") + .viewCnt(0) + .importance(true) + .pubDate(LocalDate.of(2022, Month.OCTOBER, 21)) + .expDate(LocalDate.of(2022, Month.OCTOBER, 27)) + .build()); + noticeRepository.save(Notice.builder() + .manager(l.get(0)) + .title("[CSEE Lab Week] Lab 토크쇼 관련 사전 질문") + .content("

안녕하세요. 컴퓨터 공학 전공 주임 안민규 교수입니다.

 

이전 글에 공지된 것처럼 다음 주 9주차에는 전산전자공학부/전산전자공학과가 CSEE Lab Week가 진행됩니다.

관련 글> https://hisnet.handong.edu/myboard/read.php?id=35135&Board=B0029

 

연구실에 관심이 있거나, 2023-1학기 공학프로젝트 기획 수강을 계획하는 학생들에게는 큰 도움이 될 것 같습니다.

 

 

각 연구실에 대하여 궁금한 점은 9주차 동안 진행되는 Lab 멘토링을 통해 문의하고 답변을 받기 바랍니다.

또한, 목요일 18:30에는 CSEE 연구실, 연구실 생활, 졸업 프로젝트, 진로 등에 관하여 이야기를 교수님들과 나눌 수 있는 자리를 마련하였으니 많은 학생들이 참여하여 정보를 얻는 시간이 되길 빕니다.

 

 

관련하여 현재 사전 질문을 받고 있습니다. 아래의 링크를 통하여 묻고 싶은 사항을 남겨주시기 바랍니다.

 

 

\"d24;\" Lab토크쇼(10/27(목) 18시30분~) 사전질문 작성

제출된 질문은 Lab 토크쇼에서 활용되며, 추첨을 통하여 커피쿠폰을 드립니다.

https://forms.gle/a8XWyqXcTec8vdwq5

 

 

 

 

안민규 교수.

") + .viewCnt(0) + .importance(true) + .pubDate(LocalDate.of(2022, Month.NOVEMBER, 2)) + .expDate(LocalDate.of(2022, Month.NOVEMBER, 9)) + .build()); } @@ -906,7 +981,7 @@ private void saveStudent() { studentRepository.save(Student.builder() .name("이하민") .department(departementRepository.findByName("상담복지")) - .studentNum("21900032") + .studentNum("21910032") .semester(4) .major1(majorRepository.findByName("사회복지학전공")) .major2(majorRepository.findByName("컴퓨터공학전공")) @@ -1222,7 +1297,7 @@ private void saveStudent() { studentRepository.save(Student.builder() .name("김영헌") .department(departementRepository.findByName("공간환경시스템")) - .studentNum("21800232") + .studentNum("21810232") .semester(9) .major1(majorRepository.findByName("도시환경공학전공")) .major2(majorRepository.findByName("컴퓨터공학전공")) @@ -1350,95 +1425,545 @@ private void saveDepartment() { public void saveActivities() { activityRepository.save(Activity.builder() - .semester("2021-2") - .personal(false) - .remark("Spring 이용") - .requestStatus(1) - .name("(캠프)웹서비스 프로젝트(spring)_장소연") - .weight(3) - .category(categoryRepository.findByName("비교과-행사참여")) - .build()); + .semester("2021-2") + .personal(false) + .remark("Spring 이용") + .requestStatus(1) + .name("(캠프)웹서비스 프로젝트(spring)_장소연") + .weight(3) + .category(categoryRepository.findByName("비교과-행사참여")) + .build()); activityRepository.save(Activity.builder() - .semester("2022-2") - .personal(false) - .remark("우수상 수상") - .requestStatus(1) - .name("비즈플로우") - .weight(2) - .category(categoryRepository.findByName("비교과-행사참여")) - .build()); + .semester("2021-2") + .personal(false) + .remark("우수상 수상") + .requestStatus(1) + .name("(캠프)미리미리C 캠프_김광") + .weight(3) + .category(categoryRepository.findByName("비교과-행사참여")) + .build()); activityRepository.save(Activity.builder() - .semester("2020-2") - .personal(false) - .remark("") - .requestStatus(1) - .name("(캠프)미리미리C 캠프_김광") - .weight(5) - .category(categoryRepository.findByName("비교과-행사참여")) - .build()); + .semester("2021-2") + .personal(false) + .remark("") + .requestStatus(1) + .name("공학프로젝트기획") + .weight(2) + .category(categoryRepository.findByName("전공마일리지")) + .build()); activityRepository.save(Activity.builder() - .semester("2020-1") - .personal(false) - .remark("") - .requestStatus(1) - .name("C 프로그래밍") - .weight(1) - .category(categoryRepository.findByName("전공마일리지")) - .build()); + .semester("2021-2") + .personal(true) + .remark("우수상 수상") + .requestStatus(1) + .name("해커톤") + .weight(5) + .category(categoryRepository.findByName("기타")) + .build()); activityRepository.save(Activity.builder() - .semester("2021-1") - .personal(false) - .remark("") - .requestStatus(1) - .name("AI프로젝트 입문") - .weight(2) - .category(categoryRepository.findByName("전공마일리지")) - .build()); + .semester("2021-2") + .personal(true) + .remark("") + .requestStatus(1) + .name("정보처리기사 자격증") + .weight(4) + .category(categoryRepository.findByName("기타")) + .build()); activityRepository.save(Activity.builder() - .semester("2019-2") - .personal(false) - .remark("") - .requestStatus(1) - .name("(캠프)Advanced Flutter Camp_조성배") - .weight(4) - .category(categoryRepository.findByName("비교과-행사참여")) - .build()); + .semester("2021-2") + .personal(false) + .remark("우수상 수상") + .requestStatus(1) + .name("(캠프)Advanced Flutter Camp_조성배") + .weight(3) + .category(categoryRepository.findByName("비교과-행사참여")) + .build()); activityRepository.save(Activity.builder() - .semester("2019-1") - .personal(true) - .remark("") - .requestStatus(1) - .name("정보처리기사 자격증") - .weight(2) - .category(categoryRepository.findByName("기타")) - .build()); + .semester("2021-2") + .personal(true) + .remark("") + .requestStatus(1) + .name("현장실습") + .weight(5) + .category(categoryRepository.findByName("산학마일리지")) + .build()); activityRepository.save(Activity.builder() - .semester("2022-1") - .personal(false) - .remark("") - .requestStatus(1) - .name("공학프로젝트기획") - .weight(6) - .category(categoryRepository.findByName("전공마일리지")) - .build()); + .semester("2021-2") + .personal(true) + .remark("") + .requestStatus(1) + .name("논문 분석") + .weight(3) + .category(categoryRepository.findByName("비교과-연구활동")) + .build()); activityRepository.save(Activity.builder() - .semester("2020-2") - .personal(false) - .remark("") - .requestStatus(1) - .name("캡스톤") - .weight(1) - .category(categoryRepository.findByName("전공마일리지")) - .build()); + .semester("2021-2") + .personal(false) + .remark("디지털 시대와 개발자 (10.26)") + .requestStatus(1) + .name("CSEE 특강") + .weight(3) + .category(categoryRepository.findByName("비교과-특강참여")) + .build()); activityRepository.save(Activity.builder() - .semester("2021-2") - .personal(false) - .remark("") - .requestStatus(1) - .name("프로그래밍 집중훈련 캠프_김호준") - .weight(7) - .category(categoryRepository.findByName("비교과-행사참여")) - .build()); + .semester("2021-2") + .personal(false) + .remark("") + .requestStatus(1) + .name("캡스톤 페스티벌 참여") + .weight(3) + .category(categoryRepository.findByName("비교과-행사참여")) + .build()); + activityRepository.save(Activity.builder() + .semester("2021-2") + .personal(false) + .remark("미리미리 C 캠프") + .requestStatus(1) + .name("CRA") + .weight(3) + .category(categoryRepository.findByName("비교과-학회활동")) + .build()); + activityRepository.save(Activity.builder() + .semester("2021-2") + .personal(false) + .remark("") + .requestStatus(1) + .name("GHOST GBC") + .weight(4) + .category(categoryRepository.findByName("비교과-학회활동")) + .build()); + activityRepository.save(Activity.builder() + .semester("2021-2") + .personal(true) + .remark("") + .requestStatus(1) + .name("네이버 부트캠프") + .weight(5) + .category(categoryRepository.findByName("기타")) + .build()); + activityRepository.save(Activity.builder() + .semester("2021-2") + .personal(false) + .remark("") + .requestStatus(1) + .name("(캠프)프로그래밍 집중훈련 캠프_김호준") + .weight(3) + .category(categoryRepository.findByName("비교과-행사참여")) + .build()); + activityRepository.save(Activity.builder() + .semester("2021-2") + .personal(false) + .remark("프로그래머로 산다는 것 (11.2)") + .requestStatus(1) + .name("CSEE 특강") + .weight(3) + .category(categoryRepository.findByName("비교과-특강참여")) + .build()); + activityRepository.save(Activity.builder() + .semester("2021-2") + .personal(false) + .remark("") + .requestStatus(1) + .name("(캠프)파이썬 기초 잡기 캠프_박성진") + .weight(3) + .category(categoryRepository.findByName("비교과-행사참여")) + .build()); + activityRepository.save(Activity.builder() + .semester("2021-2") + .personal(false) + .remark("") + .requestStatus(1) + .name("(캠프)Program Problem Solving 캠프_김광") + .weight(3) + .category(categoryRepository.findByName("비교과-행사참여")) + .build()); + activityRepository.save(Activity.builder() + .semester("2021-2") + .personal(false) + .remark("") + .requestStatus(1) + .name("(캠프)VVS_세상 소중한 나를 위한 캠프_정석민") + .weight(3) + .category(categoryRepository.findByName("비교과-행사참여")) + .build()); + activityRepository.save(Activity.builder() + .semester("2021-2") + .personal(false) + .remark("") + .requestStatus(1) + .name("(캠프)에메르송의 코딩테스트 준비 캠프_송다빈") + .weight(3) + .category(categoryRepository.findByName("비교과-행사참여")) + .build()); + activityRepository.save(Activity.builder() + .semester("2021-2") + .personal(false) + .remark("") + .requestStatus(1) + .name("(캠프)딥러닝 심화 캠프_김인중") + .weight(3) + .category(categoryRepository.findByName("비교과-행사참여")) + .build()); + activityRepository.save(Activity.builder() + .semester("2022-1") + .personal(false) + .remark("Spring 이용") + .requestStatus(1) + .name("(캠프)웹서비스 프로젝트(spring)_장소연") + .weight(3) + .category(categoryRepository.findByName("비교과-행사참여")) + .build()); + activityRepository.save(Activity.builder() + .semester("2022-1") + .personal(false) + .remark("우수상 수상") + .requestStatus(1) + .name("(캠프)미리미리C 캠프_김광") + .weight(3) + .category(categoryRepository.findByName("비교과-행사참여")) + .build()); + activityRepository.save(Activity.builder() + .semester("2022-1") + .personal(false) + .remark("") + .requestStatus(1) + .name("공학설계입문") + .weight(1) + .category(categoryRepository.findByName("전공마일리지")) + .build()); + activityRepository.save(Activity.builder() + .semester("2022-1") + .personal(true) + .remark("최우수상 수상") + .requestStatus(1) + .name("해커톤") + .weight(5) + .category(categoryRepository.findByName("기타")) + .build()); + activityRepository.save(Activity.builder() + .semester("2022-1") + .personal(true) + .remark("") + .requestStatus(1) + .name("ISQTB 자격증") + .weight(2) + .category(categoryRepository.findByName("기타")) + .build()); + activityRepository.save(Activity.builder() + .semester("2022-1") + .personal(false) + .remark("") + .requestStatus(1) + .name("(캠프)Advanced Flutter Camp_조성배") + .weight(3) + .category(categoryRepository.findByName("비교과-행사참여")) + .build()); + activityRepository.save(Activity.builder() + .semester("2022-1") + .personal(true) + .remark("BizFlow") + .requestStatus(1) + .name("현장실습") + .weight(5) + .category(categoryRepository.findByName("산학마일리지")) + .build()); + activityRepository.save(Activity.builder() + .semester("2022-1") + .personal(true) + .remark("AI 딥러닝") + .requestStatus(1) + .name("논문 분석") + .weight(3) + .category(categoryRepository.findByName("비교과-연구활동")) + .build()); + activityRepository.save(Activity.builder() + .semester("2022-1") + .personal(false) + .remark("제네시스랩의 기술 창업 스토리") + .requestStatus(1) + .name("CSEE 특강") + .weight(2) + .category(categoryRepository.findByName("비교과-특강참여")) + .build()); + activityRepository.save(Activity.builder() + .semester("2022-1") + .personal(false) + .remark("") + .requestStatus(1) + .name("공학 페스티벌 참여") + .weight(1) + .category(categoryRepository.findByName("비교과-행사참여")) + .build()); + activityRepository.save(Activity.builder() + .semester("2022-1") + .personal(false) + .remark("미리미리 C 캠프") + .requestStatus(1) + .name("CRA") + .weight(1) + .category(categoryRepository.findByName("비교과-학회활동")) + .build()); + activityRepository.save(Activity.builder() + .semester("2022-1") + .personal(false) + .remark("") + .requestStatus(1) + .name("슬기짜기 코딩 교육") + .weight(1) + .category(categoryRepository.findByName("비교과-학회활동")) + .build()); + activityRepository.save(Activity.builder() + .semester("2022-1") + .personal(true) + .remark("세상을 바꾸는 디지털 전환과 신기술 도입 사례 (04.16)") + .requestStatus(1) + .name("CSEE 특강") + .weight(1) + .category(categoryRepository.findByName("비교과-특강참여")) + .build()); + activityRepository.save(Activity.builder() + .semester("2022-1") + .personal(false) + .remark("") + .requestStatus(1) + .name("(캠프)프로그래밍 캠프_김호준") + .weight(3) + .category(categoryRepository.findByName("비교과-행사참여")) + .build()); + activityRepository.save(Activity.builder() + .semester("2022-1") + .personal(false) + .remark("글로벌 라이다 기술 동향 및 에스오에스랩 창업 스토리 (04.23)") + .requestStatus(1) + .name("CSEE 특강") + .weight(3) + .category(categoryRepository.findByName("비교과-특강참여")) + .build()); + activityRepository.save(Activity.builder() + .semester("2022-1") + .personal(false) + .remark("") + .requestStatus(1) + .name("(캠프)파이썬 심화 캠프_박성진") + .weight(3) + .category(categoryRepository.findByName("비교과-행사참여")) + .build()); + activityRepository.save(Activity.builder() + .semester("2022-1") + .personal(false) + .remark("") + .requestStatus(1) + .name("(캠프)Program Problem Solving 캠프_김광") + .weight(3) + .category(categoryRepository.findByName("비교과-행사참여")) + .build()); + activityRepository.save(Activity.builder() + .semester("2022-1") + .personal(false) + .remark("") + .requestStatus(1) + .name("(캠프)VVS_프로그램 기획 및 설계 캠프_정석민") + .weight(3) + .category(categoryRepository.findByName("비교과-행사참여")) + .build()); + activityRepository.save(Activity.builder() + .semester("2022-1") + .personal(false) + .remark("") + .requestStatus(1) + .name("(캠프)에메르송의 면접 준비 캠프_송다빈") + .weight(3) + .category(categoryRepository.findByName("비교과-행사참여")) + .build()); + activityRepository.save(Activity.builder() + .semester("2022-1") + .personal(false) + .remark("") + .requestStatus(1) + .name("(캠프)컴퓨터 비전 캠프_황성수") + .weight(3) + .category(categoryRepository.findByName("비교과-행사참여")) + .build()); + activityRepository.save(Activity.builder() + .semester("2022-2") + .personal(false) + .remark("Spring 이용") + .requestStatus(1) + .name("(캠프)웹서비스 프로젝트(spring)_장소연") + .weight(3) + .category(categoryRepository.findByName("비교과-행사참여")) + .build()); + activityRepository.save(Activity.builder() + .semester("2022-2") + .personal(false) + .remark("우수상 수상") + .requestStatus(1) + .name("(캠프)미리미리C 캠프_김광") + .weight(3) + .category(categoryRepository.findByName("비교과-행사참여")) + .build()); + activityRepository.save(Activity.builder() + .semester("2022-2") + .personal(false) + .remark("") + .requestStatus(1) + .name("랩 설명회 참여") + .weight(1) + .category(categoryRepository.findByName("전공마일리지")) + .build()); + activityRepository.save(Activity.builder() + .semester("2022-2") + .personal(true) + .remark("장려상 수상") + .requestStatus(1) + .name("해커톤") + .weight(5) + .category(categoryRepository.findByName("기타")) + .build()); + activityRepository.save(Activity.builder() + .semester("2022-2") + .personal(true) + .remark("") + .requestStatus(1) + .name("SQLD 자격증") + .weight(3) + .category(categoryRepository.findByName("기타")) + .build()); + activityRepository.save(Activity.builder() + .semester("2022-2") + .personal(false) + .remark("") + .requestStatus(1) + .name("(캠프)Advanced Flutter Camp_조성배") + .weight(3) + .category(categoryRepository.findByName("비교과-행사참여")) + .build()); + activityRepository.save(Activity.builder() + .semester("2022-2") + .personal(true) + .remark("카카오") + .requestStatus(1) + .name("현장실습") + .weight(5) + .category(categoryRepository.findByName("산학마일리지")) + .build()); + activityRepository.save(Activity.builder() + .semester("2022-2") + .personal(true) + .remark("Brain Computer Interface") + .requestStatus(1) + .name("논문 분석") + .weight(3) + .category(categoryRepository.findByName("비교과-연구활동")) + .build()); + activityRepository.save(Activity.builder() + .semester("2022-2") + .personal(false) + .remark("웹과 클라우드 개발자 취업의 현장 (11.07)") + .requestStatus(1) + .name("CSEE 특강") + .weight(3) + .category(categoryRepository.findByName("비교과-특강참여")) + .build()); + activityRepository.save(Activity.builder() + .semester("2022-2") + .personal(false) + .remark("") + .requestStatus(1) + .name("커리어 페스티벌 참여") + .weight(1) + .category(categoryRepository.findByName("비교과-행사참여")) + .build()); + activityRepository.save(Activity.builder() + .semester("2022-2") + .personal(false) + .remark("미리미리 C 캠프") + .requestStatus(1) + .name("CRA") + .weight(1) + .category(categoryRepository.findByName("비교과-학회활동")) + .build()); + activityRepository.save(Activity.builder() + .semester("2022-2") + .personal(false) + .remark("") + .requestStatus(1) + .name("SODA 코딩 교육") + .weight(1) + .category(categoryRepository.findByName("비교과-학회활동")) + .build()); + activityRepository.save(Activity.builder() + .semester("2022-2") + .personal(true) + .remark("웹 개발자로 살아남는 법 (11.27)") + .requestStatus(1) + .name("CSEE 특강") + .weight(1) + .category(categoryRepository.findByName("비교과-특강참여")) + .build()); + activityRepository.save(Activity.builder() + .semester("2022-2") + .personal(false) + .remark("") + .requestStatus(1) + .name("(캠프)프로그래밍 캠프_김호준") + .weight(3) + .category(categoryRepository.findByName("비교과-행사참여")) + .build()); + activityRepository.save(Activity.builder() + .semester("2022-2") + .personal(false) + .remark("빅데이터 분석과 활용법 (12.10)") + .requestStatus(1) + .name("CSEE 특강") + .weight(1) + .category(categoryRepository.findByName("비교과-특강참여")) + .build()); + activityRepository.save(Activity.builder() + .semester("2022-2") + .personal(false) + .remark("") + .requestStatus(1) + .name("(캠프)파이썬 심화 캠프_박성진") + .weight(3) + .category(categoryRepository.findByName("비교과-행사참여")) + .build()); + activityRepository.save(Activity.builder() + .semester("2022-2") + .personal(false) + .remark("") + .requestStatus(1) + .name("(캠프)Program Problem Solving 캠프_김광") + .weight(3) + .category(categoryRepository.findByName("비교과-행사참여")) + .build()); + activityRepository.save(Activity.builder() + .semester("2022-2") + .personal(false) + .remark("") + .requestStatus(1) + .name("(캠프)VVS_프로그램 기획 및 설계 캠프_정석민") + .weight(3) + .category(categoryRepository.findByName("비교과-행사참여")) + .build()); + activityRepository.save(Activity.builder() + .semester("2022-2") + .personal(false) + .remark("") + .requestStatus(1) + .name("(캠프)에메르송의 면접 준비 캠프_송다빈") + .weight(3) + .category(categoryRepository.findByName("비교과-행사참여")) + .build()); + activityRepository.save(Activity.builder() + .semester("2022-2") + .personal(false) + .remark("") + .requestStatus(1) + .name("(캠프)컴퓨터 비전 캠프_황성수") + .weight(3) + .category(categoryRepository.findByName("비교과-행사참여")) + .build()); } From 89c36b7e51ae22990676b90a62183c42918e6527 Mon Sep 17 00:00:00 2001 From: davidpiao Date: Tue, 29 Nov 2022 19:49:00 +0900 Subject: [PATCH 2/5] merge with dev --- .gitignore | 3 +- build.gradle | 1 + .../activity/application/ActivityService.java | 123 +- .../application/MActivityService.java | 18 +- .../activity/application/dto/ActivityDto.java | 5 + .../dto/AllMActivityParticipantDto.java | 4 +- .../application/dto/ChartCategoryCntDto.java | 39 + .../dto/ChartDepartmentDataDto.java | 21 + .../application/dto/ChartGradeDataDto.java | 25 + .../dto/ChartSearchRequestDto.java | 17 + .../application/dto/ChartTimelineDto.java | 19 + .../dto/chart/ChartCategoryDto.java | 32 + .../application/dto/chart/ChartDataDto.java | 30 + .../application/dto/chart/ChartRankDto.java | 16 + .../dto/chart/ChartSectionCntDto.java | 28 + .../hispath/activity/domain/Activity.java | 3 + .../domain/repository/ActivityRepository.java | 5 + .../repository/ActivityRepositoryCustom.java | 130 + .../presentation/ActivityController.java | 67 +- .../presentation/ChartController.java | 137 + .../presentation/MActivityController.java | 81 +- .../AllMActivityParticipantResponse.java | 6 +- .../response/MileageChartResponse.java | 18 + .../response/chart/ChartCategoryResponse.java | 23 + .../response/chart/ChartDataResponse.java | 23 + .../chart/ChartDepartmentResponse.java | 19 + .../response/chart/ChartGradeResponse.java | 19 + .../response/chart/ChartRankResponse.java | 20 + .../response/chart/ChartSectionResponse.java | 15 + .../response/chart/ChartTimelineResponse.java | 19 + .../hispath/auth/application/AuthService.java | 69 +- .../hispath/auth/domain/OauthProperties.java | 3 +- .../hispath/auth/domain/OauthProvider.java | 6 +- .../auth/infrastructure/ApiRequester.java | 28 +- .../auth/infrastructure/JwtProvider.java | 2 +- .../auth/infrastructure/OauthHandler.java | 5 +- .../auth/presentation/AuthController.java | 12 + .../auth/presentation/LoginInterceptor.java | 13 +- .../presentation/CategoryController.java | 7 + .../server/hispath/common/TestController.java | 2646 ++++++++++------- .../com/server/hispath/config/WebConfig.java | 2 +- .../application/dto/DepartmentDto.java | 10 +- .../hispath/department/domain/Department.java | 2 + .../presentation/DepartmentController.java | 14 +- .../response/DepartmentResponse.java | 3 +- .../java/com/server/hispath/docs/ApiDoc.java | 25 +- .../exception/GlobalExceptionHandler.java | 22 + .../activity/ActivityApplyException.java | 12 + .../server/hispath/filters/LoggingFilter.java | 130 + .../hispath/filters/RequestWrapper.java | 54 + .../hispath/filters/ResponseWrapper.java | 11 + .../major/application/dto/MajorDto.java | 3 +- .../server/hispath/major/domain/Major.java | 1 + .../major/presentation/MajorController.java | 7 + .../presentation/MajorTestController.java | 39 - .../presentation/response/MajorResponse.java | 3 +- .../manager/application/ManagerService.java | 31 + .../manager/application/dto/ManagerCUDto.java | 4 +- .../application/dto/ManagerDashboardDto.java | 27 + .../manager/application/dto/ManagerDto.java | 3 +- .../application/dto/ManagerUpdateDto.java | 22 + .../hispath/manager/domain/DailyInfo.java | 36 + .../hispath/manager/domain/Manager.java | 12 +- .../repository/DailyInfoRepository.java | 20 + .../presentation/ManagerController.java | 40 +- .../request/ManagerCURequest.java | 2 +- .../request/ManagerUpdateRequest.java | 18 + .../response/ManagerEmailResponse.java | 12 + .../response/ManagerResponse.java | 3 +- .../notice/application/NoticeService.java | 6 + .../application/dto/DashboardNoticeDto.java | 5 +- .../domain/repository/NoticeRepository.java | 8 + .../notice/presentation/NoticeController.java | 29 +- .../response/NoticeDashboardResponse.java | 5 +- .../resume/application/ResumeService.java | 9 + .../domain/repository/ResumeRepository.java | 2 + .../resume/presentation/ResumeController.java | 31 +- .../application/ScholarshipService.java | 79 +- .../application/dto/SearchRequestDto.java | 7 +- .../scholarship/domain/Scholarship.java | 3 +- .../repository/ScholarshipRepository.java | 2 + .../ScholarshipRepositoryCustom.java | 52 +- .../presentation/ScholarshipController.java | 24 +- .../response/ScholarshipResponse.java | 3 +- .../student/application/StudentService.java | 39 +- .../server/hispath/student/domain/Inhyok.java | 24 - .../hispath/student/domain/Participant.java | 9 +- .../hispath/student/domain/Student.java | 1 + .../domain/repository/StudentRepository.java | 8 +- .../repository/StudentRepositoryCustom.java | 49 + .../presentation/StudentController.java | 76 +- .../response/DashboardResponse.java | 14 +- src/main/resources/logback-spring.xml | 15 + 93 files changed, 3459 insertions(+), 1366 deletions(-) create mode 100644 src/main/java/com/server/hispath/activity/application/dto/ChartCategoryCntDto.java create mode 100644 src/main/java/com/server/hispath/activity/application/dto/ChartDepartmentDataDto.java create mode 100644 src/main/java/com/server/hispath/activity/application/dto/ChartGradeDataDto.java create mode 100644 src/main/java/com/server/hispath/activity/application/dto/ChartSearchRequestDto.java create mode 100644 src/main/java/com/server/hispath/activity/application/dto/ChartTimelineDto.java create mode 100644 src/main/java/com/server/hispath/activity/application/dto/chart/ChartCategoryDto.java create mode 100644 src/main/java/com/server/hispath/activity/application/dto/chart/ChartDataDto.java create mode 100644 src/main/java/com/server/hispath/activity/application/dto/chart/ChartRankDto.java create mode 100644 src/main/java/com/server/hispath/activity/application/dto/chart/ChartSectionCntDto.java create mode 100644 src/main/java/com/server/hispath/activity/domain/repository/ActivityRepositoryCustom.java create mode 100644 src/main/java/com/server/hispath/activity/presentation/ChartController.java create mode 100644 src/main/java/com/server/hispath/activity/presentation/response/MileageChartResponse.java create mode 100644 src/main/java/com/server/hispath/activity/presentation/response/chart/ChartCategoryResponse.java create mode 100644 src/main/java/com/server/hispath/activity/presentation/response/chart/ChartDataResponse.java create mode 100644 src/main/java/com/server/hispath/activity/presentation/response/chart/ChartDepartmentResponse.java create mode 100644 src/main/java/com/server/hispath/activity/presentation/response/chart/ChartGradeResponse.java create mode 100644 src/main/java/com/server/hispath/activity/presentation/response/chart/ChartRankResponse.java create mode 100644 src/main/java/com/server/hispath/activity/presentation/response/chart/ChartSectionResponse.java create mode 100644 src/main/java/com/server/hispath/activity/presentation/response/chart/ChartTimelineResponse.java create mode 100644 src/main/java/com/server/hispath/exception/activity/ActivityApplyException.java create mode 100644 src/main/java/com/server/hispath/filters/LoggingFilter.java create mode 100644 src/main/java/com/server/hispath/filters/RequestWrapper.java create mode 100644 src/main/java/com/server/hispath/filters/ResponseWrapper.java delete mode 100644 src/main/java/com/server/hispath/major/presentation/MajorTestController.java create mode 100644 src/main/java/com/server/hispath/manager/application/dto/ManagerDashboardDto.java create mode 100644 src/main/java/com/server/hispath/manager/application/dto/ManagerUpdateDto.java create mode 100644 src/main/java/com/server/hispath/manager/domain/DailyInfo.java create mode 100644 src/main/java/com/server/hispath/manager/domain/repository/DailyInfoRepository.java create mode 100644 src/main/java/com/server/hispath/manager/presentation/request/ManagerUpdateRequest.java create mode 100644 src/main/java/com/server/hispath/manager/presentation/response/ManagerEmailResponse.java delete mode 100644 src/main/java/com/server/hispath/student/domain/Inhyok.java create mode 100644 src/main/java/com/server/hispath/student/domain/repository/StudentRepositoryCustom.java create mode 100644 src/main/resources/logback-spring.xml diff --git a/.gitignore b/.gitignore index ad8b31f..07a0459 100644 --- a/.gitignore +++ b/.gitignore @@ -114,4 +114,5 @@ $RECYCLE.BIN/ # Windows shortcuts *.lnk -log/ \ No newline at end of file +log/ +src/main/resources/appender \ No newline at end of file diff --git a/build.gradle b/build.gradle index 91f71fc..15028db 100644 --- a/build.gradle +++ b/build.gradle @@ -45,6 +45,7 @@ dependencies { clean { delete file('src/main/generated') } + implementation 'ca.pjer:logback-awslogs-appender:1.6.0' } tasks.named('test') { diff --git a/src/main/java/com/server/hispath/activity/application/ActivityService.java b/src/main/java/com/server/hispath/activity/application/ActivityService.java index 2acb680..e2f4b87 100644 --- a/src/main/java/com/server/hispath/activity/application/ActivityService.java +++ b/src/main/java/com/server/hispath/activity/application/ActivityService.java @@ -1,12 +1,16 @@ package com.server.hispath.activity.application; import java.util.List; -import java.util.Optional; import java.util.stream.Collectors; import com.server.hispath.activity.application.dto.*; +import com.server.hispath.activity.application.dto.chart.ChartCategoryDto; +import com.server.hispath.activity.application.dto.chart.ChartDataDto; +import com.server.hispath.activity.application.dto.chart.ChartSectionCntDto; import com.server.hispath.activity.domain.Activity; import com.server.hispath.activity.domain.repository.ActivityRepository; +import com.server.hispath.activity.domain.repository.ActivityRepositoryCustom; +import com.server.hispath.activity.presentation.response.chart.ChartSectionResponse; import com.server.hispath.category.application.CategoryService; import com.server.hispath.category.domain.Category; import com.server.hispath.category.domain.repository.CategoryRepository; @@ -16,6 +20,7 @@ import com.server.hispath.student.domain.Participant; import com.server.hispath.student.domain.Student; import com.server.hispath.student.domain.repository.StudentRepository; +import com.server.hispath.student.domain.repository.StudentRepositoryCustom; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; @@ -30,6 +35,8 @@ public class ActivityService { private final CategoryService categoryService; private final CategoryRepository categoryRepository; private final StudentRepository studentRepository; + private final StudentRepositoryCustom studentRepositoryCustom; + private final ActivityRepositoryCustom activityRepositoryCustom; @Transactional public Long create(Long categoryId, ActivityContentDto dto) { @@ -64,12 +71,26 @@ public ActivityDto update(Long id, Long categoryId, ActivityContentDto dto) { } @Transactional - public void delete(Long id) { - activityRepository.deleteById(id); + public void delete(Long activityId) { + activityRepository.deleteById(activityId); } - public Activity findById(Long id) { - return activityRepository.findById(id).orElseThrow(ActivityNotFoundException::new); + @Transactional + public void deleteStudentActivity(Long studentId, Long activityId) { + Activity activity = activityRepository.findActivityWithStudents(activityId) + .orElseThrow(ActivityNotFoundException::new); + Student student = studentRepository.findById(studentId) + .orElseThrow(StudentNotFoundException::new); + if (activity.isPersonal()) { + activityRepository.deleteById(activityId); + return; + } + activity.getParticipants() + .stream() + .filter(participant -> participant.isSameStudent(student)) + .findFirst() + .orElseThrow(ParticipantNotFoundException::new) + .deleteContent(); } @Transactional(readOnly = true) @@ -111,8 +132,9 @@ public ActivityParticipantDto updateStudentActivity(Long activityId, Long studen } @Transactional(readOnly = true) - public List findAllParticipantActivites(Long id, String semester, String section) { - Student student = studentRepository.findStudentWithActivities(id).orElseThrow(StudentNotFoundException::new); + public List findAllParticipantActivites(Long studentId, String semester, String section) { + Student student = studentRepository.findStudentWithActivities(studentId) + .orElseThrow(StudentNotFoundException::new); return student.getParticipants() .stream() .filter(participant -> participant.isSameSemester(semester)) @@ -121,6 +143,23 @@ public List findAllParticipantActivites(Long id, String .collect(Collectors.toList()); } + @Transactional(readOnly = true) + public List findRecentParticipantActivities(Long studentId) { + + Student student = studentRepository.findStudentWithActivities(studentId) + .orElseThrow(StudentNotFoundException::new); + List dtos = student.getParticipants() + .stream() + .sorted((p1, p2) -> p2.getUpdatedAt() + .compareTo(p1.getUpdatedAt())) + .map(ActivityParticipantDto::of) + .collect(Collectors.toList()); + if (dtos.size() > 6) { + return dtos.subList(0, 6); + } + return dtos; + } + @Transactional(readOnly = true) public List findAllPersonalParticipantActivites(Long id, String semester, String section) { Student student = studentRepository.findStudentWithActivities(id).orElseThrow(StudentNotFoundException::new); @@ -150,8 +189,8 @@ public ActivityParticipantDto findParticipantActivityById(Long studentId, Long a @Transactional(readOnly = true) public List findAllByStudentAndSemster(Long id, String semester) { - Student student = studentRepository.findStudentWithIdAndSemester(id, semester) - .orElseThrow(StudentNotFoundException::new); + Student student = findStudentWholeByIdAndSemester(id, semester, false); + return student.getParticipants() .stream() .map(participant -> ActivityDto.from(participant.getActivity())) @@ -172,4 +211,70 @@ public void approve(Long activityId, int weight) { public void reject(Long activityId) { this.findById(activityId).reject(); } + + + @Transactional(readOnly = true) + public List getChartDatasByCategory(Long studentId, ChartSearchRequestDto dto) { + Student student = studentRepository.findById(studentId).orElseThrow(StudentNotFoundException::new); + List studentCnts = activityRepositoryCustom.getStudentCategoryParticipateCnt(student, dto); + List totalCnts = activityRepositoryCustom.getTotalCategoryParticipateCnt(dto); + int totalStudentCnt = activityRepositoryCustom.getTotalStudentCntByChartSearchRequest(dto); + + return totalCnts.stream() + .map(totalCnt -> + studentCnts.stream() + .filter(studentCnt -> studentCnt.isSameCategory(totalCnt.getCategory())) + .findFirst() + .map(studentCnt -> new ChartDataDto(studentCnt, totalCnt.getCnt(), totalStudentCnt)) + .orElseGet(() -> new ChartDataDto(totalCnt.getCategory(), totalCnt.getCnt(), totalStudentCnt)) + ) + .collect(Collectors.toList()); + + } + + @Transactional(readOnly = true) + public List getChartTotalDatasByCategory(Long studentId, ChartSearchRequestDto dto) { + List chartDataDtos = this.getChartDatasByCategory(studentId, dto); + + List activityCntDtos = activityRepositoryCustom.getActivityCntByCategoryAndSemester(dto); + + return chartDataDtos.stream() + .map(chartDataDto -> + activityCntDtos.stream() + .filter(activityCntDto -> activityCntDto.isSameCategory(chartDataDto.getCategory())) + .findFirst() + .map(activityCntDto -> new ChartCategoryDto(chartDataDto, activityCntDto.getCnt())) + .orElseThrow(ActivityNotFoundException::new)) + .filter(ChartCategoryDto::isNotETC) + .collect(Collectors.toList()); + + } + + @Transactional(readOnly = true) + public List getChartTotalDatasBySections(Long studentId, String semester) { + ChartSearchRequestDto dto = ChartSearchRequestDto.builder().semester(semester).build(); + List studentCnts = activityRepositoryCustom.getPersonalChartSectionCnts(studentId, dto); + List totalCnts = activityRepositoryCustom.getTotalChartSectionCnts(dto); + int totalStudentCnt = activityRepositoryCustom.getTotalStudentCntByChartSearchRequest(dto); + + return totalCnts.stream() + .map(totalCnt -> { + return studentCnts.stream() + .filter(studentCnt -> studentCnt.isSameSection(totalCnt.getSection())) + .findFirst() + .map(studentCntDto -> new ChartSectionResponse(totalCnt.getSection(), studentCntDto.getCnt(), totalCnt.getCnt() / (double) totalStudentCnt)) + .orElseGet(() -> new ChartSectionResponse(totalCnt.getSection(), 0L, totalCnt.getCnt() / (double) totalStudentCnt)); + }) + .collect(Collectors.toList()); + + } + + private Student findStudentWholeByIdAndSemester(Long studentId, String semester, boolean isMileage) { + return studentRepositoryCustom.findStudentWithIdAndSemester(studentId, semester, isMileage) + .orElseThrow(StudentNotFoundException::new); + } + + public Activity findById(Long id) { + return activityRepository.findById(id).orElseThrow(ActivityNotFoundException::new); + } } diff --git a/src/main/java/com/server/hispath/activity/application/MActivityService.java b/src/main/java/com/server/hispath/activity/application/MActivityService.java index 2b1efbb..cd222b2 100644 --- a/src/main/java/com/server/hispath/activity/application/MActivityService.java +++ b/src/main/java/com/server/hispath/activity/application/MActivityService.java @@ -1,6 +1,7 @@ package com.server.hispath.activity.application; import java.util.List; +import java.util.Objects; import java.util.stream.Collectors; import com.server.hispath.activity.application.dto.*; @@ -141,22 +142,15 @@ public List findSemestersById(Long studentId) { public ListfindParticipatedActivities(Long id, String semester, String category) { List activities = activityRepository.findParticipatedActivity(); Student student = studentRepository.findById(id).orElseThrow(StudentNotFoundException::new); - List collect = activities.stream() - .filter(activity -> activity.isSameSemester(semester) && activity.isSameCategory(category)) - .map(activity -> {return AllMActivityParticipantDto.of(activity, activity.isParticipate(student)); }) - .collect(Collectors.toList()); + .filter(activity -> activity.isSameSemester(semester) && activity.isSameCategory(category)) + .map(activity -> { + return AllMActivityParticipantDto.of(activity, activity.isParticipate(student)); + }) + .collect(Collectors.toList()); return collect; - -// return activities -// .stream() -// .map(activity -> activity.getParticipants().stream() -// .filter(participant -> participant.isSameSemester(semester)) -// .filter(participant -> participant.isSameCategory(category)) -// .map(participant -> { return AllMActivityParticipantDto.of(participant, participant.isSameStudent(student));}).collect(Collectors.toList())); - } } diff --git a/src/main/java/com/server/hispath/activity/application/dto/ActivityDto.java b/src/main/java/com/server/hispath/activity/application/dto/ActivityDto.java index d5eb6e1..0df3724 100644 --- a/src/main/java/com/server/hispath/activity/application/dto/ActivityDto.java +++ b/src/main/java/com/server/hispath/activity/application/dto/ActivityDto.java @@ -2,6 +2,7 @@ import com.server.hispath.activity.domain.Activity; import com.server.hispath.category.application.dto.CategoryDto; +import com.server.hispath.student.domain.Participant; import lombok.AllArgsConstructor; import lombok.Getter; @@ -25,4 +26,8 @@ public static ActivityDto from(Activity activity) { activity.isPersonal(), activity.getName(), activity.getRemark(), activity.getWeight(), activity.isStudentRegistered()); } + + public static ActivityDto from(Participant participant){ + return ActivityDto.from(participant.getActivity()); + } } diff --git a/src/main/java/com/server/hispath/activity/application/dto/AllMActivityParticipantDto.java b/src/main/java/com/server/hispath/activity/application/dto/AllMActivityParticipantDto.java index e7b996c..a1a6105 100644 --- a/src/main/java/com/server/hispath/activity/application/dto/AllMActivityParticipantDto.java +++ b/src/main/java/com/server/hispath/activity/application/dto/AllMActivityParticipantDto.java @@ -21,8 +21,6 @@ public static AllMActivityParticipantDto of(Activity activity, boolean participa return new AllMActivityParticipantDto(activity.getId(), activity.getSemester(), activity.getName(), activity.getRemark(), CategoryDto.from(activity.getCategory()), participated); } - public boolean getParticipated(){ - return participated; - } + } diff --git a/src/main/java/com/server/hispath/activity/application/dto/ChartCategoryCntDto.java b/src/main/java/com/server/hispath/activity/application/dto/ChartCategoryCntDto.java new file mode 100644 index 0000000..051fa5b --- /dev/null +++ b/src/main/java/com/server/hispath/activity/application/dto/ChartCategoryCntDto.java @@ -0,0 +1,39 @@ +package com.server.hispath.activity.application.dto; + +import java.util.Objects; + +import com.querydsl.core.annotations.QueryProjection; +import com.server.hispath.category.application.dto.CategoryDto; + +import lombok.AllArgsConstructor; +import lombok.Getter; +import lombok.NoArgsConstructor; + +@Getter +@NoArgsConstructor +@AllArgsConstructor +public class ChartCategoryCntDto { + private CategoryDto category; + private Long cnt; + + @QueryProjection + public ChartCategoryCntDto(Long categoryId, String categoryName, Long cnt) { + this.category = new CategoryDto(categoryId, categoryName); + this.cnt = cnt; + } + + @QueryProjection + public ChartCategoryCntDto(Long categoryId, String categoryName, Integer cnt) { + this.category = new CategoryDto(categoryId, categoryName); + this.cnt = cnt.longValue(); + } + + public ChartCategoryCntDto(CategoryDto category) { + this.category = category; + this.cnt = 0L; + } + + public boolean isSameCategory(CategoryDto categoryDto){ + return Objects.equals(categoryDto.getId(), this.category.getId()); + } +} diff --git a/src/main/java/com/server/hispath/activity/application/dto/ChartDepartmentDataDto.java b/src/main/java/com/server/hispath/activity/application/dto/ChartDepartmentDataDto.java new file mode 100644 index 0000000..f5cd9eb --- /dev/null +++ b/src/main/java/com/server/hispath/activity/application/dto/ChartDepartmentDataDto.java @@ -0,0 +1,21 @@ +package com.server.hispath.activity.application.dto; + + +import com.querydsl.core.annotations.QueryProjection; + +import lombok.Getter; +import lombok.NoArgsConstructor; + +@Getter +@NoArgsConstructor +public class ChartDepartmentDataDto { + + private String department; + private Long cnt; + + @QueryProjection + public ChartDepartmentDataDto(String department, Long cnt) { + this.department = department; + this.cnt = cnt; + } +} diff --git a/src/main/java/com/server/hispath/activity/application/dto/ChartGradeDataDto.java b/src/main/java/com/server/hispath/activity/application/dto/ChartGradeDataDto.java new file mode 100644 index 0000000..2450f2e --- /dev/null +++ b/src/main/java/com/server/hispath/activity/application/dto/ChartGradeDataDto.java @@ -0,0 +1,25 @@ +package com.server.hispath.activity.application.dto; + + +import com.querydsl.core.annotations.QueryProjection; + +import lombok.Getter; +import lombok.NoArgsConstructor; + +@Getter +@NoArgsConstructor +public class ChartGradeDataDto { + + private int grade; + private Long cnt; + + @QueryProjection + public ChartGradeDataDto(int grade, Long cnt) { + this.grade = grade; + this.cnt = cnt; + } + + public void addCnt(Long cnt) { + this.cnt += cnt; + } +} diff --git a/src/main/java/com/server/hispath/activity/application/dto/ChartSearchRequestDto.java b/src/main/java/com/server/hispath/activity/application/dto/ChartSearchRequestDto.java new file mode 100644 index 0000000..73340d6 --- /dev/null +++ b/src/main/java/com/server/hispath/activity/application/dto/ChartSearchRequestDto.java @@ -0,0 +1,17 @@ +package com.server.hispath.activity.application.dto; + + +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Getter; +import lombok.NoArgsConstructor; + +@Getter +@Builder +@NoArgsConstructor +@AllArgsConstructor +public class ChartSearchRequestDto { + private String semester; + private Integer grade; + private String department; +} diff --git a/src/main/java/com/server/hispath/activity/application/dto/ChartTimelineDto.java b/src/main/java/com/server/hispath/activity/application/dto/ChartTimelineDto.java new file mode 100644 index 0000000..15e72f3 --- /dev/null +++ b/src/main/java/com/server/hispath/activity/application/dto/ChartTimelineDto.java @@ -0,0 +1,19 @@ +package com.server.hispath.activity.application.dto; + +import com.server.hispath.scholarship.domain.Scholarship; + +import lombok.AllArgsConstructor; +import lombok.Getter; +import lombok.NoArgsConstructor; + +@Getter +@NoArgsConstructor +@AllArgsConstructor +public class ChartTimelineDto { + private String semester; + private int totalWeight; + + public static ChartTimelineDto of(Scholarship scholarship){ + return new ChartTimelineDto(scholarship.getSemester(), scholarship.getTotalMileage()); + } +} diff --git a/src/main/java/com/server/hispath/activity/application/dto/chart/ChartCategoryDto.java b/src/main/java/com/server/hispath/activity/application/dto/chart/ChartCategoryDto.java new file mode 100644 index 0000000..84ba70f --- /dev/null +++ b/src/main/java/com/server/hispath/activity/application/dto/chart/ChartCategoryDto.java @@ -0,0 +1,32 @@ +package com.server.hispath.activity.application.dto.chart; + +import java.util.Objects; + +import com.server.hispath.activity.application.dto.chart.ChartDataDto; +import com.server.hispath.category.application.dto.CategoryDto; + +import lombok.AllArgsConstructor; +import lombok.Getter; +import lombok.NoArgsConstructor; + +@Getter +@NoArgsConstructor +@AllArgsConstructor +public class ChartCategoryDto { + private CategoryDto category; + private Long myCnt; + private Double averageCnt; + private Long totalCnt; + + + public ChartCategoryDto(ChartDataDto dto, Long totalActivityCnt) { + this.category = dto.getCategory(); + this.myCnt = dto.getMyCnt(); + this.averageCnt = dto.getAverageCnt(); + this.totalCnt = totalActivityCnt; + } + + public boolean isNotETC(){ + return !Objects.equals(category.getName(), "기타"); + } +} diff --git a/src/main/java/com/server/hispath/activity/application/dto/chart/ChartDataDto.java b/src/main/java/com/server/hispath/activity/application/dto/chart/ChartDataDto.java new file mode 100644 index 0000000..ac7a091 --- /dev/null +++ b/src/main/java/com/server/hispath/activity/application/dto/chart/ChartDataDto.java @@ -0,0 +1,30 @@ +package com.server.hispath.activity.application.dto.chart; + +import com.server.hispath.activity.application.dto.ChartCategoryCntDto; +import com.server.hispath.category.application.dto.CategoryDto; + +import lombok.AllArgsConstructor; +import lombok.Getter; +import lombok.NoArgsConstructor; + +@Getter +@NoArgsConstructor +@AllArgsConstructor +public class ChartDataDto { + + private CategoryDto category; + private Long myCnt; + private Double averageCnt; + + public ChartDataDto(ChartCategoryCntDto dto, Long totalCnt, int totalStudent) { + this.category = dto.getCategory(); + this.myCnt = dto.getCnt(); + this.averageCnt = totalCnt / (double) totalStudent; + } + + public ChartDataDto(CategoryDto dto, Long totalCnt, int totalStudent) { + this.category = dto; + this.myCnt = 0L; + this.averageCnt = totalCnt / (double) totalStudent; + } +} diff --git a/src/main/java/com/server/hispath/activity/application/dto/chart/ChartRankDto.java b/src/main/java/com/server/hispath/activity/application/dto/chart/ChartRankDto.java new file mode 100644 index 0000000..4d9ab42 --- /dev/null +++ b/src/main/java/com/server/hispath/activity/application/dto/chart/ChartRankDto.java @@ -0,0 +1,16 @@ +package com.server.hispath.activity.application.dto.chart; + +import lombok.AllArgsConstructor; +import lombok.Getter; +import lombok.NoArgsConstructor; + +@Getter +@NoArgsConstructor +@AllArgsConstructor +public class ChartRankDto { + + private int myTotalWeight; + private double avgTotalWeight; + private int maxTotalWeight; + +} diff --git a/src/main/java/com/server/hispath/activity/application/dto/chart/ChartSectionCntDto.java b/src/main/java/com/server/hispath/activity/application/dto/chart/ChartSectionCntDto.java new file mode 100644 index 0000000..8bfc68c --- /dev/null +++ b/src/main/java/com/server/hispath/activity/application/dto/chart/ChartSectionCntDto.java @@ -0,0 +1,28 @@ +package com.server.hispath.activity.application.dto.chart; + +import java.util.Objects; + +import com.querydsl.core.annotations.QueryProjection; +import com.server.hispath.student.domain.Section; + +import lombok.AllArgsConstructor; +import lombok.Getter; +import lombok.NoArgsConstructor; + +@Getter +@NoArgsConstructor +public class ChartSectionCntDto { + + private String section; + private Long cnt; + + @QueryProjection + public ChartSectionCntDto(Section section, Long cnt) { + this.section = section.getName(); + this.cnt = cnt; + } + + public boolean isSameSection(String section){ + return Objects.equals(this.section, section); + } +} diff --git a/src/main/java/com/server/hispath/activity/domain/Activity.java b/src/main/java/com/server/hispath/activity/domain/Activity.java index 440810a..890b33d 100644 --- a/src/main/java/com/server/hispath/activity/domain/Activity.java +++ b/src/main/java/com/server/hispath/activity/domain/Activity.java @@ -12,6 +12,7 @@ import com.server.hispath.activity.application.dto.StudentActivityContentDto; import com.server.hispath.category.domain.Category; import com.server.hispath.common.BaseEntity; +import com.server.hispath.exception.activity.ActivityApplyException; import com.server.hispath.exception.activity.ParticipantDuplicateException; import com.server.hispath.student.domain.Participant; import com.server.hispath.student.domain.Section; @@ -165,6 +166,8 @@ public boolean isSameCategory(String category) { } public void apply(){ + if(this.requestStatus != 3) + throw new ActivityApplyException(); this.requestStatus = 0; } diff --git a/src/main/java/com/server/hispath/activity/domain/repository/ActivityRepository.java b/src/main/java/com/server/hispath/activity/domain/repository/ActivityRepository.java index 766bf08..5b2e6f6 100644 --- a/src/main/java/com/server/hispath/activity/domain/repository/ActivityRepository.java +++ b/src/main/java/com/server/hispath/activity/domain/repository/ActivityRepository.java @@ -11,6 +11,7 @@ public interface ActivityRepository extends JpaRepository { List findAllBySemester(String semester); + // commit 테스트용 @Query("select a from Activity a " + "left join fetch a.participants as p " + @@ -43,4 +44,8 @@ public interface ActivityRepository extends JpaRepository { "left join fetch p.student " + "where a.requestStatus = 1") List findParticipatedActivity(); + + @Query("select sum(a.weight) from Activity a " + + "where a.semester = :semester") + int sumActivityWeight(String semester); } diff --git a/src/main/java/com/server/hispath/activity/domain/repository/ActivityRepositoryCustom.java b/src/main/java/com/server/hispath/activity/domain/repository/ActivityRepositoryCustom.java new file mode 100644 index 0000000..9c0c55e --- /dev/null +++ b/src/main/java/com/server/hispath/activity/domain/repository/ActivityRepositoryCustom.java @@ -0,0 +1,130 @@ +package com.server.hispath.activity.domain.repository; + +import java.util.List; +import java.util.Objects; + +import com.querydsl.core.BooleanBuilder; +import com.querydsl.jpa.JPAExpressions; +import com.querydsl.jpa.impl.JPAQueryFactory; +import com.server.hispath.activity.application.dto.ChartCategoryCntDto; +import com.server.hispath.activity.application.dto.ChartSearchRequestDto; +import com.server.hispath.activity.application.dto.QChartCategoryCntDto; +import com.server.hispath.activity.application.dto.chart.ChartSectionCntDto; +import com.server.hispath.activity.application.dto.chart.QChartSectionCntDto; +import com.server.hispath.student.domain.Student; + +import org.springframework.stereotype.Repository; + +import lombok.RequiredArgsConstructor; + +import static com.server.hispath.activity.domain.QActivity.activity; +import static com.server.hispath.category.domain.QCategory.category; +import static com.server.hispath.student.domain.QParticipant.participant; +import static com.server.hispath.student.domain.QStudent.student; + +@Repository +@RequiredArgsConstructor +public class ActivityRepositoryCustom { + private final JPAQueryFactory queryFactory; + + public List getStudentCategoryParticipateCnt(Student student, ChartSearchRequestDto dto) { + return queryFactory.select(new QChartCategoryCntDto(category.id, category.name, activity.count())) + .from(activity) + .leftJoin(activity.participants, participant) + .leftJoin(activity.category, category) + .where(studentChartCategoryCondition(student, dto)) + .groupBy(category) + .fetch(); + + } + + public List getTotalCategoryParticipateCnt(ChartSearchRequestDto dto) { + return queryFactory.select(new QChartCategoryCntDto(category.id, category.name, activity.participants.size() + .count())) + .from(activity) + .leftJoin(activity.participants, participant) + .leftJoin(participant.activity, activity) + .leftJoin(activity.category, category) + .where(totalChartCategoryCondition(dto)) + .groupBy(category) + .fetch(); + } + + public List getActivityCntByCategoryAndSemester(ChartSearchRequestDto dto) { + return queryFactory.select(new QChartCategoryCntDto(category.id, category.name, activity.count())) + .from(activity) + .leftJoin(activity.category, category) + .where(semesterCondition(new BooleanBuilder(), dto)) + .groupBy(category) + .fetch(); + } + + public List getPersonalChartSectionCnts(Long studentId, ChartSearchRequestDto dto) { + return queryFactory.select(new QChartSectionCntDto(participant.section, participant.count())) + .from(participant) + .where(participant.student.id.eq(studentId) + .and(participant.activity.semester.eq(dto.getSemester()))) + .groupBy(participant.section) + .fetch(); + } + + public List getTotalChartSectionCnts(ChartSearchRequestDto dto) { + return queryFactory.select(new QChartSectionCntDto(participant.section, participant.count())) + .from(participant) + .where(participant.activity.semester.eq(dto.getSemester())) + .groupBy(participant.section) + .fetch(); + } + + public int getTotalStudentCntByChartSearchRequest(ChartSearchRequestDto dto) { + return queryFactory.selectDistinct(participant.student.id) + .from(activity) + .leftJoin(activity.participants, participant) + .where(totalChartCategoryCondition(dto)) + .fetch().size(); + } + + public BooleanBuilder studentChartCategoryCondition(Student student, ChartSearchRequestDto dto) { + BooleanBuilder booleanBuilder = new BooleanBuilder(); + + booleanBuilder.and(participant.student.eq(student)); + booleanBuilder = semesterCondition(booleanBuilder, dto); + booleanBuilder = mileageActivityCondition(booleanBuilder); + return booleanBuilder; + } + + public BooleanBuilder totalChartCategoryCondition(ChartSearchRequestDto dto) { + BooleanBuilder booleanBuilder = new BooleanBuilder(); + booleanBuilder = semesterCondition(booleanBuilder, dto); + booleanBuilder = departmentCondition(booleanBuilder, dto); + booleanBuilder = mileageActivityCondition(booleanBuilder); + if (!Objects.isNull(dto.getGrade())) { + int grade = (dto.getGrade() + 1) / 2 * 2; + booleanBuilder.and(participant.student.semester.eq(grade - 1).or(participant.student.semester.eq(grade))); + } + return booleanBuilder; + } + + public BooleanBuilder semesterCondition(BooleanBuilder booleanBuilder, ChartSearchRequestDto dto) { + if (Objects.equals(dto.getSemester(), "ALL")) + return booleanBuilder; + if (!Objects.isNull(dto.getSemester())) { + booleanBuilder.and(activity.semester.eq(dto.getSemester())); + } + return booleanBuilder; + } + + public BooleanBuilder departmentCondition(BooleanBuilder booleanBuilder, ChartSearchRequestDto dto) { + + if (!Objects.isNull(dto.getDepartment())) { + booleanBuilder.and(participant.student.department.name.eq(dto.getDepartment())); + } + + return booleanBuilder; + } + + public BooleanBuilder mileageActivityCondition(BooleanBuilder booleanBuilder) { + booleanBuilder.and(activity.requestStatus.eq(1)); + return booleanBuilder; + } +} diff --git a/src/main/java/com/server/hispath/activity/presentation/ActivityController.java b/src/main/java/com/server/hispath/activity/presentation/ActivityController.java index b0fb475..967511f 100644 --- a/src/main/java/com/server/hispath/activity/presentation/ActivityController.java +++ b/src/main/java/com/server/hispath/activity/presentation/ActivityController.java @@ -5,18 +5,18 @@ import java.util.stream.Collectors; import com.server.hispath.activity.application.ActivityService; -import com.server.hispath.activity.application.dto.*; import com.server.hispath.activity.application.MActivityService; -import com.server.hispath.activity.application.dto.ActivityContentDto; -import com.server.hispath.activity.application.dto.ActivityDto; -import com.server.hispath.activity.application.dto.MStudentActivityDetailDto; -import com.server.hispath.activity.application.dto.SemesterDto; +import com.server.hispath.activity.application.dto.*; import com.server.hispath.activity.presentation.request.ActivityApproveRequest; import com.server.hispath.activity.presentation.request.ActivityCURequest; import com.server.hispath.activity.presentation.request.StudentActivityCURequest; import com.server.hispath.activity.presentation.response.ActivityParticipantResponse; import com.server.hispath.activity.presentation.response.ActivityResponse; import com.server.hispath.activity.presentation.response.SemesterResponse; +import com.server.hispath.auth.domain.LoginStudent; +import com.server.hispath.auth.domain.RequiredLogin; +import com.server.hispath.auth.domain.RequiredManagerLogin; +import com.server.hispath.auth.domain.StudentLogin; import com.server.hispath.docs.ApiDoc; import com.server.hispath.student.domain.Section; @@ -26,14 +26,12 @@ import io.swagger.annotations.ApiOperation; import lombok.RequiredArgsConstructor; -import org.apache.poi.ss.formula.EvaluationName; @RestController @RequiredArgsConstructor @RequestMapping("/api") public class ActivityController { private final ActivityService activityService; - private final MActivityService mActivityService; @PostMapping("/activity") @@ -73,10 +71,11 @@ public ResponseEntity update(@PathVariable Long id, @RequestBo return ResponseEntity.ok(response); } - @DeleteMapping("/activity/{id}") + @DeleteMapping("/activity/student/{id}") @ApiOperation(value = ApiDoc.ACTIVITY_DELETE) - public ResponseEntity delete(@PathVariable Long id) { - activityService.delete(id); + @RequiredLogin + public ResponseEntity delete(@PathVariable Long id, @StudentLogin LoginStudent loginStudent) { + activityService.deleteStudentActivity(loginStudent.getId(), id); return ResponseEntity.ok(id); } @@ -92,6 +91,7 @@ public ResponseEntity> findAllBySemester() { @GetMapping("/sections") @ApiOperation(value = ApiDoc.SECTION_READ_ALL) + @RequiredLogin public ResponseEntity> getSections() { List sections = Arrays.stream(Section.values()) .map(Section::getName) @@ -99,39 +99,49 @@ public ResponseEntity> getSections() { return ResponseEntity.ok(sections); } - @PostMapping("/student-activity/{id}") + @PostMapping("/student-activity") @ApiOperation(value = ApiDoc.STUDENT_ACTIVITY_CREATE) - public ResponseEntity createStudentActivity(@PathVariable Long id, @RequestBody StudentActivityCURequest request) { - Long response = activityService.createStudentActivity(id, StudentActivityContentDto.of(request), ParticipantContentDto.of(request)); + @RequiredLogin + public ResponseEntity createStudentActivity(@StudentLogin LoginStudent loginStudent, @RequestBody StudentActivityCURequest request) { + Long response = activityService.createStudentActivity(loginStudent.getId(), StudentActivityContentDto.of(request), ParticipantContentDto.of(request)); return ResponseEntity.ok(response); } @PutMapping("/student-activity/{id}") @ApiOperation(value = ApiDoc.STUDENT_ACTIVITY_UPDATE) - public ResponseEntity updateStudentActivity(@PathVariable Long id, @RequestBody StudentActivityCURequest request) { - ActivityParticipantDto activityParticipantDto = activityService.updateStudentActivity(id, 1L, StudentActivityContentDto.of(request), ParticipantContentDto.of(request)); + @RequiredLogin + public ResponseEntity updateStudentActivity(@PathVariable Long id + , @RequestBody StudentActivityCURequest request + , @StudentLogin LoginStudent loginStudent + ) { + ActivityParticipantDto activityParticipantDto = activityService.updateStudentActivity(id, loginStudent.getId(), StudentActivityContentDto.of(request), ParticipantContentDto.of(request)); return ResponseEntity.ok(ActivityParticipantResponse.of(activityParticipantDto)); } - @GetMapping("/student-activities/{id}") + @GetMapping("/student-activities") @ApiOperation(value = ApiDoc.STUDENT_ACTIVITY_READ_SEMESTER) - public ResponseEntity> findParticipatedActivities(@PathVariable Long id, @RequestParam String semester, @RequestParam String section) { - // ToDo Student ID 관련해서는 나중에 Login 처리하기 - List responses = activityService.findAllParticipantActivites(id, semester, section) + @RequiredLogin + public ResponseEntity> findParticipatedActivities( + @StudentLogin LoginStudent loginStudent, + @RequestParam String semester, + @RequestParam String section) { + List responses = activityService.findAllParticipantActivites(loginStudent.getId(), semester, section) .stream() .map(ActivityParticipantResponse::of) .collect(Collectors.toList()); return ResponseEntity.ok(responses); } - @GetMapping("/studentactivity/{id}") + @GetMapping("/studentactivity") @ApiOperation(value = ApiDoc.STUDENT_MILEAGE_READ) - public ResponseEntity findActivtyByStudentId(@PathVariable Long id) { - return ResponseEntity.ok(mActivityService.findActivitiesByStudent(id)); + @RequiredLogin + public ResponseEntity findActivtyByStudentId(@StudentLogin LoginStudent loginStudent) { + return ResponseEntity.ok(mActivityService.findActivitiesByStudent(loginStudent.getId())); } @PutMapping("/activity/apply/{id}") @ApiOperation(value = ApiDoc.ACTIVITY_APPLY) + @RequiredLogin public ResponseEntity applyActivity(@PathVariable Long id) { activityService.apply(id); return ResponseEntity.ok(null); @@ -139,6 +149,7 @@ public ResponseEntity applyActivity(@PathVariable Long id) { @PutMapping("/activity/approve/{id}") @ApiOperation(value = ApiDoc.ACTIVITY_APPROVE) + @RequiredManagerLogin public ResponseEntity approveActivity(@PathVariable Long id, @RequestBody ActivityApproveRequest request) { activityService.approve(id, request.getWeight()); return ResponseEntity.ok(null); @@ -146,18 +157,22 @@ public ResponseEntity approveActivity(@PathVariable Long id, @RequestBody @PutMapping("/activity/reject/{id}") @ApiOperation(value = ApiDoc.ACTIVITY_REJECT) + @RequiredManagerLogin public ResponseEntity rejectActivity(@PathVariable Long id) { activityService.reject(id); return ResponseEntity.ok(null); } - @GetMapping("/activity-detail/{activityId}") @ApiOperation(value = ApiDoc.ACTIVITY_STUDENT_DETAIL) - public ResponseEntity findParticipantActivityById(@PathVariable Long activityId) { - // ToDo StudentId 는 나중에 로그인으로 바꿈 - return ResponseEntity.ok(ActivityParticipantResponse.of(activityService.findParticipantActivityById(1L, activityId))); + @RequiredLogin + public ResponseEntity findParticipantActivityById( + @PathVariable Long activityId, + @StudentLogin LoginStudent loginStudent) { + + ActivityParticipantDto dto = activityService.findParticipantActivityById(loginStudent.getId(), activityId); + return ResponseEntity.ok(ActivityParticipantResponse.of(dto)); } } diff --git a/src/main/java/com/server/hispath/activity/presentation/ChartController.java b/src/main/java/com/server/hispath/activity/presentation/ChartController.java new file mode 100644 index 0000000..7b84261 --- /dev/null +++ b/src/main/java/com/server/hispath/activity/presentation/ChartController.java @@ -0,0 +1,137 @@ +package com.server.hispath.activity.presentation; + +import java.util.List; +import java.util.stream.Collectors; + +import com.server.hispath.activity.application.ActivityService; +import com.server.hispath.activity.application.dto.ChartGradeDataDto; +import com.server.hispath.activity.application.dto.ChartSearchRequestDto; +import com.server.hispath.activity.presentation.response.chart.*; +import com.server.hispath.auth.domain.LoginStudent; +import com.server.hispath.auth.domain.RequiredLogin; +import com.server.hispath.auth.domain.RequiredManagerLogin; +import com.server.hispath.auth.domain.StudentLogin; +import com.server.hispath.docs.ApiDoc; +import com.server.hispath.scholarship.application.ScholarshipService; + +import org.springframework.http.ResponseEntity; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RequestParam; +import org.springframework.web.bind.annotation.RestController; + +import io.swagger.annotations.ApiOperation; + +import lombok.RequiredArgsConstructor; + +@RestController +@RequiredArgsConstructor +@RequestMapping("/api") +public class ChartController { + + private final ActivityService activityService; + private final ScholarshipService scholarshipService; + + @GetMapping("/chart/mileage") + @ApiOperation(value = ApiDoc.CHART_MILEAGE_CATEGORY) + @RequiredLogin + public ResponseEntity> getChartMileageData( + String semester, + @RequestParam(required = false) Integer grade, + @RequestParam(required = false) String department, + @StudentLogin LoginStudent loginStudent + ) { + + ChartSearchRequestDto chartSearchRequestDto = new ChartSearchRequestDto(semester, grade, department); + List responses = activityService.getChartDatasByCategory(loginStudent.getId(), chartSearchRequestDto) + .stream() + .map(ChartDataResponse::of) + .collect(Collectors.toList()); + return ResponseEntity.ok(responses); + } + + @GetMapping("/chart/popularity") + @ApiOperation(value = ApiDoc.CHART_MILEAGE_POPULARITY_CATEGORY) + @RequiredLogin + public ResponseEntity> getChartMileagePopularity( + String semester, + @RequestParam(required = false) Integer grade, + @RequestParam(required = false) String department, + @StudentLogin LoginStudent loginStudent + ) { + + ChartSearchRequestDto chartSearchRequestDto = new ChartSearchRequestDto(semester, grade, department); + List responses = activityService.getChartTotalDatasByCategory(loginStudent.getId(), chartSearchRequestDto) + .stream() + .map(ChartCategoryResponse::of) + .collect(Collectors.toList()); + return ResponseEntity.ok(responses); + } + + @GetMapping("/chart/rank") + @ApiOperation(value = ApiDoc.CHART_MILEAGE_RANK) + @RequiredLogin + public ResponseEntity getChartMileageRank( + String semester, + @RequestParam(required = false) Integer grade, + @RequestParam(required = false) String department, + @StudentLogin LoginStudent loginStudent + ) { + + ChartSearchRequestDto chartSearchRequestDto = new ChartSearchRequestDto(semester, grade, department); + return ResponseEntity.ok(ChartRankResponse.of(scholarshipService.getRankChartData(loginStudent.getId(), chartSearchRequestDto))); + } + + @GetMapping("/chart/timeline") + @ApiOperation(value = ApiDoc.CHART_MILEAGE_TIMELINE) + @RequiredLogin + public ResponseEntity> getChartMileageTimeline(@StudentLogin LoginStudent loginStudent) { + + List responses = scholarshipService.getChartTimelines(loginStudent.getId()) + .stream() + .map(ChartTimelineResponse::of) + .collect(Collectors.toList()); + return ResponseEntity.ok(responses); + } + + @GetMapping("/chart/weight") + @ApiOperation(value = ApiDoc.CHART_SCHOLARSHIP_WEIGHT) + @RequiredManagerLogin + public ResponseEntity> getChartWeightDistribution(@RequestParam String semester) { + + return ResponseEntity.ok(scholarshipService.getChartWeightDistribution(semester)); + } + + @GetMapping("/chart/grade") + @ApiOperation(value = ApiDoc.CHART_SCHOLARSHIP_GRADE) + @RequiredManagerLogin + public ResponseEntity> getChartGradeDistribution(@RequestParam String semester) { + + List responses = scholarshipService.getChartGradeDistribution(semester) + .stream() + .map(ChartGradeResponse::of) + .collect(Collectors.toList()); + + return ResponseEntity.ok(responses); + } + + @GetMapping("/chart/department") + @ApiOperation(value = ApiDoc.CHART_SCHOLARSHIP_DEPARTMENT) + @RequiredManagerLogin + public ResponseEntity> getChartDepartmentDistribution(@RequestParam String semester) { + + List responses = scholarshipService.getChartDepartmentDistribution(semester) + .stream() + .map(ChartDepartmentResponse::of) + .collect(Collectors.toList()); + return ResponseEntity.ok(responses); + } + + @GetMapping("/chart/activities") + @ApiOperation(value = ApiDoc.CHART_STUDENT_ACTIVITY) +// @RequiredLogin +// public ResponseEntity> getActivityChartDatas(@StudentLogin LoginStudent loginStudent, @RequestParam String semester) { + public ResponseEntity> getActivityChartDatas(@RequestParam String semester) { + return ResponseEntity.ok(activityService.getChartTotalDatasBySections(6L, semester)); + } +} diff --git a/src/main/java/com/server/hispath/activity/presentation/MActivityController.java b/src/main/java/com/server/hispath/activity/presentation/MActivityController.java index 78f184d..bf7df9a 100644 --- a/src/main/java/com/server/hispath/activity/presentation/MActivityController.java +++ b/src/main/java/com/server/hispath/activity/presentation/MActivityController.java @@ -1,6 +1,7 @@ package com.server.hispath.activity.presentation; import java.util.List; +import java.util.Objects; import java.util.stream.Collectors; import com.server.hispath.activity.application.ActivityService; @@ -9,7 +10,11 @@ import com.server.hispath.activity.presentation.request.MActivityCURequest; import com.server.hispath.activity.presentation.request.MParticipantRequest; import com.server.hispath.activity.presentation.request.MStudentRegisterRequest; -import com.server.hispath.activity.presentation.response.*; +import com.server.hispath.activity.presentation.response.ActivityResponse; +import com.server.hispath.activity.presentation.response.AllMActivityParticipantResponse; +import com.server.hispath.activity.presentation.response.MActivityParticipantResponse; +import com.server.hispath.activity.presentation.response.SemesterResponse; +import com.server.hispath.auth.domain.*; import com.server.hispath.docs.ApiDoc; import com.server.hispath.student.application.StudentService; import com.server.hispath.student.application.dto.StudentSimpleRefDto; @@ -34,6 +39,7 @@ public class MActivityController { @PostMapping("/mileage") @ApiOperation(value = ApiDoc.MILEAGE_CREATE) + @RequiredSuperManagerLogin public ResponseEntity create(@RequestBody MActivityCURequest request) { Long id = mActivityService.create(MActivityContentDto.of(request)); return ResponseEntity.ok(id); @@ -41,13 +47,15 @@ public ResponseEntity create(@RequestBody MActivityCURequest request) { @PostMapping("/mileages") @ApiOperation(value = ApiDoc.MILEAGES_CREATE) - public ResponseEntity createMActivites(MultipartFile file) throws Exception { + @RequiredSuperManagerLogin + public ResponseEntity createMActivites(@RequestPart(value = "file") MultipartFile file) throws Exception { mActivityService.createAll(ExcelManager.getMActivities(ExcelManager.extract(file))); return ResponseEntity.ok(null); } @PutMapping("/mileage/{id}") @ApiOperation(value = ApiDoc.MILEAGE_UPDATE) + @RequiredSuperManagerLogin public ResponseEntity update(@PathVariable Long id, @RequestBody MActivityCURequest request) { ActivityDto dto = mActivityService.update(id, MActivityContentDto.of(request)); ActivityResponse response = ActivityResponse.from(dto); @@ -57,6 +65,7 @@ public ResponseEntity update(@PathVariable Long id, @RequestBo @DeleteMapping("/mileage/{id}") @ApiOperation(value = ApiDoc.MILEAGE_DELETE) + @RequiredSuperManagerLogin public ResponseEntity delete(@PathVariable Long id) { activityService.delete(id); return ResponseEntity.ok(id); @@ -64,6 +73,7 @@ public ResponseEntity delete(@PathVariable Long id) { @GetMapping("/mileage/semester") @ApiOperation(value = ApiDoc.MILEAGE_READ_SEMESTER) + @RequiredManagerLogin public ResponseEntity> findAllBySemester(@RequestParam String semester) { List activityDtos = mActivityService.findAllBySemester(semester); List responses = activityDtos.stream() @@ -74,7 +84,9 @@ public ResponseEntity> findAllBySemester(@RequestParam St @GetMapping("/mileages") @ApiOperation(value = ApiDoc.MILEAGE_READ_ALL) + @RequiredManagerLogin public ResponseEntity> findAll() { + List responses = mActivityService.findAll() .stream() .map(ActivityResponse::from) @@ -84,6 +96,7 @@ public ResponseEntity> findAll() { @PostMapping("/mileage/students") @ApiOperation(value = ApiDoc.MILEAGE_REGISTER_STUDENTS) + @RequiredManagerLogin public ResponseEntity registerStudents(@RequestPart(value = "file", required = false) MultipartFile file, @RequestPart(value = "activityId") Long activityId) throws Exception { @@ -94,6 +107,7 @@ public ResponseEntity registerStudents(@RequestPart(value = "file", requir @PostMapping("/mileage/student") @ApiOperation(value = ApiDoc.MILEAGE_REGISTER_STUDENT) + @RequiredManagerLogin public ResponseEntity registerStudent(@RequestBody MStudentRegisterRequest request) { studentService.registerParticipant(request.getActivityId(), StudentSimpleRefDto.of(request)); @@ -102,6 +116,7 @@ public ResponseEntity registerStudent(@RequestBody MStudentRegisterRequest @DeleteMapping("/mileage/student") @ApiOperation(value = ApiDoc.ACTIVITY_STUDENT_DELETE) + @RequiredManagerLogin public ResponseEntity deleteParticipant(@RequestBody MParticipantRequest request) { mActivityService.deleteParticipant(request.getStudentId(), request.getActivityId()); return ResponseEntity.ok(null); @@ -113,43 +128,63 @@ public ResponseEntity findMileageActivityById(@PathVariable return ResponseEntity.ok(mActivityService.findDetailActivityInfo(id)); } - @GetMapping("/studentmileage/{id}") + @GetMapping("/studentmileage") @ApiOperation(value = ApiDoc.STUDENT_MILEAGE_READ) - public ResponseEntity findActivtyByStudentId(@PathVariable Long id) { - return ResponseEntity.ok(mActivityService.findActivitiesByStudent(id)); + @RequiredLogin + public ResponseEntity findActivtyByStudentId(@StudentLogin LoginStudent loginStudent) { + return ResponseEntity.ok(mActivityService.findActivitiesByStudent(loginStudent.getId())); } - @GetMapping("/semester/{id}") + @GetMapping("/student/semester") @ApiOperation(value = ApiDoc.STUDENT_READ_SEMESTER) - public ResponseEntity> findSemestersById(@PathVariable Long id) { - List semesters = mActivityService.findSemestersById(id); + @RequiredLogin + public ResponseEntity> findSemestersById(@StudentLogin LoginStudent loginStudent) { + List semesters = mActivityService.findSemestersById(loginStudent.getId()); List responses = semesters.stream() - .map(SemesterResponse::from) - .collect(Collectors.toList()); + .map(SemesterResponse::from) + .collect(Collectors.toList()); return ResponseEntity.ok(responses); } - - @GetMapping("/student-mactivities/{id}") + @GetMapping("/student-mactivities") @ApiOperation(value = ApiDoc.STUDENT_ACTIVITY_READ_SEMESTER) - public ResponseEntity> findParticipatedActivities(@PathVariable Long id, @RequestParam String semester, @RequestParam String category) { - List responses = mActivityService.findAllParticipantActivities(id, semester, category) - .stream() - .map(MActivityParticipantResponse::of) - .collect(Collectors.toList()); + @RequiredLogin + public ResponseEntity> findParticipatedActivities( + @StudentLogin LoginStudent loginStudent, + @RequestParam String semester, + @RequestParam String category) { + List responses = mActivityService.findAllParticipantActivities(loginStudent.getId(), semester, category) + .stream() + .map(MActivityParticipantResponse::of) + .collect(Collectors.toList()); return ResponseEntity.ok(responses); } - @GetMapping("/student-allmactivities/{id}") + @GetMapping("/student-allmactivities") @ApiOperation(value = ApiDoc.STUDENT_ACTIVITY_READ_PARTICIPATE) - public ResponseEntity> findAllParticipatedActivities(@PathVariable Long id, @RequestParam String semester, @RequestParam String category) { - List responses = mActivityService.findParticipatedActivities(id, semester, category) - .stream() - .map(AllMActivityParticipantResponse::of) - .collect(Collectors.toList()); + @RequiredLogin + public ResponseEntity> findAllParticipatedActivities( + @StudentLogin LoginStudent loginStudent, + @RequestParam String semester, + @RequestParam String category) { + + List responses; + if (Objects.equals(category, "참여여부")) { + responses = mActivityService.findParticipatedActivities(loginStudent.getId(), semester, "ALL") + .stream() + .filter(AllMActivityParticipantDto::isParticipated) + .map(AllMActivityParticipantResponse::of) + .collect(Collectors.toList()); + } else { + responses = mActivityService.findParticipatedActivities(loginStudent.getId(), semester, category) + .stream() + .map(AllMActivityParticipantResponse::of) + .collect(Collectors.toList()); + } return ResponseEntity.ok(responses); } + } \ No newline at end of file diff --git a/src/main/java/com/server/hispath/activity/presentation/response/AllMActivityParticipantResponse.java b/src/main/java/com/server/hispath/activity/presentation/response/AllMActivityParticipantResponse.java index bb207fa..f638c7a 100644 --- a/src/main/java/com/server/hispath/activity/presentation/response/AllMActivityParticipantResponse.java +++ b/src/main/java/com/server/hispath/activity/presentation/response/AllMActivityParticipantResponse.java @@ -15,10 +15,12 @@ public class AllMActivityParticipantResponse { private String name; private String remark; private String category; - private boolean participated; + + private boolean participated; public static AllMActivityParticipantResponse of(AllMActivityParticipantDto dto) { return new AllMActivityParticipantResponse(dto.getId(), dto.getSemester(), dto.getName(), dto.getRemark(), - dto.getCategory().getName(), dto.getParticipated()); + dto.getCategory().getName(), dto.isParticipated()); + } } \ No newline at end of file diff --git a/src/main/java/com/server/hispath/activity/presentation/response/MileageChartResponse.java b/src/main/java/com/server/hispath/activity/presentation/response/MileageChartResponse.java new file mode 100644 index 0000000..90a02e4 --- /dev/null +++ b/src/main/java/com/server/hispath/activity/presentation/response/MileageChartResponse.java @@ -0,0 +1,18 @@ +package com.server.hispath.activity.presentation.response; + +import java.util.ArrayList; +import java.util.List; + +import com.server.hispath.activity.presentation.response.chart.ChartDataResponse; + +import lombok.AllArgsConstructor; +import lombok.Getter; +import lombok.NoArgsConstructor; + +@Getter +@NoArgsConstructor +@AllArgsConstructor +public class MileageChartResponse { + + private List chartDatas = new ArrayList<>(); +} diff --git a/src/main/java/com/server/hispath/activity/presentation/response/chart/ChartCategoryResponse.java b/src/main/java/com/server/hispath/activity/presentation/response/chart/ChartCategoryResponse.java new file mode 100644 index 0000000..47dde89 --- /dev/null +++ b/src/main/java/com/server/hispath/activity/presentation/response/chart/ChartCategoryResponse.java @@ -0,0 +1,23 @@ +package com.server.hispath.activity.presentation.response.chart; + +import com.server.hispath.activity.application.dto.chart.ChartCategoryDto; + +import lombok.AllArgsConstructor; +import lombok.Getter; +import lombok.NoArgsConstructor; + +@Getter +@NoArgsConstructor +@AllArgsConstructor +public class ChartCategoryResponse { + private Long categoryId; + private String categoryName; + private Long myCnt; + private Double averageCnt; + private Long totalCategoryCnt; + + public static ChartCategoryResponse of(ChartCategoryDto dto) { + return new ChartCategoryResponse(dto.getCategory().getId(), dto.getCategory().getName(), + dto.getMyCnt(), dto.getAverageCnt(), dto.getTotalCnt()); + } +} diff --git a/src/main/java/com/server/hispath/activity/presentation/response/chart/ChartDataResponse.java b/src/main/java/com/server/hispath/activity/presentation/response/chart/ChartDataResponse.java new file mode 100644 index 0000000..a98b903 --- /dev/null +++ b/src/main/java/com/server/hispath/activity/presentation/response/chart/ChartDataResponse.java @@ -0,0 +1,23 @@ +package com.server.hispath.activity.presentation.response.chart; + +import com.server.hispath.activity.application.dto.chart.ChartDataDto; + +import lombok.AllArgsConstructor; +import lombok.Getter; +import lombok.NoArgsConstructor; + +@Getter +@NoArgsConstructor +@AllArgsConstructor +public class ChartDataResponse { + + private Long categoryId; + private String categoryName; + private Long myCnt; + private Double averageCnt; + + public static ChartDataResponse of(ChartDataDto dto) { + return new ChartDataResponse(dto.getCategory().getId(), dto.getCategory().getName(), + dto.getMyCnt(), dto.getAverageCnt()); + } +} diff --git a/src/main/java/com/server/hispath/activity/presentation/response/chart/ChartDepartmentResponse.java b/src/main/java/com/server/hispath/activity/presentation/response/chart/ChartDepartmentResponse.java new file mode 100644 index 0000000..d1eaa31 --- /dev/null +++ b/src/main/java/com/server/hispath/activity/presentation/response/chart/ChartDepartmentResponse.java @@ -0,0 +1,19 @@ +package com.server.hispath.activity.presentation.response.chart; + +import com.server.hispath.activity.application.dto.ChartDepartmentDataDto; + +import lombok.AllArgsConstructor; +import lombok.Getter; +import lombok.NoArgsConstructor; + +@Getter +@NoArgsConstructor +@AllArgsConstructor +public class ChartDepartmentResponse { + private String department; + private Long cnt; + + public static ChartDepartmentResponse of(ChartDepartmentDataDto dto) { + return new ChartDepartmentResponse(dto.getDepartment(), dto.getCnt()); + } +} diff --git a/src/main/java/com/server/hispath/activity/presentation/response/chart/ChartGradeResponse.java b/src/main/java/com/server/hispath/activity/presentation/response/chart/ChartGradeResponse.java new file mode 100644 index 0000000..60da603 --- /dev/null +++ b/src/main/java/com/server/hispath/activity/presentation/response/chart/ChartGradeResponse.java @@ -0,0 +1,19 @@ +package com.server.hispath.activity.presentation.response.chart; + +import com.server.hispath.activity.application.dto.ChartGradeDataDto; + +import lombok.AllArgsConstructor; +import lombok.Getter; +import lombok.NoArgsConstructor; + +@Getter +@NoArgsConstructor +@AllArgsConstructor +public class ChartGradeResponse { + private int grade; + private Long cnt; + + public static ChartGradeResponse of(ChartGradeDataDto dto) { + return new ChartGradeResponse(dto.getGrade(), dto.getCnt()); + } +} diff --git a/src/main/java/com/server/hispath/activity/presentation/response/chart/ChartRankResponse.java b/src/main/java/com/server/hispath/activity/presentation/response/chart/ChartRankResponse.java new file mode 100644 index 0000000..707d999 --- /dev/null +++ b/src/main/java/com/server/hispath/activity/presentation/response/chart/ChartRankResponse.java @@ -0,0 +1,20 @@ +package com.server.hispath.activity.presentation.response.chart; + +import com.server.hispath.activity.application.dto.chart.ChartRankDto; + +import lombok.AllArgsConstructor; +import lombok.Getter; +import lombok.NoArgsConstructor; + +@Getter +@NoArgsConstructor +@AllArgsConstructor +public class ChartRankResponse { + private int myTotalWeight; + private double avgTotalWeight; + private int maxTotalWeight; + + public static ChartRankResponse of(ChartRankDto dto){ + return new ChartRankResponse(dto.getMyTotalWeight(), dto.getAvgTotalWeight(), dto.getMaxTotalWeight()); + } +} diff --git a/src/main/java/com/server/hispath/activity/presentation/response/chart/ChartSectionResponse.java b/src/main/java/com/server/hispath/activity/presentation/response/chart/ChartSectionResponse.java new file mode 100644 index 0000000..cc945e2 --- /dev/null +++ b/src/main/java/com/server/hispath/activity/presentation/response/chart/ChartSectionResponse.java @@ -0,0 +1,15 @@ +package com.server.hispath.activity.presentation.response.chart; + +import lombok.AllArgsConstructor; +import lombok.Getter; +import lombok.NoArgsConstructor; + +@Getter +@NoArgsConstructor +@AllArgsConstructor +public class ChartSectionResponse { + + private String section; + private Long myCnt; + private Double avgCnt; +} diff --git a/src/main/java/com/server/hispath/activity/presentation/response/chart/ChartTimelineResponse.java b/src/main/java/com/server/hispath/activity/presentation/response/chart/ChartTimelineResponse.java new file mode 100644 index 0000000..8c97788 --- /dev/null +++ b/src/main/java/com/server/hispath/activity/presentation/response/chart/ChartTimelineResponse.java @@ -0,0 +1,19 @@ +package com.server.hispath.activity.presentation.response.chart; + +import com.server.hispath.activity.application.dto.ChartTimelineDto; + +import lombok.AllArgsConstructor; +import lombok.Getter; +import lombok.NoArgsConstructor; + +@Getter +@NoArgsConstructor +@AllArgsConstructor +public class ChartTimelineResponse { + private String semester; + private int totalWeight; + + public static ChartTimelineResponse of(ChartTimelineDto dto) { + return new ChartTimelineResponse(dto.getSemester(), dto.getTotalWeight()); + } +} diff --git a/src/main/java/com/server/hispath/auth/application/AuthService.java b/src/main/java/com/server/hispath/auth/application/AuthService.java index 5101ca0..6d54bee 100644 --- a/src/main/java/com/server/hispath/auth/application/AuthService.java +++ b/src/main/java/com/server/hispath/auth/application/AuthService.java @@ -1,5 +1,6 @@ package com.server.hispath.auth.application; +import java.time.LocalDate; import java.util.Objects; import java.util.Optional; @@ -15,7 +16,9 @@ import com.server.hispath.exception.oauth.InvalidTokenException; import com.server.hispath.exception.oauth.NotHandongEmailException; import com.server.hispath.manager.application.ManagerService; +import com.server.hispath.manager.domain.DailyInfo; import com.server.hispath.manager.domain.Manager; +import com.server.hispath.manager.domain.repository.DailyInfoRepository; import com.server.hispath.manager.domain.repository.ManagerRepository; import com.server.hispath.student.application.StudentService; import com.server.hispath.student.domain.Student; @@ -36,36 +39,47 @@ public class AuthService { private final StudentService studentService; private final ManagerRepository managerRepository; private final ManagerService managerService; + private final DailyInfoRepository dailyInfoRepository; - public void validateEamil(String email) { + public void validateEmail(String email) { String domain = email.split("@")[1]; - if(!Objects.equals(domain, "handong.ac.kr")){ + if (!Objects.equals(domain, "handong.ac.kr")) { throw new NotHandongEmailException(); - }; + } + ; } - public OauthUserInfo getUserInfo(LoginRequestDto loginRequestDto) { + public OauthUserInfo getStudentInfo(LoginRequestDto loginRequestDto) { String oauthProvider = loginRequestDto.getOauthProvider(); - return oauthHandler.getUserInfoFromCode(oauthProvider, loginRequestDto.getCode()); + return oauthHandler.getUserInfoFromCode(oauthProvider, loginRequestDto.getCode(), Member.STUDENT); } - @Transactional(readOnly = true) + public OauthUserInfo getManagerInfo(LoginRequestDto loginRequestDto) { + String oauthProvider = loginRequestDto.getOauthProvider(); + return oauthHandler.getUserInfoFromCode(oauthProvider, loginRequestDto.getCode(), Member.MANAGER); + } + + @Transactional public LoginResponseDto studentLogin(LoginRequestDto loginRequestDto) { - OauthUserInfo userInfo = getUserInfo(loginRequestDto); + OauthUserInfo userInfo = getStudentInfo(loginRequestDto); String email = userInfo.getEmail(); - validateEamil(email); +// validateEmail(email); Optional student = studentRepository.findByEmail(email); - return student.map(value -> new LoginResponseDto(false, - jwtProvider.createToken(String.valueOf(value.getId()), Member.STUDENT))) + + return student.map(value -> { + addLoginCount(); + return new LoginResponseDto(false, + jwtProvider.createToken(String.valueOf(value.getId()), Member.STUDENT)); + }) .orElseGet(() -> new LoginResponseDto(true, null)); } @Transactional(readOnly = true) public LoginResponseDto managerLogin(LoginRequestDto loginRequestDto) { - OauthUserInfo userInfo = getUserInfo(loginRequestDto); + OauthUserInfo userInfo = getManagerInfo(loginRequestDto); String email = userInfo.getEmail(); Optional manager = managerRepository.findByEmail(email); - return manager.map(value -> new LoginResponseDto(value.isApproved(), + return manager.map(value -> new LoginResponseDto(!value.isApproved(), jwtProvider.createToken(String.valueOf(value.getId()), Member.MANAGER))) .orElseGet(() -> new LoginResponseDto(true, null)); @@ -96,28 +110,49 @@ public LoginManager findManagerByToken(String token) { } - @Transactional(readOnly = true) public void checkSuperManagerByToken(String token) { Manager manager = findSuperManagerByToken(token); - if(!manager.isSuperManager()) throw new ManagerNoAuthorizationException(); + if (!manager.isSuperManager()) + throw new ManagerNoAuthorizationException(); } @Transactional(readOnly = true) - public LoginManager getSuperManagerId(String token){ + public LoginManager getSuperManagerId(String token) { Manager manager = findSuperManagerByToken(token); return new LoginManager(manager.getId()); } @Transactional(readOnly = true) - public Manager findSuperManagerByToken(String token){ + public Manager findSuperManagerByToken(String token) { if (!jwtProvider.isValidToken(token, Member.SUPER_MANAGER)) { throw new InvalidTokenException(); } String payLoad = jwtProvider.getPayLoad(token, Member.SUPER_MANAGER); Long id = Long.parseLong(payLoad); Manager manager = managerService.findById(id); - if(!manager.isSuperManager()) throw new ManagerNoAuthorizationException(); + if (!manager.isSuperManager()) + throw new ManagerNoAuthorizationException(); return manager; } + + private void addLoginCount() { + Optional dailyInfo = dailyInfoRepository.findFirstByDate(LocalDate.now()); + if (dailyInfo.isPresent()) { + dailyInfo.get().login(); + return; + } + DailyInfo newDailyInfo = new DailyInfo(); + dailyInfoRepository.save(newDailyInfo); + } + + @Transactional(readOnly = true) + public String getStudentGuestToken(){ + return jwtProvider.createToken(String.valueOf(10L), Member.STUDENT); + } + + @Transactional(readOnly = true) + public String getManagerGuestToken(){ + return jwtProvider.createToken(String.valueOf(10L), Member.MANAGER); + } } diff --git a/src/main/java/com/server/hispath/auth/domain/OauthProperties.java b/src/main/java/com/server/hispath/auth/domain/OauthProperties.java index b92c663..f1d579e 100644 --- a/src/main/java/com/server/hispath/auth/domain/OauthProperties.java +++ b/src/main/java/com/server/hispath/auth/domain/OauthProperties.java @@ -20,7 +20,8 @@ public class OauthProperties { public static class User { private String clientId; private String clientSecret; - private String redirectUri; + private String studentRedirectUri; + private String managerRedirectUri; } @Getter diff --git a/src/main/java/com/server/hispath/auth/domain/OauthProvider.java b/src/main/java/com/server/hispath/auth/domain/OauthProvider.java index eacee41..57f6e2e 100644 --- a/src/main/java/com/server/hispath/auth/domain/OauthProvider.java +++ b/src/main/java/com/server/hispath/auth/domain/OauthProvider.java @@ -8,11 +8,13 @@ public class OauthProvider { private final String clientId; private final String clientSecret; - private final String redirectUrl; + private final String studentRedirectUrl; + private final String managerRedirectUrl; private final String tokenUrl; private final String userInfoUrl; public OauthProvider(OauthProperties.User user, OauthProperties.Provider provider) { - this(user.getClientId(), user.getClientSecret(), user.getRedirectUri(), provider.getTokenUri(), provider.getUserInfoUri()); + this(user.getClientId(), user.getClientSecret(), user.getStudentRedirectUri(), user.getManagerRedirectUri(), + provider.getTokenUri(), provider.getUserInfoUri()); } } diff --git a/src/main/java/com/server/hispath/auth/infrastructure/ApiRequester.java b/src/main/java/com/server/hispath/auth/infrastructure/ApiRequester.java index c5d9873..29810a8 100644 --- a/src/main/java/com/server/hispath/auth/infrastructure/ApiRequester.java +++ b/src/main/java/com/server/hispath/auth/infrastructure/ApiRequester.java @@ -4,6 +4,7 @@ import java.util.Collections; import java.util.Map; +import com.server.hispath.auth.domain.Member; import com.server.hispath.auth.domain.OauthProvider; import com.server.hispath.exception.oauth.GetAccessTokenException; import com.server.hispath.exception.oauth.GetUserInfoException; @@ -20,12 +21,12 @@ public class ApiRequester { - public Map getUserInfo(String code, OauthProvider oauthProvider) { - String token = getToken(code, oauthProvider); + public Map getUserInfo(String code, OauthProvider oauthProvider, Member member) { + String token = getToken(code, oauthProvider, member); return getUserInfoByToken(token, oauthProvider.getUserInfoUrl()); } - private String getToken(String code, OauthProvider oauthProvider) { + private String getToken(String code, OauthProvider oauthProvider, Member member) { Map responseBody = WebClient.create() .post() .uri(oauthProvider.getTokenUrl()) @@ -34,7 +35,7 @@ private String getToken(String code, OauthProvider oauthProvider) { header.setAccept(Collections.singletonList(MediaType.APPLICATION_JSON)); header.setAcceptCharset(Collections.singletonList(StandardCharsets.UTF_8)); }) - .bodyValue(tokenRequest(code, oauthProvider)) + .bodyValue(tokenRequest(code, oauthProvider, member)) .retrieve() .onStatus(HttpStatus::isError, response -> response.bodyToMono(String.class) @@ -49,11 +50,20 @@ private String getToken(String code, OauthProvider oauthProvider) { return responseBody.get("access_token").toString(); } - private MultiValueMap tokenRequest(String code, OauthProvider oauthProvider) { + private String getRedirectUrlByMember(Member member, OauthProvider oauthProvider) { + + if (Member.isStudent(member)) { + return oauthProvider.getStudentRedirectUrl(); + } + return oauthProvider.getManagerRedirectUrl(); + + } + + private MultiValueMap tokenRequest(String code, OauthProvider oauthProvider, Member member) { MultiValueMap formData = new LinkedMultiValueMap<>(); formData.add("code", code); formData.add("grant_type", "authorization_code"); - formData.add("redirect_uri", oauthProvider.getRedirectUrl()); + formData.add("redirect_uri", getRedirectUrlByMember(member, oauthProvider)); formData.add("client_id", oauthProvider.getClientId()); formData.add("client_secret", oauthProvider.getClientSecret()); return formData; @@ -73,10 +83,10 @@ private static Map getUserInfoByToken(String token, String userI .headers(httpHeaders -> httpHeaders.setBearerAuth(token)) .retrieve() .onStatus(HttpStatus::isError, response -> - response.bodyToMono(String.class) - .flatMap(error -> Mono.error(new UnableToGetOauthResponseException(error)))) + response.bodyToMono(String.class) + .flatMap(error -> Mono.error(new UnableToGetOauthResponseException(error)))) .bodyToMono(new ParameterizedTypeReference>() { - }) + }) .flux() .toStream() .findFirst() diff --git a/src/main/java/com/server/hispath/auth/infrastructure/JwtProvider.java b/src/main/java/com/server/hispath/auth/infrastructure/JwtProvider.java index f8e83eb..f4272af 100644 --- a/src/main/java/com/server/hispath/auth/infrastructure/JwtProvider.java +++ b/src/main/java/com/server/hispath/auth/infrastructure/JwtProvider.java @@ -54,7 +54,7 @@ public boolean validateBothToken(String token){ try{ validateToken(token, Member.STUDENT); return true; - } catch (JwtException | IllegalArgumentException e){ + } catch (InvalidTokenException | JwtException | IllegalArgumentException e){ try{ validateToken(token, Member.MANAGER); return true; diff --git a/src/main/java/com/server/hispath/auth/infrastructure/OauthHandler.java b/src/main/java/com/server/hispath/auth/infrastructure/OauthHandler.java index 1a50217..9403270 100644 --- a/src/main/java/com/server/hispath/auth/infrastructure/OauthHandler.java +++ b/src/main/java/com/server/hispath/auth/infrastructure/OauthHandler.java @@ -2,6 +2,7 @@ import java.util.Map; +import com.server.hispath.auth.domain.Member; import com.server.hispath.auth.domain.OauthAttributes; import com.server.hispath.auth.domain.OauthProvider; import com.server.hispath.auth.domain.OauthUserInfo; @@ -14,9 +15,9 @@ public class OauthHandler { private final Map oauthProviders; private final ApiRequester apiRequester; - public OauthUserInfo getUserInfoFromCode(String oauthProvider, String code) { + public OauthUserInfo getUserInfoFromCode(String oauthProvider, String code, Member member) { OauthProvider oauth = getOauthProvider(oauthProvider); - Map attributes = apiRequester.getUserInfo(code, oauth); + Map attributes = apiRequester.getUserInfo(code, oauth, member); return OauthAttributes.extract(oauthProvider, attributes); } diff --git a/src/main/java/com/server/hispath/auth/presentation/AuthController.java b/src/main/java/com/server/hispath/auth/presentation/AuthController.java index 037c3ab..3e4c5aa 100644 --- a/src/main/java/com/server/hispath/auth/presentation/AuthController.java +++ b/src/main/java/com/server/hispath/auth/presentation/AuthController.java @@ -29,4 +29,16 @@ public ResponseEntity loginManager(@PathVariable String oauthProv LoginResponseDto loginResponseDto = authService.managerLogin(new LoginRequestDto(oauthProvider, code)); return ResponseEntity.ok(TokenResponse.from(loginResponseDto)); } + + @GetMapping("/auth/login-student/guest/token") + public ResponseEntity loginGuestStudent() { + + return ResponseEntity.ok(new TokenResponse(false, authService.getStudentGuestToken())); + } + + @GetMapping("/auth/login-manager/guest/token") + public ResponseEntity loginGuestManager() { + + return ResponseEntity.ok(new TokenResponse(false, authService.getManagerGuestToken())); + } } \ No newline at end of file diff --git a/src/main/java/com/server/hispath/auth/presentation/LoginInterceptor.java b/src/main/java/com/server/hispath/auth/presentation/LoginInterceptor.java index bdc7d5d..ef81759 100644 --- a/src/main/java/com/server/hispath/auth/presentation/LoginInterceptor.java +++ b/src/main/java/com/server/hispath/auth/presentation/LoginInterceptor.java @@ -36,19 +36,20 @@ public boolean preHandle(HttpServletRequest request, HttpServletResponse respons jwtProvider.validateToken(token, Member.STUDENT); } else if (handlerMethod.hasMethodAnnotation(RequiredManagerLogin.class)) { jwtProvider.validateToken(token, Member.MANAGER); - } else if (handlerMethod.hasMethodAnnotation(RequiredLogin.class)){ + } else if (handlerMethod.hasMethodAnnotation(RequiredLogin.class)) { jwtProvider.validateBothToken(token); - } else if (handlerMethod.hasMethodAnnotation(RequiredSuperManagerLogin.class)){ + } else if (handlerMethod.hasMethodAnnotation(RequiredSuperManagerLogin.class)) { authService.checkSuperManagerByToken(token); } return true; } - private boolean hasAnnotation(HandlerMethod handlerMethod){ - return handlerMethod.hasMethodAnnotation(RequiredLogin.class) - || handlerMethod.hasMethodAnnotation(RequiredStudentLogin.class) - || handlerMethod.hasMethodAnnotation(RequiredManagerLogin.class); + private boolean hasAnnotation(HandlerMethod handlerMethod) { + return handlerMethod.hasMethodAnnotation(RequiredLogin.class) + || handlerMethod.hasMethodAnnotation(RequiredStudentLogin.class) + || handlerMethod.hasMethodAnnotation(RequiredManagerLogin.class) + || handlerMethod.hasMethodAnnotation(RequiredSuperManagerLogin.class); } private boolean isPreflight(HttpServletRequest request) { diff --git a/src/main/java/com/server/hispath/category/presentation/CategoryController.java b/src/main/java/com/server/hispath/category/presentation/CategoryController.java index 35cb52c..8cec7a0 100644 --- a/src/main/java/com/server/hispath/category/presentation/CategoryController.java +++ b/src/main/java/com/server/hispath/category/presentation/CategoryController.java @@ -3,6 +3,8 @@ import java.util.List; import java.util.stream.Collectors; +import com.server.hispath.auth.domain.RequiredLogin; +import com.server.hispath.auth.domain.RequiredManagerLogin; import com.server.hispath.category.application.CategoryService; import com.server.hispath.category.application.dto.CategoryCUDto; import com.server.hispath.category.application.dto.CategoryContentDto; @@ -27,6 +29,7 @@ public class CategoryController { @PostMapping("/category") @ApiOperation(value = ApiDoc.CATEGORY_CREATE) + @RequiredManagerLogin public ResponseEntity create(@RequestBody CategoryCURequest request) { Long savedId = categoryService.create(CategoryCUDto.of(request)); return ResponseEntity.ok(savedId); @@ -35,6 +38,7 @@ public ResponseEntity create(@RequestBody CategoryCURequest request) { @GetMapping("/category/{id}") @ApiOperation(value = ApiDoc.CATEGORY_READ) + @RequiredLogin public ResponseEntity find(@PathVariable Long id) { CategoryContentDto dto = categoryService.find(id); CategoryResponse response = CategoryResponse.from(dto); @@ -43,6 +47,7 @@ public ResponseEntity find(@PathVariable Long id) { @GetMapping("/categories") @ApiOperation(value = ApiDoc.CATEGORY_READ_ALL) + @RequiredLogin public ResponseEntity> findAll() { List dtos = categoryService.findAll(); List responses = dtos.stream() @@ -53,6 +58,7 @@ public ResponseEntity> findAll() { @PutMapping("/category/{id}") @ApiOperation(value = ApiDoc.CATEGORY_UPDATE) + @RequiredManagerLogin public ResponseEntity update(@PathVariable Long id, @RequestBody CategoryCURequest request) { CategoryContentDto dto = categoryService.update(id, CategoryCUDto.of(request)); CategoryResponse response = CategoryResponse.from(dto); @@ -62,6 +68,7 @@ public ResponseEntity update(@PathVariable Long id, @RequestBo @DeleteMapping("/category/{id}") @ApiOperation(value = ApiDoc.CATEGORY_DELETE) + @RequiredManagerLogin public ResponseEntity delete(@PathVariable Long id) { categoryService.delete(id); return ResponseEntity.ok(id); diff --git a/src/main/java/com/server/hispath/common/TestController.java b/src/main/java/com/server/hispath/common/TestController.java index d704f02..e8b226e 100644 --- a/src/main/java/com/server/hispath/common/TestController.java +++ b/src/main/java/com/server/hispath/common/TestController.java @@ -69,7 +69,7 @@ public ResponseEntity initAll() { saveManager(); saveNotice(); saveActivities(); - saveScholarship(); +// saveScholarship(); participant 실행 한 뒤 실행 // saveParticipant(); init all에 포함 금지! 따로 실행 // saveResumes(); return ResponseEntity.ok(null); @@ -158,37 +158,46 @@ public ResponseEntity initScholarship() { private void saveScholarship() { List students = studentRepository.findAll(); - List studentIds2022_2 = students.stream() - .map(Student::getId) - .collect(Collectors.toList()); - Collections.shuffle(studentIds2022_2); - int num2022_2 = getRandomNum(students.size() - 10, students.size()); - studentIds2022_2.subList(0, num2022_2) - .forEach(id -> { - scholarshipService.create(id, "2022-2"); - }); - - - List studentIds2022_1 = students.stream() + List studentIds = students.stream() .map(Student::getId) .collect(Collectors.toList()); - Collections.shuffle(studentIds2022_1); - int num2022_1 = getRandomNum(students.size() - 10, students.size()); - studentIds2022_1.subList(0, num2022_1) - .forEach(id -> { - scholarshipService.create(id, "2022-1"); - }); - - List studentIds2021_2 = students.stream() - .map(Student::getId) - .collect(Collectors.toList()); - Collections.shuffle(studentIds2021_2); - int num2021_2 = getRandomNum(students.size() - 10, students.size()); - studentIds2021_2.subList(0, num2021_2) - .forEach(id -> { - scholarshipService.create(id, "2021-2"); - }); + studentIds.forEach(id -> scholarshipService.create(id, "2022-2")); + studentIds.forEach(id -> scholarshipService.create(id, "2022-1")); + studentIds.forEach(id -> scholarshipService.create(id, "2021-2")); + + + // List studentIds2022_2 = students.stream() + // .map(Student::getId) + // .collect(Collectors.toList()); + // Collections.shuffle(studentIds2022_2); + // int num2022_2 = getRandomNum(students.size() - 10, students.size()); + // studentIds2022_2.subList(0, num2022_2) + // .forEach(id -> { + // scholarshipService.create(id, "2022-2"); + // }); + // + // + // List studentIds2022_1 = students.stream() + // .map(Student::getId) + // .collect(Collectors.toList()); + // Collections.shuffle(studentIds2022_1); + // int num2022_1 = getRandomNum(students.size() - 10, students.size()); + // studentIds2022_1.subList(0, num2022_1) + // .forEach(id -> { + // scholarshipService.create(id, "2022-1"); + // }); + // + // + // List studentIds2021_2 = students.stream() + // .map(Student::getId) + // .collect(Collectors.toList()); + // Collections.shuffle(studentIds2021_2); + // int num2021_2 = getRandomNum(students.size() - 10, students.size()); + // studentIds2021_2.subList(0, num2021_2) + // .forEach(id -> { + // scholarshipService.create(id, "2021-2"); + // }); } @@ -239,15 +248,16 @@ public void saveParticipant() { activities.forEach(activity -> { - int num = getRandomNum(15, students.size()); + // int num = getRandomNum(15, students.size()); List refStudent = students.stream() - .map(student -> { - return new StudentSimpleRefDto(student.getStudentNum(), student.getName()); - }) - .collect(Collectors.toList()); - - Collections.shuffle(refStudent); - studentService.registerParticipants(activity.getId(), refStudent.subList(0, num)); + .map(student -> { + return new StudentSimpleRefDto(student.getStudentNum(), student.getName()); + }) + .collect(Collectors.toList()); + + studentService.registerParticipants(activity.getId(), refStudent); + // Collections.shuffle(refStudent); + // studentService.registerParticipants(activity.getId(), refStudent.subList(0, num)); activity.updateStudentRegister(); }); @@ -255,88 +265,87 @@ public void saveParticipant() { private void saveManager() { managerRepository.save(Manager.builder() - - .name("김광 교수님") - .email("kkim@handong.ac.kr") - .department("CSEE") - .approved(true).build()); + .name("김광 교수님") + .email("kkim@handong.ac.kr") + .department("CSEE") + .approved(true).build()); managerRepository.save(Manager.builder() - .name("장소연 교수님") - .email("jerry1004@handong.ac.kr") - .department("CSEE") - .approved(true).build()); + .name("장소연 교수님") + .email("jerry1004@handong.ac.kr") + .department("CSEE") + .approved(true).build()); managerRepository.save(Manager.builder() - .name("장기려 박사님") - .email("janggiryeo@handong.ac.kr") - .department("JGR") - .approved(true).build()); + .name("장기려 박사님") + .email("janggiryeo@handong.ac.kr") + .department("JGR") + .approved(true).build()); managerRepository.save(Manager.builder() - .name("최도성 총장님") - .email("cds@handong.ac.kr") - .department("HGU") - .approved(true).build()); + .name("최도성 총장님") + .email("cds@handong.ac.kr") + .department("HGU") + .approved(true).build()); managerRepository.save(Manager.builder() - .name("최경현 선생님") - .email("cgh@handong.ac.kr") - .department("SW") - .approved(false).build()); + .name("최경현 선생님") + .email("cgh@handong.ac.kr") + .department("SW") + .approved(false).build()); managerRepository.save(Manager.builder() - .name("이윤정 선생님") - .email("lyj@handong.ac.kr") - .department("SW") - .approved(false).build()); + .name("이윤정 선생님") + .email("lyj@handong.ac.kr") + .department("SW") + .approved(false).build()); managerRepository.save(Manager.builder() - .name("이미나 선생님") - .email("lmn@handong.ac.kr") - .department("SW") - .approved(true).build()); + .name("이미나 선생님") + .email("lmn@handong.ac.kr") + .department("SW") + .approved(true).build()); managerRepository.save(Manager.builder() - .name("안병웅") - .email("BW_Ahn@handong.ac.kr") - .department("전산전자공학부") - .approved(true).build()); + .name("안병웅") + .email("BW_Ahn@handong.ac.kr") + .department("전산전자공학부") + .approved(true).build()); managerRepository.save(Manager.builder() - .name("박성진") - .email("JakePark@handong.ac.kr") - .department("글로벌리더쉽학부") - .approved(true).build()); + .name("박성진") + .email("JakePark@handong.ac.kr") + .department("글로벌리더쉽학부") + .approved(true).build()); managerRepository.save(Manager.builder() - .name("홍성헌") - .email("lukehongg@handong.ac.kr") - .department("전산전자공학부") - .approved(true).build()); + .name("홍성헌") + .email("lukehongg@handong.ac.kr") + .department("전산전자공학부") + .approved(true).build()); managerRepository.save(Manager.builder() - .name("이인혁") - .email("Bruse@handong.ac.kr") - .department("ICT융합학부") - .approved(true).build()); + .name("이인혁") + .email("Bruse@handong.ac.kr") + .department("ICT 융합학부") + .approved(true).build()); managerRepository.save(Manager.builder() - .name("정수산나") - .email("Sanna@handong.ac.kr") - .department("경영경제학부") - .approved(false).build()); + .name("정수산나") + .email("Sanna@handong.ac.kr") + .department("경영경제학부") + .approved(false).build()); managerRepository.save(Manager.builder() - .name("정석민") - .email("PeterJung@handong.ac.kr") - .department("글로벌리더쉽학부") - .approved(false).build()); + .name("정석민") + .email("PeterJung@handong.ac.kr") + .department("글로벌리더쉽학부") + .approved(false).build()); managerRepository.save(Manager.builder() - .name("송다빈") - .email("Emerson@handong.ac.kr") - .department("전산전자공학부") - .approved(true).build()); + .name("송다빈") + .email("Emerson@handong.ac.kr") + .department("전산전자공학부") + .approved(true).build()); } @@ -350,109 +359,109 @@ private void saveNotice() { } noticeRepository.save(Notice.builder() - .manager(l.get(1)) - .title("원클릭 컴공 전공 상담신청 서비스 안내") - .content("

상담 받기 좋은 계절입니다.

 

질문거리, 고민거리는 있지만 어느 교수님께 물어야 할 지 모르겠다면...

교수님께 상담 요청 이메일, 어떻게 써야 할지 몰라 망설여지신다면...

편하게 이것저것 여쭤보고 싶은데 안면 있는 교수님이 없어 막막하시다면...

 

원클릭 컴공 전공상담신청을 이용해보시기 바랍니다!

 

 https://forms.gle/n8mvzfJ51Ahzaujz8

 

접수한 내용을 바탕으로 가능한 빨리 적절한 교수님을 찾아 매칭해드립니다. 

 

학생 이메일 도메인 변경에 따라 Google Form 주소도 업데이트 했으니

참고하시기 바랍니다.

 

- 홍신

") - .viewCnt(0) - .importance(true) - .pubDate(LocalDate.of(2022, Month.APRIL, 19)) - .expDate(LocalDate.of(2022, Month.APRIL, 26)) - .build()); + .manager(l.get(1)) + .title("원클릭 컴공 전공 상담신청 서비스 안내") + .content("

상담 받기 좋은 계절입니다.

 

질문거리, 고민거리는 있지만 어느 교수님께 물어야 할 지 모르겠다면...

교수님께 상담 요청 이메일, 어떻게 써야 할지 몰라 망설여지신다면...

편하게 이것저것 여쭤보고 싶은데 안면 있는 교수님이 없어 막막하시다면...

 

원클릭 컴공 전공상담신청을 이용해보시기 바랍니다!

 

 https://forms.gle/n8mvzfJ51Ahzaujz8

 

접수한 내용을 바탕으로 가능한 빨리 적절한 교수님을 찾아 매칭해드립니다. 

 

학생 이메일 도메인 변경에 따라 Google Form 주소도 업데이트 했으니

참고하시기 바랍니다.

 

- 홍신

") + .viewCnt(0) + .importance(true) + .pubDate(LocalDate.of(2022, Month.NOVEMBER, 19)) + .expDate(LocalDate.of(2023, Month.APRIL, 26)) + .build()); noticeRepository.save(Notice.builder() - .manager(l.get(2)) - .title("2022 BizFlow M Pre-Contest (신청기간연장 ~6.7(화))") - .content("


                                                                                         

 

 ■  접수기간 : 2022년 5월 25일 (수) ~ 6월 7일 (화)

 

 ■  접수링크 : https://docs.google.com/forms/d/1BR9IKalGSdDPKR4Hi6dvW8dpL57dKhvfz0oliJatRno/edit

         

 ■  참가자격

      한동대학교 재학생으로서 다음 사항 중 1개라도 해당되는 팀 (휴학생 팀원 참여 가능)

      1) 팀원 중 BizFlow Camp 수료자가 있는 경우

      2) 팀원 중 이전 BizFlow AppDev Contest 수상자(참가상 포함)가 있는 경우

      3) 팀원 중 BizFlow AppDev 사용 경험자가 있는 경우

      4) 팀원 모두 BizFlow AppDev 사용 경험은 없지만, 웹사이트 제작 경험이 있는 경우 

 

 ■ 컨테스트 내용   

     。사전 제시된 미션을 BizFlow M을 사용하여 구현한 후, 기한 내에 제출함 

     。미션 링크 : https://www.notion.so/HGU-X-AppDev-2022-Precontest-473e3aed71554cf2899238fd49ca3d6b

     。컨테스트 미션에 대한 설명 영상https://youtu.be/od_lQFIrj7g

     。이번 컨테스트 진행 중 질문답변을 위해 다음 링크를 사용하기 바랍니다.    

       클라썸 입장 링크: www.classum.com/EXSTQA 

 

 ■ 팀 구성 : 1~3인으로 팀 구성 (개인 참가 가능)



 ■ 수상팀에게는 여름방학 중에 진행되는 본 컨테스트 출전 자격이 주어집니다.

    1) 최우수상 : 1팀 60만원

     2) 우수상 : 5팀 내외 40만원

     3) 장려상 : 10팀 내외 20만원

     4) 참가상 : 기념품 지급

 

                    * 지적재산권 동의서 양식 첨부파일 확인 


") - .viewCnt(0) - .importance(true) - .pubDate(LocalDate.of(2022, Month.MAY, 24)) - .expDate(LocalDate.of(2022, Month.MAY, 30)) - .build()); + .manager(l.get(2)) + .title("2022 BizFlow M Pre-Contest (신청기간연장 ~6.7(화))") + .content("\"

■  접수기간 : 2022년 5월 25일 (수) ~ 6월 7일 (화)

 

 ■  접수링크 : https://docs.google.com/forms/d/1BR9IKalGSdDPKR4Hi6dvW8dpL57dKhvfz0oliJatRno/edit

         

 ■  참가자격

      한동대학교 재학생으로서 다음 사항 중 1개라도 해당되는 팀 (휴학생 팀원 참여 가능)

      1) 팀원 중 BizFlow Camp 수료자가 있는 경우

      2) 팀원 중 이전 BizFlow AppDev Contest 수상자(참가상 포함)가 있는 경우

      3) 팀원 중 BizFlow AppDev 사용 경험자가 있는 경우

      4) 팀원 모두 BizFlow AppDev 사용 경험은 없지만, 웹사이트 제작 경험이 있는 경우 

 

 ■ 컨테스트 내용   

     。사전 제시된 미션을 BizFlow M을 사용하여 구현한 후, 기한 내에 제출함 

     。미션 링크 : https://www.notion.so/HGU-X-AppDev-2022-Precontest-473e3aed71554cf2899238fd49ca3d6b

     。컨테스트 미션에 대한 설명 영상 : https://youtu.be/od_lQFIrj7g

     。이번 컨테스트 진행 중 질문답변을 위해 다음 링크를 사용하기 바랍니다.    

       클라썸 입장 링크www.classum.com/EXSTQA 

 

 ■ 팀 구성 : 1~3인으로 팀 구성 (개인 참가 가능)



 ■ 수상팀에게는 여름방학 중에 진행되는 본 컨테스트 출전 자격이 주어집니다.

    1) 최우수상 : 1팀 60만원

     2) 우수상 : 5팀 내외 40만원

     3) 장려상 : 10팀 내외 20만원

     4) 참가상 : 기념품 지급



\"") + .viewCnt(0) + .importance(true) + .pubDate(LocalDate.of(2022, Month.NOVEMBER, 24)) + .expDate(LocalDate.of(2023, Month.MAY, 30)) + .build()); noticeRepository.save(Notice.builder() - .manager(l.get(3)) - .title("2022-2 사전 학점인정 안내(타대학 교환·학점교류)") - .content("

22-2학기 타대학 교환·학점교류를 통해 전산전자공학부의 컴퓨터공학(심화), 전자공학(심화) 전공 학점으로 인정받고자 하는 학생은, 아래의 내용을 확인하시고 사전학점인정원 제출하시기 바랍니다.



1. 신청기간: ~2022.8.14.

     * 각 대학마다 수강신청기간이 다르므로, 본인 대학 수강신청기간 전에 신청 바람



2. 제출서류: 사전학점인정원, 해당 과목 강의계획서



3. 제출방법: csee@handong.edu로 온라인 제출



4. 사전학점인정 절차

  가. 학생이 학부사무실로 사전학점인정원 제출

  나. 해당 전공의 프로그램위원회에서 제출된 자료 검토하여 학점인정 여부 판단

  다. 검토완료 된 사전학점인정원을 학부사무실에서 학생 메일로 송부



5. 유의사항

  가. 각 대학마다 수강신청기간이 다르므로, 사전학점인정 승인 받은 후 수강신청 할 수 있도록 시간 여유를 두고 미리 신청 바람

  나. 본인서명 필수 /  담당교수 확인란은 비워 제출

  다. '해당전공'란은 컴퓨터공학 or 전자공학을 기입

  라. 이전 학기에 학점교류를 통해 전공 인정받은 학생의 경우 아래 내용 함께 제출

    1) 이전 교류대학명: 

    2) 인정 과목명:

    3) 총 인정학점:

  마. 사전학점인정원 승인을 받았더라도, 다른 수강 교과목과 내용이 중복되는 경우 추후 학점인정을 받지 못할 수 있음





문의 : 260-1414 / csee@handong.edu

") - .viewCnt(0) - .importance(false) - .pubDate(LocalDate.of(2022, Month.JUNE, 2)) - .expDate(LocalDate.of(2022, Month.JUNE, 15)) - .build()); + .manager(l.get(3)) + .title("2022-2 사전 학점인정 안내(타대학 교환·학점교류)") + .content("

22-2학기 타대학 교환·학점교류를 통해 전산전자공학부공학부의 컴퓨터공학(심화), 전자공학(심화) 전공 학점으로 인정받고자 하는 학생은, 아래의 내용을 확인하시고 사전학점인정원 제출하시기 바랍니다.



1. 신청기간: ~2022.8.14.

     * 각 대학마다 수강신청기간이 다르므로, 본인 대학 수강신청기간 전에 신청 바람



2. 제출서류: 사전학점인정원, 해당 과목 강의계획서



3. 제출방법: csee@handong.edu로 온라인 제출



4. 사전학점인정 절차

  가. 학생이 학부사무실로 사전학점인정원 제출

  나. 해당 전공의 프로그램위원회에서 제출된 자료 검토하여 학점인정 여부 판단

  다. 검토완료 된 사전학점인정원을 학부사무실에서 학생 메일로 송부



5. 유의사항

  가. 각 대학마다 수강신청기간이 다르므로, 사전학점인정 승인 받은 후 수강신청 할 수 있도록 시간 여유를 두고 미리 신청 바람

  나. 본인서명 필수 /  담당교수 확인란은 비워 제출

  다. '해당전공'란은 컴퓨터공학 or 전자공학을 기입

  라. 이전 학기에 학점교류를 통해 전공 인정받은 학생의 경우 아래 내용 함께 제출

    1) 이전 교류대학명: 

    2) 인정 과목명:

    3) 총 인정학점:

  마. 사전학점인정원 승인을 받았더라도, 다른 수강 교과목과 내용이 중복되는 경우 추후 학점인정을 받지 못할 수 있음





문의 : 260-1414 / csee@handong.edu

") + .viewCnt(0) + .importance(false) + .pubDate(LocalDate.of(2022, Month.NOVEMBER, 2)) + .expDate(LocalDate.of(2023, Month.JUNE, 15)) + .build()); noticeRepository.save(Notice.builder() - .manager(l.get(4)) - .title("2022년 8월 졸업생 학위증 및 상장 교부 안내") - .content("

9/2(금) 15시까지 신청 건 우편 발송되었습니다. 

 

---------------------------------------------------------------------------

 

안녕하세요?

전산전자공학부입니다.



졸업을 진심으로 축하드립니다.\uD83C\uDF89



학위증은 8/17(수)부터 학부사무실(NTH309)에서 직접 수령 가능합니다.



우편(착불 4500원 정도)으로 받고자 하는 학생은 

9/4(일)까지 구글폼( https://forms.gle/YC33x2dgMp2o6FFP7 ) 작성해주시기 바랍니다.



이전 졸업생 중 학위증을 수령하지 않은 학생도 신청하시기 바랍니다.



<유의사항>

1. 학위증은 23년 2월 학위수여식까지 보관하며, 그 후 분실에 대해 책임지지 않습니다.

2. 학위증 재발급은 불가하니, 꼭 수령하시기 바랍니다.



감사합니다:D



문의) 전산전자공학부사무실 260-1414

") - .viewCnt(0) - .importance(true) - .pubDate(LocalDate.of(2022, Month.JUNE, 7)) - .expDate(LocalDate.of(2022, Month.JUNE, 29)) - .build()); + .manager(l.get(4)) + .title("2022년 8월 졸업생 학위증 및 상장 교부 안내") + .content("

9/2(금) 15시까지 신청 건 우편 발송되었습니다. 

 

---------------------------------------------------------------------------

 

안녕하세요?

전산전자공학부공학부입니다.



졸업을 진심으로 축하드립니다.\uD83C\uDF89



학위증은 8/17(수)부터 학부사무실(NTH309)에서 직접 수령 가능합니다.



우편(착불 4500원 정도)으로 받고자 하는 학생은 

9/4(일)까지 구글폼( https://forms.gle/YC33x2dgMp2o6FFP7 ) 작성해주시기 바랍니다.



이전 졸업생 중 학위증을 수령하지 않은 학생도 신청하시기 바랍니다.



<유의사항>

1. 학위증은 23년 2월 학위수여식까지 보관하며, 그 후 분실에 대해 책임지지 않습니다.

2. 학위증 재발급은 불가하니, 꼭 수령하시기 바랍니다.



감사합니다:D



문의) 전산전자공학부공학부사무실 260-1414

") + .viewCnt(0) + .importance(true) + .pubDate(LocalDate.of(2022, Month.NOVEMBER, 7)) + .expDate(LocalDate.of(2023, Month.JUNE, 29)) + .build()); noticeRepository.save(Notice.builder() - .manager(l.get(4)) - .title("2022년 8월 졸업생 학위증 및 상장 교부 안내") - .content("

9/2(금) 15시까지 신청 건 우편 발송되었습니다. 

 

---------------------------------------------------------------------------

 

안녕하세요?

전산전자공학부입니다.



졸업을 진심으로 축하드립니다.\uD83C\uDF89



학위증은 8/17(수)부터 학부사무실(NTH309)에서 직접 수령 가능합니다.



우편(착불 4500원 정도)으로 받고자 하는 학생은 

9/4(일)까지 구글폼( https://forms.gle/YC33x2dgMp2o6FFP7 ) 작성해주시기 바랍니다.



이전 졸업생 중 학위증을 수령하지 않은 학생도 신청하시기 바랍니다.



<유의사항>

1. 학위증은 23년 2월 학위수여식까지 보관하며, 그 후 분실에 대해 책임지지 않습니다.

2. 학위증 재발급은 불가하니, 꼭 수령하시기 바랍니다.



감사합니다:D



문의) 전산전자공학부사무실 260-1414

") - .viewCnt(0) - .importance(true) - .pubDate(LocalDate.of(2022, Month.JUNE, 21)) - .expDate(LocalDate.of(2022, Month.JUNE, 27)) - .build()); + .manager(l.get(4)) + .title("2022년 8월 졸업생 학위증 및 상장 교부 안내") + .content("

9/2(금) 15시까지 신청 건 우편 발송되었습니다. 

 

---------------------------------------------------------------------------

 

안녕하세요?

전산전자공학부공학부입니다.



졸업을 진심으로 축하드립니다.\uD83C\uDF89



학위증은 8/17(수)부터 학부사무실(NTH309)에서 직접 수령 가능합니다.



우편(착불 4500원 정도)으로 받고자 하는 학생은 

9/4(일)까지 구글폼( https://forms.gle/YC33x2dgMp2o6FFP7 ) 작성해주시기 바랍니다.



이전 졸업생 중 학위증을 수령하지 않은 학생도 신청하시기 바랍니다.



<유의사항>

1. 학위증은 23년 2월 학위수여식까지 보관하며, 그 후 분실에 대해 책임지지 않습니다.

2. 학위증 재발급은 불가하니, 꼭 수령하시기 바랍니다.



감사합니다:D



문의) 전산전자공학부공학부사무실 260-1414

") + .viewCnt(0) + .importance(true) + .pubDate(LocalDate.of(2022, Month.NOVEMBER, 21)) + .expDate(LocalDate.of(2023, Month.JUNE, 27)) + .build()); noticeRepository.save(Notice.builder() - .manager(l.get(3)) - .title("[BK21 인공지능 교육연구단] 2022-2 참여대학원생 등록서류 제출 및 연구장학금 신청 안내") - .content("

한동대학교 BK21 인공지능 사업단

2022학년도 2학기 참여대학원생 등록서류 제출 및 연구장학금 신청 안내

 

 

한동대학교 전산전자공학과 4단계 BK21 ‘산업혁신을 위한 AI 고급 인재교육연구단’ (BK21 인공지능사업단)에서 다음과 같이 등록 서류를 제출하여주시기 바랍니다.

 


1. 4단계 BK21 참여대학원생 기준 (다음의 조건을 모두 충족한 자)

BK21 참여교수의 지도학생 중 전일제(4대보험에 가입되어 있지 않은 학생)로 등록(연구생 등록 포함)한 석·박사과정 대학원생으로 다음 각 호에 해당하는 자

-입학한 지 2년이 지나지 않은 석사과정생

-입학한 지 4년이 지나지 않은 박사과정생 및 박사 수료생

-입학한 지 6년이 지나지 않은 석박통합과정생 및 석박통합과정 수료생

(위의 기간 기산 시 휴학 및 군복무 기간은 제외함).

 

위의 자격을 충족한 경우 ‘참여대학원생’으로 등록되어 ‘지원대학원생’ 선발 기회 등 BK21 사업의 지원을 받을 수 있음.

 

2. 지원대학원생 선발 및 연구장학금 지급

1) 참여대학원생으로 등록된 학생 중 70% 이내의 대학원생을 ‘지원대학원생’으로 선발해 연구장학금을 지급함.

2) 지원기간: 2022.09.01.~2023.02.28. (6개월 단위로 선발)

3) 선발기준: 지도교수 추천을 받은 참여대학원생 중 연구/프로젝트 성과 평가에 의해 선발

4) 역할 및 임무

- BK21 참여교수 연구실에서 논문 연구 및 산학 프로젝트를 성실히 수행 (주 40시간 이상)

- 사업단이 주관하는 각종 세미나, 포럼 등의 학술 활동에 참여

- 사업단이 요구하는 성과 자료 보고

 


3. 참여대학원생 등록서류 제출안내(등록서류는 단순참여, 장학금 지원 받는 학생 모두 제출해주세요.)

1) 첨부된 제출서류 다운 및 작성 후 BK21 사업단 사무실로 서류 제출.

2) 지도교수로부터 지원대학원생(장학금 받는 학생)으로 추천받은 대학원생은 5.제출서류 함께 제출

 

4. 서류 제출 기간: 2022년 8월 29일(월) 13:00 - 9월 7일(수) 17:00 (제출기한 엄수)




5. 제출서류

- 연구자등록번호 발급 방법

: KRI(한국연구업적통합정보시스템 http://www.kri.go.kr)에 접속 회원가입→연구자등록번호 발급 

  (가입 시 소속을 반드시 ‘한동대학교’로 가입) 



1) 재학증명서 1부. 연구생등록자의 경우 연구생등록증 1부(2022년 9월 1일자 기준으로 제출)

2) 개인정보 수집 이용 제공 동의서 1부. (BK사업에 처음 참여하는 학생만 제출)

3) 참여인력 서약서 1부. 

4) 참여대학원생 확약서 1부.

5) BK21 연구장학금 신청서 1부. (지원대학원생-BK장학금 받는 학생만 제출)

6) 전산전자공학과 학기 보고서 1부.

7) 재학증명서 1부.(9월 1일 기준)

 

8) 연구재단 필수 제출 서류 '4대 보험 가입 증명서' 1부. (22.10.1일 기준일로하여 메일로 회신)

(**10월1일 기준으로 출력 후 제출 바랍니다. 9월에는 제출하지 않아도 됩니다!)

- 출력 방법: 4대 사회보험 포털서비스(http://www.4insure.or.kr) 로그인(회원가입, 공인인증서 필요) → 상단 메뉴 증명서발급(가입내역확인) 클릭 후 출력

 

9) 대학원 성적표 1부. (신입생은 제출X)

 

<한국연구재단 필수 수강!!-참여기간 중 1회 수강 후 수료증 제출해야함, 교육 미이수자 및  22-2학기 신입생만 수강하면 됩니다.>

10) 온라인 교육 수료증 (http://alpha-campus.kr/) 에 접속하여 로그인 후 상단 메뉴의 '탐색'->'온라인교육' -> '건강한 연구환경 조성을 위한 인권침해예방교육'클릭 ->'수강신청' 클릭 후 팝업창에서 수강신청 정보 확인 및 '신청완료'-> '학습'-> '학습중과정'-> '건강한 연구환경 조성을 위한 인권침해예방교육' 순서대로 클릭 후 '학습하기'

컨텐츠 수강 후 ‘MY'-> '학습이력'클릭 후 수료증 발급 및 보관) 

*수료증은 메일로 회신부탁합니다. 

 

11) 통장사본 및 신분증 사본 각 1부.

 

※ 외국인 참여대학원생의 경우 외국인 등록증 앞, 뒤 사본(D-2비자 여부 및 만료기한 확인) 제출.

※ 기존 참여대학원생이 지원할 경우: 2)개인정보 수집 이용 제공 동의서, 10)온라인 교육 수료증 제출 생략.

 

6. 서류 제출 및 문의처

1) BK21사업단 사무실: 뉴턴홀 309호 전산전자공학부 사무실 담당자 고라경(Tel: 260-3150)

2) 신청 시 모든 서류는 위 제출서류 순서대로 정리하여 원본 제출 바랍니다.

 

7. 유의사항: 제출된 서류는 반환하지 않으며, 허위사실 기재 시 선발을 취소함.

") - .viewCnt(0) - .importance(false) - .pubDate(LocalDate.of(2022, Month.JULY, 1)) - .expDate(LocalDate.of(2022, Month.JULY, 14)) - .build()); + .manager(l.get(3)) + .title("[BK21 인공지능 교육연구단] 2022-2 참여대학원생 등록서류 제출 및 연구장학금 신청 안내") + .content("

한동대학교 BK21 인공지능 사업단

2022학년도 2학기 참여대학원생 등록서류 제출 및 연구장학금 신청 안내

 

 

한동대학교 전산전자공학부공학과 4단계 BK21 ‘산업혁신을 위한 AI 고급 인재교육연구단’ (BK21 인공지능사업단)에서 다음과 같이 등록 서류를 제출하여주시기 바랍니다.

 


1. 4단계 BK21 참여대학원생 기준 (다음의 조건을 모두 충족한 자)

BK21 참여교수의 지도학생 중 전일제(4대보험에 가입되어 있지 않은 학생)로 등록(연구생 등록 포함)한 석·박사과정 대학원생으로 다음 각 호에 해당하는 자

-입학한 지 2년이 지나지 않은 석사과정생

-입학한 지 4년이 지나지 않은 박사과정생 및 박사 수료생

-입학한 지 6년이 지나지 않은 석박통합과정생 및 석박통합과정 수료생

(위의 기간 기산 시 휴학 및 군복무 기간은 제외함).

 

위의 자격을 충족한 경우 ‘참여대학원생’으로 등록되어 ‘지원대학원생’ 선발 기회 등 BK21 사업의 지원을 받을 수 있음.

 

2. 지원대학원생 선발 및 연구장학금 지급

1) 참여대학원생으로 등록된 학생 중 70% 이내의 대학원생을 ‘지원대학원생’으로 선발해 연구장학금을 지급함.

2) 지원기간: 2022.09.01.~2023.02.28. (6개월 단위로 선발)

3) 선발기준: 지도교수 추천을 받은 참여대학원생 중 연구/프로젝트 성과 평가에 의해 선발

4) 역할 및 임무

- BK21 참여교수 연구실에서 논문 연구 및 산학 프로젝트를 성실히 수행 (주 40시간 이상)

- 사업단이 주관하는 각종 세미나, 포럼 등의 학술 활동에 참여

- 사업단이 요구하는 성과 자료 보고

 


3. 참여대학원생 등록서류 제출안내(등록서류는 단순참여, 장학금 지원 받는 학생 모두 제출해주세요.)

1) 첨부된 제출서류 다운 및 작성 후 BK21 사업단 사무실로 서류 제출.

2) 지도교수로부터 지원대학원생(장학금 받는 학생)으로 추천받은 대학원생은 5.제출서류 함께 제출

 

4. 서류 제출 기간: 2022년 8월 29일(월) 13:00 - 9월 7일(수) 17:00 (제출기한 엄수)




5. 제출서류

- 연구자등록번호 발급 방법

: KRI(한국연구업적통합정보시스템 http://www.kri.go.kr)에 접속 회원가입→연구자등록번호 발급 

  (가입 시 소속을 반드시 ‘한동대학교’로 가입) 



1) 재학증명서 1부. 연구생등록자의 경우 연구생등록증 1부(2022년 9월 1일자 기준으로 제출)

2) 개인정보 수집 이용 제공 동의서 1부. (BK사업에 처음 참여하는 학생만 제출)

3) 참여인력 서약서 1부. 

4) 참여대학원생 확약서 1부.

5) BK21 연구장학금 신청서 1부. (지원대학원생-BK장학금 받는 학생만 제출)

6) 전산전자공학부공학과 학기 보고서 1부.

7) 재학증명서 1부.(9월 1일 기준)

 

8) 연구재단 필수 제출 서류 '4대 보험 가입 증명서' 1부. (22.10.1일 기준일로하여 메일로 회신)

(**10월1일 기준으로 출력 후 제출 바랍니다. 9월에는 제출하지 않아도 됩니다!)

- 출력 방법: 4대 사회보험 포털서비스(http://www.4insure.or.kr) 로그인(회원가입, 공인인증서 필요) → 상단 메뉴 증명서발급(가입내역확인) 클릭 후 출력

 

9) 대학원 성적표 1부. (신입생은 제출X)

 

<한국연구재단 필수 수강!!-참여기간 중 1회 수강 후 수료증 제출해야함, 교육 미이수자 및  22-2학기 신입생만 수강하면 됩니다.>

10) 온라인 교육 수료증 (http://alpha-campus.kr/) 에 접속하여 로그인 후 상단 메뉴의 '탐색'->'온라인교육' -> '건강한 연구환경 조성을 위한 인권침해예방교육'클릭 ->'수강신청' 클릭 후 팝업창에서 수강신청 정보 확인 및 '신청완료'-> '학습'-> '학습중과정'-> '건강한 연구환경 조성을 위한 인권침해예방교육' 순서대로 클릭 후 '학습하기'

컨텐츠 수강 후 ‘MY'-> '학습이력'클릭 후 수료증 발급 및 보관) 

*수료증은 메일로 회신부탁합니다. 

 

11) 통장사본 및 신분증 사본 각 1부.

 

※ 외국인 참여대학원생의 경우 외국인 등록증 앞, 뒤 사본(D-2비자 여부 및 만료기한 확인) 제출.

※ 기존 참여대학원생이 지원할 경우: 2)개인정보 수집 이용 제공 동의서, 10)온라인 교육 수료증 제출 생략.

 

6. 서류 제출 및 문의처

1) BK21사업단 사무실: 뉴턴홀 309호 전산전자공학부공학부 사무실 담당자 고라경(Tel: 260-3150)

2) 신청 시 모든 서류는 위 제출서류 순서대로 정리하여 원본 제출 바랍니다.

 

7. 유의사항: 제출된 서류는 반환하지 않으며, 허위사실 기재 시 선발을 취소함.

") + .viewCnt(0) + .importance(false) + .pubDate(LocalDate.of(2022, Month.JULY, 1)) + .expDate(LocalDate.of(2022, Month.JULY, 14)) + .build()); noticeRepository.save(Notice.builder() - .manager(l.get(2)) - .title("2022 한동 SW페스티벌 수상자 안내 및 서류 제출 요청(10월 19일(수)까지)") - .content("

2022 한동 SW페스티벌 수상자 안내 및 서류 제출 요청(10월 19일(수)까지)

  

'2022 한동 SW페스티벌'에 참여한 모든 참가자들에게 감사드리며 수상팀을 안내드립니다. 

자세한 수상팀 명단은 첨부파일에서 확인 가능합니다.

수상한 모든 팀들 축하드립니다. 



[상금]

수상팀 제출 서류는 아래 설문지를 통해 팀대표 1명만 제출바랍니다.(팀장이 대표로 수령)

서류 제출 마감일은 10월 19일(수)입니다. 빠른 상금 수령을 위해 마감 기한을 꼭 지켜주세요!!

설문지로 바로이동



[상장]

배부기간: 10.20(목) ~ 21(금). 팀별 1부 발급

배  부  처: SW중심대학지원사업단, 뉴턴홀 218호

   * 상장 수령 시 개인정보 이용 동의서 서명도 함께 해주세요.

 

 

문의 : SW중심대학 지원사업단 이윤정(260-1478 / lyj1515@handong.edu)

") - .viewCnt(0) - .importance(false) - .pubDate(LocalDate.of(2022, Month.JULY, 7)) - .expDate(LocalDate.of(2022, Month.JULY, 12)) - .build()); + .manager(l.get(2)) + .title("2022 한동 SW페스티벌 수상자 안내 및 서류 제출 요청(10월 19일(수)까지)") + .content("

2022 한동 SW페스티벌 수상자 안내 및 서류 제출 요청(10월 19일(수)까지)

  

'2022 한동 SW페스티벌'에 참여한 모든 참가자들에게 감사드리며 수상팀을 안내드립니다. 

자세한 수상팀 명단은 첨부파일에서 확인 가능합니다.

수상한 모든 팀들 축하드립니다. 



[상금]

수상팀 제출 서류는 아래 설문지를 통해 팀대표 1명만 제출바랍니다.(팀장이 대표로 수령)

서류 제출 마감일은 10월 19일(수)입니다. 빠른 상금 수령을 위해 마감 기한을 꼭 지켜주세요!!

설문지로 바로이동



[상장]

배부기간: 10.20(목) ~ 21(금). 팀별 1부 발급

배  부  처: SW중심대학지원사업단, 뉴턴홀 218호

   * 상장 수령 시 개인정보 이용 동의서 서명도 함께 해주세요.

 

 

문의 : SW중심대학 지원사업단 이윤정(260-1478 / lyj1515@handong.edu)

") + .viewCnt(0) + .importance(false) + .pubDate(LocalDate.of(2022, Month.JULY, 7)) + .expDate(LocalDate.of(2022, Month.JULY, 12)) + .build()); noticeRepository.save(Notice.builder() - .manager(l.get(1)) - .title("[전산전자공학부] 2022 CSEE Lab Week에 초대합니다.") - .content("

안녕하세요? \"\uD83D\uDCBB\"

전산전자공학부, 일반대학원 전산전자공학과가 9주차 10/24(월)~10/28(금)에 각 연구실에 대해 알아가고 다양한 연구의 내용을 공유하는 시간을 가지려고 합니다. 



저희 전산전자공학부, 일반대학원 전산전자공학과에서 어떤 주제의 연구들을 진행하고 있는지 Lab설명회, 포스터세션을 통해 이야기를 듣고 싶은 학생들의 많은 참여 바랍니다. 



행사에 참석하면 입시관련된 정보 또한 얻을 수 있으니 AI를 포함한 ICT관련 분야 진학에 관심있는 모든 학부생들의 참여를 환영합니다. 



\"d24;\"온라인 Lab 멘토링 실시 (기간: 10/24(월)~10/28(금))

(아래 링크접속 후 각 Lab의 오픈카톡방을 통한 자유로운 상담 가능)


https://docs.google.com/document/d/1vPNIac3vfuBxzr3-IsqVqEAFwJtA-6dXiE_RvKhXJHo/edit#

 

 

\"d24;\" Lab토크쇼(10/27(목) 18시30분~) 사전질문 작성

제출된 질문은 Lab 토크쇼에서 활용되며, 추첨을 통하여 커피쿠폰을 드립니다.

https://forms.gle/a8XWyqXcTec8vdwq5

 

 

\"d24;\" CSEE Lab Week 행사 참석 희망자(만찬 참여 포함)는 아래 설문지 필수 작성


https://docs.google.com/forms/d/1wkUWbYgcPFFTfrI-M3aOonQYRd_Oq6VHugJx6rVkuRE/edit?pli=1



**10/28(금)** 포스터세션이 종료되고 만찬(오후 5시 예정)이 있을 예정입니다.

만찬은 인원수 제한으로 선착순으로 신청을 받습니다.






\"\uD83C\uDF81\"event\"\uD83C\uDF81\" CSEE Lab Week 참가자 커피쿠폰 증정 

 

 

* 문의: 전산전자공학과 고라경 선생님 (전화: 054-260-3150)

") - .viewCnt(0) - .importance(true) - .pubDate(LocalDate.of(2022, Month.AUGUST, 5)) - .expDate(LocalDate.of(2022, Month.AUGUST, 25)) - .build()); + .manager(l.get(1)) + .title("[전산전자공학부공학부] 2022 CSEE Lab Week에 초대합니다.") + .content("

안녕하세요?

전산전자공학부공학부, 일반대학원 전산전자공학부공학과가 9주차 10/24(월)~10/28(금)에 각 연구실에 대해 알아가고 다양한 연구의 내용을 공유하는 시간을 가지려고 합니다. 



저희 전산전자공학부공학부, 일반대학원 전산전자공학부공학과에서 어떤 주제의 연구들을 진행하고 있는지 Lab설명회, 포스터세션을 통해 이야기를 듣고 싶은 학생들의 많은 참여 바랍니다. 



행사에 참석하면 입시관련된 정보 또한 얻을 수 있으니 AI를 포함한 ICT 관련 분야 진학에 관심있는 모든 학부생들의 참여를 환영합니다. 



\"d24;\"온라인 Lab 멘토링 실시 (기간: 10/24(월)~10/28(금))

(아래 링크접속 후 각 Lab의 오픈카톡방을 통한 자유로운 상담 가능)


https://docs.google.com/document/d/1vPNIac3vfuBxzr3-IsqVqEAFwJtA-6dXiE_RvKhXJHo/edit#

 

 

\"d24;\" Lab토크쇼(10/27(목) 18시30분~) 사전질문 작성

제출된 질문은 Lab 토크쇼에서 활용되며, 추첨을 통하여 커피쿠폰을 드립니다.

https://forms.gle/a8XWyqXcTec8vdwq5

 

 

\"d24;\" CSEE Lab Week 행사 참석 희망자(만찬 참여 포함)는 아래 설문지 필수 작성


https://docs.google.com/forms/d/1wkUWbYgcPFFTfrI-M3aOonQYRd_Oq6VHugJx6rVkuRE/edit?pli=1



**10/28(금)** 포스터세션이 종료되고 만찬(오후 5시 예정)이 있을 예정입니다.

만찬은 인원수 제한으로 선착순으로 신청을 받습니다.






\"\uD83C\uDF81\"event\"\uD83C\uDF81\" CSEE Lab Week 참가자 커피쿠폰 증정 

 

 

* 문의: 전산전자공학부공학과 고라경 선생님 (전화: 054-260-3150)

") + .viewCnt(0) + .importance(false) + .pubDate(LocalDate.of(2022, Month.AUGUST, 5)) + .expDate(LocalDate.of(2022, Month.AUGUST, 25)) + .build()); noticeRepository.save(Notice.builder() - .manager(l.get(0)) - .title("2022-2 비교과 졸업요건 서류 제출 안내(~12/16)") - .content("

안녕하세요?

17학번이후인 1전공 컴퓨터공학/AI·컴퓨터공학심화 학생 중 캡스톤디자인 교과목 수강생 및 2023.2월 졸업예정자에게 안내드립니다.

비교과 졸업요건 만족 여부 확인을 위해 첨부 된 양식 작성하여 구글폼으로 제출해주시기 바랍니다.

   * 비교과 졸업요건은 히즈넷-학생 졸업심사화면의 '학부추가졸업요건'에 해당합니다.

   * 해당 학생들에게는 문자로 안내하였습니다.

<17학번부터 적용되는 비교과 졸업요건>

- 산학프로젝트 1개 이상 수행 (산학R&D프로젝트, 또는 산학연계 교과목프로젝트 (예: 캡스톤디자인))

- 캡스톤프로젝트 결과물 등을 특허, 논문, SW시제품 중 한 가지 형태로 1건 이상 제출하여야 함 (공동 출원자/저자 모두 인정).

- 비교과 졸업요건은 캡스톤디자인 과목을 산학 주제로 수행한 결과를 논문 발표, 특허출원, 또는 SW등록함으로써 자연스럽게 충족 가능함.

1. 제출기한: 16주차 금요일(12/16)까지

2. 제출방법: 구글폼(https://forms.gle/Q7X1VfJL176h2TJ38) 제출

  - 23.2월에 졸업하는 경우, 12/16(금)까지 제출하셔야 졸업 가능합니다.(다음학기 ‘학사학위취득유예’ 학생 포함)

  - 23.2월에 졸업하지 않는 경우, 다음 학기에 제출하실 수 있습니다.(구글폼에 '졸업안함' 제출)

3. 참고사항

  가. 이전에 증빙서류로 제출하였던 사례

    1) 논문: 정식 게재된 목차 및 논문 스캔본, 발표 포스터 스캔본

    2) 특허: 특허청의 공식 문서로 출원번호 또는 등록번호와 발명자 정보(주소지 포함)가 기재되어 있는 서류

                 (특허출원서, 특허증, 공개특허공보, 등록특허공보 중 1개 선택)

    3) 시제품제작 (아래 3개 항목 중 1가지 선택)

      가) SW등록: SW등록증, 프로그램등록신청명세서, 저작권 등록증 등

      나) 앱 출시: 출시 된 앱의 스토어 게시 화면 캡쳐 이미지, 앱 출시 확인서 사본 등

      다) 상용서비스 수준 확인 : 산학프로젝트 참여 기업체의 담당자 또는 기업체 멘토가 작성한 시제품 확인서(첨부 양식)

  나. 자주묻는질문

    1) 비교과 졸업요건을 충족하기 위한 결과물은 꼭 캡스톤디자인의 결과물이어야 하나요?

          - 반드시 캡스톤 결과물이어야 할 필요는 없습니다.

    2) 저작권 등록을 한 학생이 대표로 하게되어 등록증에 한명의 이름만 기재되는데 어떻게 하나요?

          - 등록증에 들어있는 제목과 캡스톤 제목이 일치하면 같은 팀원에게 동일하게 적용됩니다.                                            다만, 서류는 개인별로 제출하셔야 합니다.



문의) csee@handong.edu

") - .viewCnt(0) - .importance(true) - .pubDate(LocalDate.of(2022, Month.AUGUST, 8)) - .expDate(LocalDate.of(2022, Month.DECEMBER, 16)) - .build()); + .manager(l.get(0)) + .title("2022-2 비교과 졸업요건 서류 제출 안내(~12/16)") + .content("

안녕하세요?

17학번이후인 1전공 컴퓨터공학/AI·컴퓨터공학심화 학생 중 캡스톤디자인 교과목 수강생 및 2023.2월 졸업예정자에게 안내드립니다.

비교과 졸업요건 만족 여부 확인을 위해 첨부 된 양식 작성하여 구글폼으로 제출해주시기 바랍니다.

   * 비교과 졸업요건은 히즈넷-학생 졸업심사화면의 '학부추가졸업요건'에 해당합니다.

   * 해당 학생들에게는 문자로 안내하였습니다.

<17학번부터 적용되는 비교과 졸업요건>

- 산학프로젝트 1개 이상 수행 (산학R&D프로젝트, 또는 산학연계 교과목프로젝트 (예: 캡스톤디자인))

- 캡스톤프로젝트 결과물 등을 특허, 논문, SW시제품 중 한 가지 형태로 1건 이상 제출하여야 함 (공동 출원자/저자 모두 인정).

- 비교과 졸업요건은 캡스톤디자인 과목을 산학 주제로 수행한 결과를 논문 발표, 특허출원, 또는 SW등록함으로써 자연스럽게 충족 가능함.

1. 제출기한: 16주차 금요일(12/16)까지

2. 제출방법: 구글폼(https://forms.gle/Q7X1VfJL176h2TJ38) 제출

  - 23.2월에 졸업하는 경우, 12/16(금)까지 제출하셔야 졸업 가능합니다.(다음학기 ‘학사학위취득유예’ 학생 포함)

  - 23.2월에 졸업하지 않는 경우, 다음 학기에 제출하실 수 있습니다.(구글폼에 '졸업안함' 제출)

3. 참고사항

  가. 이전에 증빙서류로 제출하였던 사례

    1) 논문: 정식 게재된 목차 및 논문 스캔본, 발표 포스터 스캔본

    2) 특허: 특허청의 공식 문서로 출원번호 또는 등록번호와 발명자 정보(주소지 포함)가 기재되어 있는 서류

                 (특허출원서, 특허증, 공개특허공보, 등록특허공보 중 1개 선택)

    3) 시제품제작 (아래 3개 항목 중 1가지 선택)

      가) SW등록: SW등록증, 프로그램등록신청명세서, 저작권 등록증 등

      나) 앱 출시: 출시 된 앱의 스토어 게시 화면 캡쳐 이미지, 앱 출시 확인서 사본 등

      다) 상용서비스 수준 확인 : 산학프로젝트 참여 기업체의 담당자 또는 기업체 멘토가 작성한 시제품 확인서(첨부 양식)

  나. 자주묻는질문

    1) 비교과 졸업요건을 충족하기 위한 결과물은 꼭 캡스톤디자인의 결과물이어야 하나요?

          - 반드시 캡스톤 결과물이어야 할 필요는 없습니다.

    2) 저작권 등록을 한 학생이 대표로 하게되어 등록증에 한명의 이름만 기재되는데 어떻게 하나요?

          - 등록증에 들어있는 제목과 캡스톤 제목이 일치하면 같은 팀원에게 동일하게 적용됩니다.                                            다만, 서류는 개인별로 제출하셔야 합니다.



문의) csee@handong.edu

") + .viewCnt(0) + .importance(true) + .pubDate(LocalDate.of(2022, Month.DECEMBER, 8)) + .expDate(LocalDate.of(2023, Month.DECEMBER, 16)) + .build()); noticeRepository.save(Notice.builder() .manager(l.get(0)) .title("[이랜드이노플] 채용설명회 안내 및 수요조사") .content("

안녕하세요:) 반갑습니다.

이랜드이노플 인사팀입니다.



금번 [이랜드이노플X한동대학교] 채용설명회에 참여해주시는 분들께 감사의 의미로 간식 및 기념품을 제공해드리고자 수요조사를 진행하게 되었습니다. 일정은 아래와 같이 진행되며, 참석을 원하시는 분들께서는 본 설문에 응답해주시기를 부탁드립니다:)

 

1. 채용설명회

  가. 일시: 2022.11.16(수) 12:00~12:50

  나. 장소: 뉴턴홀 310호

  다. 참석 혜택

    - 채용설명회에 발걸음 해주시는 학생분들께 아래와 같은 혜택을 드리고자 합니다.

      1) 서류전형 시 가산점 부여

      2) 기념품 제공

      3) Q&A 시간에 학생분들이 궁금해하시는 포인트들을 최대한 답변해드리고자 합니다.

    + (한동대 Only) 간식 제공> [한동대] 이랜드이노플 채용설명회 참여 신청서: https://forms.gle/s9B5JbDPsviRBEoq5

 

2. 채용 안내

  가. 채용일정: 2022.11.4(금)~11.21(월)

  나. 이랜드이노플 채용 관련 링크

    - 채용사이트: https://careers.eland.co.kr/announce/recruit/hxKeGGXNip4urmc1ZmHDz7PJVJ2-

    - Notion 이노플 공채 블로그: https://elandinnople.oopy.io/38d9b929-de4f-46eb-8234-d5b231973e74

    - 네이버블로그: https://blog.naver.com/elandinnople

 

") .viewCnt(0) - .importance(true) - .pubDate(LocalDate.of(2022, Month.SEPTEMBER, 6)) - .expDate(LocalDate.of(2022, Month.SEPTEMBER, 26)) + .importance(false) + .pubDate(LocalDate.of(2023, Month.MARCH, 6)) + .expDate(LocalDate.of(2023, Month.SEPTEMBER, 26)) .build()); noticeRepository.save(Notice.builder() .manager(l.get(1)) .title("[대학원] 세미나(11월 11일, 손현우 교수)-아날로그 연산기 기반의 학습가능한 신경망 시스템") - .content("

정보통신대학원 세미나를 소개합니다.

 

이번 세미나는 온.오프라인(한국어 강의)으로 진행 되며, 학부생, 대학원생, 교직원 누구나 참여 가능합니다. 

 

*특강에 참여한 전전 학부생들에게는(대학원생 제외) 소중대 마일리지를 적립해드리니, 관심있는 학생들의 많은 참여 바랍니다. (ZOOM 접속 후 닉네임을 학번, 이름으로 변경 필수!)

 

 

 

 

▶▶세미나5-정보통신대학원 세미나 2022년 2학기

 

 

 

 아날로그 연산기 기반의 학습가능한 신경망

 

손현우 교수

 

경상국립대학교

 

 

 초록



AI 알고리즘의 발전과 함께 IoT를 위한 에너지 효율적인 AI 하드웨어의 필요성이 증가하고 있다. 최근 BinaryNet 알고리즘을 이용하여 추론 과정에서 더 높은 효율을 위한 아날로그 연산기 기반의 하드웨어 가속기 [1] 가 제안되었지만, 학습과 추론이 가능한 AI 하드웨어는 여전히 상대적으로 높은 정확도의 곱셈과 함께 복잡한 학습 과정을 필요로 한다. 또한 인 메모리 하드웨어 구조는 적은 데이터 이동 및 대규모 병렬 동작으로 인하여 높은 에너지 효율과 낮은 지연 시간을 달성할 수 있지만, 아날로그 연산 특성 때문에 PVT 변화에 취약하여 오프라인으로 학습된 가중치를 사용시 상당한 성능저하를 유발할 수 있다. 최근 보고된 온칩 학습 가능한 오토인코더 [2] 와 서포트 벡터 머신 (SVM) [3] 은 소프트웨어로 입증된 AI 알고리즘의 아날로그 연산이 온칩 학습에 성공적으로 사용될 수 있음을 보여주었지만, 단일 오토인코더 유닛 또는 단일 레이어의 SVM으로 응용이 제한되었다. 본 논문 [4] 은 다층 신경망의 학습을 위해 널리 사용되는 오류 역전파 알고리즘을 수행하는 신경망 시스템을 제안한다 (그림. 1). 제안된 시스템의 한 구성 단위로서, 전류형 곱셈누적 연산 (MAC) 프로세서는 병렬 MAC연산으로 순전파 및 역전파를 모두 수행한다. 지도 학습을 위해, 제안된 시스템은 28nm CMOS 기술로 제작된 두 개의 프로세서 칩과 FPGA를 사용하여 두 레이어의 신경망에서 검증되었다. 제안된 시스템은 아날로그 기반 MAC을 위한 보정 회로 없이 동일한 아날로그 기반 MAC을 통해 학습 데이터를 학습함으로써 칩 대 칩 변화 및 아날로그 동작의 불완전성을 보상하였다. 제안된 시스템은 1-b (+1, 0, -1) 배치 업데이트를 사용하여 22×22의 사이즈로 조정된 MNIST 데이터 셋의 분류에서 약 97%의 인식률을 달성하였다.


 

*일시 11월 11일 (금), 16시~


* 장소 NTH412호

*ZOOM https://handong.zoom.us/j/86244954271

*회의ID 862 4495 4271

*문의 4단계 BK21 AI사업단 (260-3150)



") + .content("

한동대학교 BK21 인공지능 사업단

2022학년도 2학기 참여대학원생 등록서류 제출 및 연구장학금 신청 안내

 

 

한동대학교 전산전자공학과 4단계 BK21 ‘산업혁신을 위한 AI 고급 인재교육연구단’ (BK21 인공지능사업단)에서 다음과 같이 등록 서류를 제출하여주시기 바랍니다.

 


1. 4단계 BK21 참여대학원생 기준 (다음의 조건을 모두 충족한 자)

BK21 참여교수의 지도학생 중 전일제(4대보험에 가입되어 있지 않은 학생)로 등록(연구생 등록 포함)한 석·박사과정 대학원생으로 다음 각 호에 해당하는 자

-입학한 지 2년이 지나지 않은 석사과정생

-입학한 지 4년이 지나지 않은 박사과정생 및 박사 수료생

-입학한 지 6년이 지나지 않은 석박통합과정생 및 석박통합과정 수료생

(위의 기간 기산 시 휴학 및 군복무 기간은 제외함).

 

위의 자격을 충족한 경우 ‘참여대학원생’으로 등록되어 ‘지원대학원생’ 선발 기회 등 BK21 사업의 지원을 받을 수 있음.

 

2. 지원대학원생 선발 및 연구장학금 지급

1) 참여대학원생으로 등록된 학생 중 70% 이내의 대학원생을 ‘지원대학원생’으로 선발해 연구장학금을 지급함.

2) 지원기간: 2022.09.01.~2023.02.28. (6개월 단위로 선발)

3) 선발기준: 지도교수 추천을 받은 참여대학원생 중 연구/프로젝트 성과 평가에 의해 선발

4) 역할 및 임무

- BK21 참여교수 연구실에서 논문 연구 및 산학 프로젝트를 성실히 수행 (주 40시간 이상)

- 사업단이 주관하는 각종 세미나, 포럼 등의 학술 활동에 참여

- 사업단이 요구하는 성과 자료 보고

 


3. 참여대학원생 등록서류 제출안내(등록서류는 단순참여, 장학금 지원 받는 학생 모두 제출해주세요.)

1) 첨부된 제출서류 다운 및 작성 후 BK21 사업단 사무실로 서류 제출.

2) 지도교수로부터 지원대학원생(장학금 받는 학생)으로 추천받은 대학원생은 5.제출서류 함께 제출

 

4. 서류 제출 기간: 2022년 8월 29일(월) 13:00 - 9월 7일(수) 17:00 (제출기한 엄수)




5. 제출서류

- 연구자등록번호 발급 방법

: KRI(한국연구업적통합정보시스템 http://www.kri.go.kr)에 접속 회원가입→연구자등록번호 발급 

  (가입 시 소속을 반드시 ‘한동대학교’로 가입) 



1) 재학증명서 1부. 연구생등록자의 경우 연구생등록증 1부(2022년 9월 1일자 기준으로 제출)

2) 개인정보 수집 이용 제공 동의서 1부. (BK사업에 처음 참여하는 학생만 제출)

3) 참여인력 서약서 1부. 

4) 참여대학원생 확약서 1부.

5) BK21 연구장학금 신청서 1부. (지원대학원생-BK장학금 받는 학생만 제출)

6) 전산전자공학과 학기 보고서 1부.

7) 재학증명서 1부.(9월 1일 기준)

 

8) 연구재단 필수 제출 서류 '4대 보험 가입 증명서' 1부. (22.10.1일 기준일로하여 메일로 회신)

(**10월1일 기준으로 출력 후 제출 바랍니다. 9월에는 제출하지 않아도 됩니다!)

- 출력 방법: 4대 사회보험 포털서비스(http://www.4insure.or.kr) 로그인(회원가입, 공인인증서 필요) → 상단 메뉴 증명서발급(가입내역확인) 클릭 후 출력

 

9) 대학원 성적표 1부. (신입생은 제출X)

 

<한국연구재단 필수 수강!!-참여기간 중 1회 수강 후 수료증 제출해야함, 교육 미이수자 및  22-2학기 신입생만 수강하면 됩니다.>

10) 온라인 교육 수료증 (http://alpha-campus.kr/) 에 접속하여 로그인 후 상단 메뉴의 '탐색'->'온라인교육' -> '건강한 연구환경 조성을 위한 인권침해예방교육'클릭 ->'수강신청' 클릭 후 팝업창에서 수강신청 정보 확인 및 '신청완료'-> '학습'-> '학습중과정'-> '건강한 연구환경 조성을 위한 인권침해예방교육' 순서대로 클릭 후 '학습하기'

컨텐츠 수강 후 ‘MY'-> '학습이력'클릭 후 수료증 발급 및 보관) 

*수료증은 메일로 회신부탁합니다. 

 

11) 통장사본 및 신분증 사본 각 1부.

 

※ 외국인 참여대학원생의 경우 외국인 등록증 앞, 뒤 사본(D-2비자 여부 및 만료기한 확인) 제출.

※ 기존 참여대학원생이 지원할 경우: 2)개인정보 수집 이용 제공 동의서, 10)온라인 교육 수료증 제출 생략.

 

6. 서류 제출 및 문의처

1) BK21사업단 사무실: 뉴턴홀 309호 전산전자공학부 사무실 담당자 고라경(Tel: 260-3150)

2) 신청 시 모든 서류는 위 제출서류 순서대로 정리하여 원본 제출 바랍니다.

 

7. 유의사항: 제출된 서류는 반환하지 않으며, 허위사실 기재 시 선발을 취소함.

") .viewCnt(0) - .importance(true) - .pubDate(LocalDate.of(2022, Month.SEPTEMBER, 9)) - .expDate(LocalDate.of(2022, Month.SEPTEMBER, 15)) + .importance(false) + .pubDate(LocalDate.of(2023, Month.FEBRUARY, 9)) + .expDate(LocalDate.of(2023, Month.SEPTEMBER, 15)) .build()); noticeRepository.save(Notice.builder() .manager(l.get(2)) @@ -466,12 +475,12 @@ private void saveNotice() { noticeRepository.save(Notice.builder() .manager(l.get(3)) - .title("\"일본 IT 강독\" 2022년 2학기 첫번쨰 모임이 이번주 수요일 11월 09일 저녁 8시에 열립니다.") - .content("

 \"일본 IT 강독\"   2022년 2학기 첫번? 모임이 이번주  수요일 11월 09일 저녁 8시에 열립니다.



2022년2학기 일본IT학회 주관 \"일본 IT 강독\"



일본의  IT시스템 개발문서, IT 트렌드 관련 일본어 기사 등을 같이 읽어 나가는 시간입니다. 일본은 IT시스템 개발과정에서 Documentation을 아주 철저히 하고 있습니다. 따라서 일본 IT 취업시 일본어를 읽고 쓰는 능력은 회화능력 이상으로 중요합니다. IT관련 일본어 문서를 읽어나가며 일본어를 더 공부하고 싶게 하고자 합니다.



본 시간은 22년이상 일본에서 IT개발자로서 일본인들과 함께 일해오신 일본 도레이쿠 김종환 대표님이 직접 강의합니다.



참여자격 : 일본어 초급 수준(한동대학교 일본어  I 수강 수준)



일정

제 1 차 모임. 11월 09일(수 저녁 8시) 11주차 

제 2 차 모임. 11월 23일(수 저녁 8시) 13주차 

 

줌 접속 주소

https://handong.zoom.us/j/82808657679



- 참석자에게는 마일리지가 부여됩니다.

- 문의 : 김기석 교수(peterkim@handong.edu) ,박훈성(01043417017 / 21800333@handong.ac.kr) 

") + .title("일본 IT 강독 2022년 2학기 첫번쨰 모임이 이번주 수요일 11월 09일 저녁 8시에 열립니다.") + .content("

 일본 IT 강독   2022년 2학기 첫번? 모임이 이번주  수요일 11월 09일 저녁 8시에 열립니다.



2022년2학기 일본IT학회 주관 \"일본 IT 강독\"



일본의  IT시스템 개발문서, IT 트렌드 관련 일본어 기사 등을 같이 읽어 나가는 시간입니다. 일본은 IT시스템 개발과정에서 Documentation을 아주 철저히 하고 있습니다. 따라서 일본 IT 취업시 일본어를 읽고 쓰는 능력은 회화능력 이상으로 중요합니다. IT관련 일본어 문서를 읽어나가며 일본어를 더 공부하고 싶게 하고자 합니다.



본 시간은 22년이상 일본에서 IT개발자로서 일본인들과 함께 일해오신 일본 도레이쿠 김종환 대표님이 직접 강의합니다.



참여자격 : 일본어 초급 수준(한동대학교 일본어  I 수강 수준)



일정

제 1 차 모임. 11월 09일(수 저녁 8시) 11주차 

제 2 차 모임. 11월 23일(수 저녁 8시) 13주차 

 

줌 접속 주소

https://handong.zoom.us/j/82808657679



- 참석자에게는 마일리지가 부여됩니다.

- 문의 : 김기석 교수(peterkim@handong.edu) ,박훈성(01043417017 / 21800333@handong.ac.kr) 

") .viewCnt(0) .importance(true) - .pubDate(LocalDate.of(2022, Month.NOVEMBER, 1)) - .expDate(LocalDate.of(2022, Month.NOVEMBER, 7)) + .pubDate(LocalDate.of(2023, Month.JANUARY, 1)) + .expDate(LocalDate.of(2023, Month.JULY, 7)) .build()); noticeRepository.save(Notice.builder() .manager(l.get(2)) @@ -484,30 +493,30 @@ private void saveNotice() { .build()); noticeRepository.save(Notice.builder() .manager(l.get(3)) - .title("SW Festival ends") - .content("See you next year!") + .title(" 2022 한동대 C프로그래밍 컨테스트 안내") + .content("
  • 일시 : 2022년 12월 9일 15주차 금요일 오후 8시~10시(120분)

  • 대상 : 전교생 중 1학년 또는 SW관련 전공이 아닌 학생

  • 시험방법 : Replit.com 사이트에 온라인 접속 후 문제를 풀어 제출함(시험 중 구글링 또는 본인의 소스 참조 가능, 타인과 대화, 메시징, 이메일 금지)

  • 출제범위 : C프로그래밍 수업 전반

  • 문제 수 : 10문제 이내



▶ 컨테스트 관련 질문응답 : www.classum.com/EXZRQI 



▶ 시험 서버 접속 및 테스트 문제 풀이 : 2022년 12월 9일(금) 18시까지

  • Replit.com 링크에 접속한다. (Chrome 사용 권장)

  • https://replit.com/teams/join/whodntufxzxetztsmzbadhqtdqrfbzpn-HGUCContest

  • 만일 회원가입이 되어 있지 않다면 가입 후 로그인한다.

  • 본인 Profile에서 반드시 First name에 자신의 한글이름, Last name에 자신의 학번8자리를 기입할 것. (인적사항 확인불가 시 수상 제외)

  • 회원가입 후 이메일주소 인증할 것

  • 테스트용 문제를 확인하고, 문제를 해결하는 코드를 작성하여 실행해본다.

  • 테스트케이스를 실행해본 후, 제출(submit)한다.



▶ 컨테스트 참여 시 주의사항

  • 시험 시작 전에 Replit.com 링크에 접속한다. (Chrome 사용 권장)

  • https://replit.com/teams/join/whodntufxzxetztsmzbadhqtdqrfbzpn-HGUCContest

  • 시작시간이 되면 문제가 공개됩니다. (새로고침 필수)

  • 제한 시간 내에 공개된 문제를 최대한 해결하여 테스트케이스를 실행한 후, 제출(submit)한다. 반드시 순서대로 문제를 풀지 않아도 됨

  • 다음의 경우에는 제출 무효로 처리됨

    • Due date가 지난 후, 제출하는 경우

    • Due date가 지난 후, 문제를 다시 열어 보는 경우

    • Due date가 지난 후, 자신의 코드를 수정한 경우

    • 동일계정으로 동시에 2개 이상의 Replit.com 접속한 경우

▶ 채점 기준

  • 기준 1 : 성공적으로 해결하여 테스트케이스 모두 통과한 후, 제출한 문제 갯수가 많은 순

  • 기준 2 : 해결한 모든 문제의 평균제출시간이 빠른 순

  • 기준 3 : 미완성 제출 경우 통과된 테스트 케이스가 많은 순



▶ 참가자 혜택

  • 1문제 이상을 성공 제출한 모든 참가자에게 소중대 마일리지 적립

  • 우수자에게는 상금 지급 (1학년 또는 SW전공이력이 없는 학생만 수상)

    • 총상금 200만원

    • 대상 1명 : 20만원

    • 최우수상 5명 내외 : 각 15만원

    • 우수상 10명 내외 : 각 10만원

    • 장려상 : 각 5만원

  • 수상 규모는 변동될 수 있음



") .viewCnt(0) .importance(true) .pubDate(LocalDate.of(2022, Month.NOVEMBER, 2)) - .expDate(LocalDate.of(2022, Month.NOVEMBER, 9)) + .expDate(LocalDate.of(2023, Month.NOVEMBER, 9)) .build()); noticeRepository.save(Notice.builder() .manager(l.get(2)) .title("[지역선도대학] 2022 대경권 대학생 AI프로그래밍 경진대회 개최") .content("

2022 대경권 대학생 AI프로그래밍 경진대회 개최 









지역선도대학육성사업에서는 재학생들의 인공지능(AI) 컴퓨팅 사고역량, 프로그래밍 역량 문제해결 역량 강화 등을 위하여 2022 대경권 대학생 AI프로그래밍 경진대회를 개최합니다.





■ 접수기간: 2022. 10. 26.(수) ~ 11. 9.(수) 까지 

■ 접수방법: 대회 홈페이지에서 직접 신청(참가비 무료)



대회 홈페이지 주소 및 자세한 내용은 지역선도대학육성사업 홈페이지 → 온라인신청 → 진행프로그램에서 가능

(https://spoke.knu.ac.kr/03_sub/01_sub.html)



■ 문의 : 안영은 연구원(054-260-3124, aye3384@handong.edu)

") .viewCnt(0) - .importance(true) - .pubDate(LocalDate.of(2022, Month.OCTOBER, 21)) - .expDate(LocalDate.of(2022, Month.OCTOBER, 27)) + .importance(false) + .pubDate(LocalDate.of(2023, Month.OCTOBER, 21)) + .expDate(LocalDate.of(2023, Month.OCTOBER, 27)) .build()); noticeRepository.save(Notice.builder() .manager(l.get(0)) .title("[CSEE Lab Week] Lab 토크쇼 관련 사전 질문") - .content("

안녕하세요. 컴퓨터 공학 전공 주임 안민규 교수입니다.

 

이전 글에 공지된 것처럼 다음 주 9주차에는 전산전자공학부/전산전자공학과가 CSEE Lab Week가 진행됩니다.

관련 글> https://hisnet.handong.edu/myboard/read.php?id=35135&Board=B0029

 

연구실에 관심이 있거나, 2023-1학기 공학프로젝트 기획 수강을 계획하는 학생들에게는 큰 도움이 될 것 같습니다.

 

 

각 연구실에 대하여 궁금한 점은 9주차 동안 진행되는 Lab 멘토링을 통해 문의하고 답변을 받기 바랍니다.

또한, 목요일 18:30에는 CSEE 연구실, 연구실 생활, 졸업 프로젝트, 진로 등에 관하여 이야기를 교수님들과 나눌 수 있는 자리를 마련하였으니 많은 학생들이 참여하여 정보를 얻는 시간이 되길 빕니다.

 

 

관련하여 현재 사전 질문을 받고 있습니다. 아래의 링크를 통하여 묻고 싶은 사항을 남겨주시기 바랍니다.

 

 

\"d24;\" Lab토크쇼(10/27(목) 18시30분~) 사전질문 작성

제출된 질문은 Lab 토크쇼에서 활용되며, 추첨을 통하여 커피쿠폰을 드립니다.

https://forms.gle/a8XWyqXcTec8vdwq5

 

 

 

 

안민규 교수.

") + .content("

안녕하세요. 컴퓨터 공학 전공 주임 안민규 교수입니다.

 

이전 글에 공지된 것처럼 다음 주 9주차에는 전산전자공학부공학부/전산전자공학부공학과가 CSEE Lab Week가 진행됩니다.

관련 글> https://hisnet.handong.edu/myboard/read.php?id=35135&Board=B0029

 

연구실에 관심이 있거나, 2023-1학기 공학프로젝트 기획 수강을 계획하는 학생들에게는 큰 도움이 될 것 같습니다.

 

 

각 연구실에 대하여 궁금한 점은 9주차 동안 진행되는 Lab 멘토링을 통해 문의하고 답변을 받기 바랍니다.

또한, 목요일 18:30에는 CSEE 연구실, 연구실 생활, 졸업 프로젝트, 진로 등에 관하여 이야기를 교수님들과 나눌 수 있는 자리를 마련하였으니 많은 학생들이 참여하여 정보를 얻는 시간이 되길 빕니다.

 

 

관련하여 현재 사전 질문을 받고 있습니다. 아래의 링크를 통하여 묻고 싶은 사항을 남겨주시기 바랍니다.

 

 

\"d24;\" Lab토크쇼(10/27(목) 18시30분~) 사전질문 작성

제출된 질문은 Lab 토크쇼에서 활용되며, 추첨을 통하여 커피쿠폰을 드립니다.

https://forms.gle/a8XWyqXcTec8vdwq5

 

 

 

 

안민규 교수.

") .viewCnt(0) - .importance(true) + .importance(false) .pubDate(LocalDate.of(2022, Month.NOVEMBER, 2)) - .expDate(LocalDate.of(2022, Month.NOVEMBER, 9)) + .expDate(LocalDate.of(2023, Month.NOVEMBER, 9)) .build()); } @@ -515,1006 +524,1455 @@ private void saveNotice() { private void saveStudent() { studentRepository.save(Student.builder() - .name("박성진") - .department(departementRepository.findByName("전산전자")) - .studentNum("21700266") - .semester(8) - .major1(majorRepository.findByName("컴퓨터공학심화전공")) - .major2(majorRepository.findByName("-")) - .phone("010-9484-4321") - .email("david@handong.ac.kr") - .profile("profile.url") - .blog("blog.com") - .githubId("@davidpiao.github") - .loginCnt(0L) - .readme("david's readme") - .build()); + .name("박성진") + .department(departementRepository.findByName("전산전자공학부")) + .studentNum("21700266") + .semester(8) + .major1(majorRepository.findByName("컴퓨터공학심화전공")) + .major2(majorRepository.findByName("-")) + .phone("010-9484-4321") + .email("david@handong.ac.kr") + .profile("profile.url") + .blog("blog.com") + .githubId("@davidpiao.github") + .loginCnt(0L) + .readme("david's readme") + .build()); studentRepository.save(Student.builder() - .name("안병웅") - .department(departementRepository.findByName("생명과학")) - .studentNum("21600000") - .semester(6) - .major1(majorRepository.findByName("생명과학전공")) - .major2(majorRepository.findByName("-")) - .phone("010-1623-1512") - .email("mh03@handong.ac.kr") - .profile("profile.url") - .blog("blog.com") - .githubId("@wooong.github") - .loginCnt(0L) - .readme("an's readme") - .build()); + .name("안병웅") + .department(departementRepository.findByName("생명과학부")) + .studentNum("21600000") + .semester(6) + .major1(majorRepository.findByName("생명과학전공")) + .major2(majorRepository.findByName("-")) + .phone("010-1623-1512") + .email("mh03@handong.ac.kr") + .profile("profile.url") + .blog("blog.com") + .githubId("@wooong.github") + .loginCnt(0L) + .readme("an's readme") + .build()); studentRepository.save(Student.builder() - .name("홍성헌") - .department(departementRepository.findByName("커뮤니케이션")) - .studentNum("21800929") - .semester(8) - .major1(majorRepository.findByName("공연영상학전공")) - .major2(majorRepository.findByName("언로정보학전공")) - .phone("010-1623-3322") - .email("hong@handong.ac.kr") - .profile("profile.url") - .blog("blog.com") - .githubId("@hong.github") - .loginCnt(0L) - .readme("hong's readme") - .build()); + .name("홍성헌") + .department(departementRepository.findByName("커뮤니케이션학부")) + .studentNum("21800929") + .semester(8) + .major1(majorRepository.findByName("공연영상학전공")) + .major2(majorRepository.findByName("언론정보학전공")) + .phone("010-1623-3322") + .email("hong@handong.ac.kr") + .profile("profile.url") + .blog("blog.com") + .githubId("@hong.github") + .loginCnt(0L) + .readme("hong's readme") + .build()); studentRepository.save(Student.builder() - .name("이인혁") - .department(departementRepository.findByName("기계제어")) - .studentNum("21700032") - .semester(5) - .major1(majorRepository.findByName("전자제어공학전공")) - .major2(majorRepository.findByName("기계공학전공")) - .phone("010-4983-6555") - .email("lee@handong.ac.kr") - .profile("profile.url") - .blog("blog.com") - .githubId("@ee.github") - .loginCnt(0L) - .readme("lee's readme") - .build()); + .name("이인혁") + .department(departementRepository.findByName("기계제어공학부")) + .studentNum("21700032") + .semester(5) + .major1(majorRepository.findByName("전자제어공학전공")) + .major2(majorRepository.findByName("기계공학전공")) + .phone("010-4983-6555") + .email("lee@handong.ac.kr") + .profile("profile.url") + .blog("blog.com") + .githubId("@ee.github") + .loginCnt(0L) + .readme("lee's readme") + .build()); studentRepository.save(Student.builder() - .name("정석민") - .department(departementRepository.findByName("콘텐츠융합디자인")) - .studentNum("22000432") - .semester(3) - .major1(majorRepository.findByName("시각디자인전공")) - .major2(majorRepository.findByName("-")) - .phone("010-4983-6555") - .email("jeong@handong.ac.kr") - .profile("profile.url") - .blog("blog.com") - .githubId("@jeong.github") - .loginCnt(0L) - .readme("jeong's readme") - .build()); + .name("정석민") + .department(departementRepository.findByName("콘텐츠융합디자인학부")) + .studentNum("22000432") + .semester(3) + .major1(majorRepository.findByName("시각디자인전공")) + .major2(majorRepository.findByName("-")) + .phone("010-4983-6555") + .email("jeong@handong.ac.kr") + .profile("profile.url") + .blog("blog.com") + .githubId("@jeong.github") + .loginCnt(0L) + .readme("jeong's readme") + .build()); studentRepository.save(Student.builder() - .name("송다빈") - .department(departementRepository.findByName("법학부")) - .studentNum("22000332") - .semester(3) - .major1(majorRepository.findByName("US & International Law")) - .major2(majorRepository.findByName("한국법전공")) - .phone("010-7788-0142") - .email("song@handong.ac.kr") - .profile("profile.url") - .blog("blog.com") - .githubId("@song.github") - .loginCnt(0L) - .readme("song's readme") - .build()); + .name("송다빈") + .department(departementRepository.findByName("법학부")) + .studentNum("22000332") + .semester(3) + .major1(majorRepository.findByName("US & International Law")) + .major2(majorRepository.findByName("한국법전공")) + .phone("010-7788-0142") + .email("song@handong.ac.kr") + .profile("profile.url") + .blog("blog.com") + .githubId("@song.github") + .loginCnt(0L) + .readme("song's readme") + .build()); studentRepository.save(Student.builder() - .name("김한동") - .department(departementRepository.findByName("전산전자")) - .studentNum("22200000") - .semester(5) - .major1(majorRepository.findByName("컴퓨터공학전공")) - .major2(majorRepository.findByName("생명과학전공")) - .phone("010-1234-1234") - .email("kim@handong.ac.kr") - .profile("profile.url") - .blog("blog.com") - .githubId("@kim.github") - .loginCnt(0L) - .readme("kim's readme") - .build()); + .name("김한동") + .department(departementRepository.findByName("전산전자공학부")) + .studentNum("22200000") + .semester(5) + .major1(majorRepository.findByName("컴퓨터공학전공")) + .major2(majorRepository.findByName("생명과학전공")) + .phone("010-1234-1234") + .email("kim@handong.ac.kr") + .profile("profile.url") + .blog("blog.com") + .githubId("@kim.github") + .loginCnt(0L) + .readme("kim's readme") + .build()); studentRepository.save(Student.builder() - .name("박한동") - .department(departementRepository.findByName("국제어문")) - .studentNum("22200001") - .semester(3) - .major1(majorRepository.findByName("국제지역학전공")) - .major2(majorRepository.findByName("컴퓨터공학전공")) - .phone("010-1234-5678") - .email("park@handong.ac.kr") - .profile("profile.url") - .blog("blog.com") - .githubId("@park.github") - .loginCnt(0L) - .readme("park's readme") - .build()); + .name("박한동") + .department(departementRepository.findByName("국제어문학부")) + .studentNum("22200001") + .semester(3) + .major1(majorRepository.findByName("국제지역학전공")) + .major2(majorRepository.findByName("컴퓨터공학전공")) + .phone("010-1234-5678") + .email("park@handong.ac.kr") + .profile("profile.url") + .blog("blog.com") + .githubId("@park.github") + .loginCnt(0L) + .readme("park's readme") + .build()); studentRepository.save(Student.builder() - .name("이한동") - .department(departementRepository.findByName("경영경제")) - .studentNum("22200002") - .semester(5) - .major1(majorRepository.findByName("경영학전공")) - .major2(majorRepository.findByName("컴퓨터공학전공")) - .phone("010-5678-1234") - .email("lee@handong.ac.kr") - .profile("profile.url") - .blog("blog.com") - .githubId("@lee.github") - .loginCnt(0L) - .readme("lee's readme") - .build()); + .name("이한동") + .department(departementRepository.findByName("경영경제학부")) + .studentNum("22200002") + .semester(5) + .major1(majorRepository.findByName("경영학전공")) + .major2(majorRepository.findByName("컴퓨터공학전공")) + .phone("010-5678-1234") + .email("lee@handong.ac.kr") + .profile("profile.url") + .blog("blog.com") + .githubId("@lee.github") + .loginCnt(0L) + .readme("lee's readme") + .build()); studentRepository.save(Student.builder() - .name("정한동") - .department(departementRepository.findByName("법학부")) - .studentNum("22200003") - .semester(6) - .major1(majorRepository.findByName("한국법전공")) - .major2(majorRepository.findByName("컴퓨터공학전공")) - .phone("010-1111-1111") - .email("jeong@handong.ac.kr") - .profile("profile.url") - .blog("blog.com") - .githubId("@jeong.github") - .loginCnt(0L) - .readme("jeong's readme") - .build()); + .name("정한동") + .department(departementRepository.findByName("법학부")) + .studentNum("22200003") + .semester(6) + .major1(majorRepository.findByName("한국법전공")) + .major2(majorRepository.findByName("컴퓨터공학전공")) + .phone("010-1111-1111") + .email("jeong@handong.ac.kr") + .profile("profile.url") + .blog("blog.com") + .githubId("@jeong.github") + .loginCnt(0L) + .readme("jeong's readme") + .build()); studentRepository.save(Student.builder() - .name("우한동") - .department(departementRepository.findByName("커뮤니케이션")) - .studentNum("22200004") - .semester(6) - .major1(majorRepository.findByName("공연영상학전공")) - .major2(majorRepository.findByName("컴퓨터공학전공")) - .phone("010-2222-3333") - .email("woo@handong.ac.kr") - .profile("profile.url") - .blog("blog.com") - .githubId("@woo.github") - .loginCnt(0L) - .readme("woo's readme") - .build()); + .name("우한동") + .department(departementRepository.findByName("커뮤니케이션학부")) + .studentNum("22200004") + .semester(6) + .major1(majorRepository.findByName("공연영상학전공")) + .major2(majorRepository.findByName("컴퓨터공학전공")) + .phone("010-2222-3333") + .email("woo@handong.ac.kr") + .profile("profile.url") + .blog("blog.com") + .githubId("@woo.github") + .loginCnt(0L) + .readme("woo's readme") + .build()); studentRepository.save(Student.builder() - .name("위한동") - .department(departementRepository.findByName("상담복지")) - .studentNum("22200005") - .semester(6) - .major1(majorRepository.findByName("사회복지학전공")) - .major2(majorRepository.findByName("컴퓨터공학전공")) - .phone("010-4444-1234") - .email("wi@handong.ac.kr") - .profile("profile.url") - .blog("blog.com") - .githubId("@wi.github") - .loginCnt(0L) - .readme("wi's readme") - .build()); + .name("위한동") + .department(departementRepository.findByName("상담심리사회복지학부")) + .studentNum("22200005") + .semester(6) + .major1(majorRepository.findByName("사회복지학전공")) + .major2(majorRepository.findByName("컴퓨터공학전공")) + .phone("010-4444-1234") + .email("wi@handong.ac.kr") + .profile("profile.url") + .blog("blog.com") + .githubId("@wi.github") + .loginCnt(0L) + .readme("wi's readme") + .build()); studentRepository.save(Student.builder() - .name("하한동") - .department(departementRepository.findByName("공간환경시스템")) - .studentNum("22200006") - .semester(8) - .major1(majorRepository.findByName("도시환경공학전공")) - .major2(majorRepository.findByName("컴퓨터공학전공")) - .phone("010-9999-1111") - .email("ha@handong.ac.kr") - .profile("profile.url") - .blog("blog.com") - .githubId("@ha.github") - .loginCnt(0L) - .readme("ha's readme") - .build()); + .name("하한동") + .department(departementRepository.findByName("공간환경시스템공학부")) + .studentNum("22200006") + .semester(8) + .major1(majorRepository.findByName("도시환경공학전공")) + .major2(majorRepository.findByName("컴퓨터공학전공")) + .phone("010-9999-1111") + .email("ha@handong.ac.kr") + .profile("profile.url") + .blog("blog.com") + .githubId("@ha.github") + .loginCnt(0L) + .readme("ha's readme") + .build()); studentRepository.save(Student.builder() - .name("마한동") - .department(departementRepository.findByName("콘텐츠융합디자인")) - .studentNum("22200007") - .semester(4) - .major1(majorRepository.findByName("컴퓨터공학전공")) - .major2(majorRepository.findByName("컴퓨터공학전공")) - .phone("010-4312-4312") - .email("ma@handong.ac.kr") - .profile("profile.url") - .blog("blog.com") - .githubId("@ma.github") - .loginCnt(0L) - .readme("ma's readme") - .build()); + .name("마한동") + .department(departementRepository.findByName("콘텐츠융합디자인학부")) + .studentNum("22200007") + .semester(4) + .major1(majorRepository.findByName("컴퓨터공학전공")) + .major2(majorRepository.findByName("컴퓨터공학전공")) + .phone("010-4312-4312") + .email("ma@handong.ac.kr") + .profile("profile.url") + .blog("blog.com") + .githubId("@ma.github") + .loginCnt(0L) + .readme("ma's readme") + .build()); studentRepository.save(Student.builder() - .name("유한동") - .department(departementRepository.findByName("기계제어")) - .studentNum("22200008") - .semester(6) - .major1(majorRepository.findByName("기계공학전공")) - .major2(majorRepository.findByName("컴퓨터공학전공")) - .phone("010-3434-2323") - .email("yu@handong.ac.kr") - .profile("profile.url") - .blog("blog.com") - .githubId("@yu.github") - .loginCnt(0L) - .readme("yu's readme") - .build()); + .name("유한동") + .department(departementRepository.findByName("기계제어공학부")) + .studentNum("22200008") + .semester(6) + .major1(majorRepository.findByName("기계공학전공")) + .major2(majorRepository.findByName("컴퓨터공학전공")) + .phone("010-3434-2323") + .email("yu@handong.ac.kr") + .profile("profile.url") + .blog("blog.com") + .githubId("@yu.github") + .loginCnt(0L) + .readme("yu's readme") + .build()); studentRepository.save(Student.builder() - .name("진한동") - .department(departementRepository.findByName("ICT창업학부")) - .studentNum("22200009") - .semester(7) - .major1(majorRepository.findByName("ICT 융합전공")) - .major2(majorRepository.findByName("컴퓨터공학전공")) - .phone("010-8787-8787") - .email("jin@handong.ac.kr") - .profile("profile.url") - .blog("blog.com") - .githubId("@jin.github") - .loginCnt(0L) - .readme("jin's readme") - .build()); + .name("진한동") + .department(departementRepository.findByName("ICT 창업학부")) + .studentNum("22200009") + .semester(7) + .major1(majorRepository.findByName("ICT 융합전공")) + .major2(majorRepository.findByName("컴퓨터공학전공")) + .phone("010-8787-8787") + .email("jin@handong.ac.kr") + .profile("profile.url") + .blog("blog.com") + .githubId("@jin.github") + .loginCnt(0L) + .readme("jin's readme") + .build()); studentRepository.save(Student.builder() - .name("김건휘") - .department(departementRepository.findByName("전산전자")) - .studentNum("21700234") - .semester(2) - .major1(majorRepository.findByName("컴퓨터공학전공")) - .major2(majorRepository.findByName("생명과학전공")) - .phone("010-1234-1234") - .email("kim@handong.ac.kr") - .profile("profile.url") - .blog("blog.com") - .githubId("@kim.github") - .loginCnt(0L) - .readme("kim's readme") - .build()); + .name("김건휘") + .department(departementRepository.findByName("전산전자공학부")) + .studentNum("21700234") + .semester(2) + .major1(majorRepository.findByName("컴퓨터공학전공")) + .major2(majorRepository.findByName("생명과학전공")) + .phone("010-1234-1234") + .email("kim@handong.ac.kr") + .profile("profile.url") + .blog("blog.com") + .githubId("@kim.github") + .loginCnt(0L) + .readme("kim's readme") + .build()); studentRepository.save(Student.builder() - .name("이도경") - .department(departementRepository.findByName("국제어문")) - .studentNum("21200012") - .semester(9) - .major1(majorRepository.findByName("국제지역학전공")) - .major2(majorRepository.findByName("컴퓨터공학전공")) - .phone("010-1234-5678") - .email("park@handong.ac.kr") - .profile("profile.url") - .blog("blog.com") - .githubId("@park.github") - .loginCnt(0L) - .readme("park's readme") - .build()); + .name("이도경") + .department(departementRepository.findByName("국제어문학부")) + .studentNum("21200012") + .semester(9) + .major1(majorRepository.findByName("국제지역학전공")) + .major2(majorRepository.findByName("컴퓨터공학전공")) + .phone("010-1234-5678") + .email("park@handong.ac.kr") + .profile("profile.url") + .blog("blog.com") + .githubId("@park.github") + .loginCnt(0L) + .readme("park's readme") + .build()); studentRepository.save(Student.builder() - .name("정민수") - .department(departementRepository.findByName("경영경제")) - .studentNum("22200032") - .semester(5) - .major1(majorRepository.findByName("경영학전공")) - .major2(majorRepository.findByName("컴퓨터공학전공")) - .phone("010-6655-4232") - .email("lee@handong.ac.kr") - .profile("profile.url") - .blog("blog.com") - .githubId("@lee.github") - .loginCnt(0L) - .readme("lee's readme") - .build()); + .name("정민수") + .department(departementRepository.findByName("경영경제학부")) + .studentNum("22200032") + .semester(5) + .major1(majorRepository.findByName("경영학전공")) + .major2(majorRepository.findByName("컴퓨터공학전공")) + .phone("010-6655-4232") + .email("lee@handong.ac.kr") + .profile("profile.url") + .blog("blog.com") + .githubId("@lee.github") + .loginCnt(0L) + .readme("lee's readme") + .build()); studentRepository.save(Student.builder() - .name("조수아") - .department(departementRepository.findByName("법학부")) - .studentNum("21600223") - .semester(5) - .major1(majorRepository.findByName("한국법전공")) - .major2(majorRepository.findByName("컴퓨터공학전공")) - .phone("010-9292-9292") - .email("jeong@handong.ac.kr") - .profile("profile.url") - .blog("blog.com") - .githubId("@jeong.github") - .loginCnt(0L) - .readme("jeong's readme") - .build()); + .name("조수아") + .department(departementRepository.findByName("법학부")) + .studentNum("21600223") + .semester(5) + .major1(majorRepository.findByName("한국법전공")) + .major2(majorRepository.findByName("컴퓨터공학전공")) + .phone("010-9292-9292") + .email("jeong@handong.ac.kr") + .profile("profile.url") + .blog("blog.com") + .githubId("@jeong.github") + .loginCnt(0L) + .readme("jeong's readme") + .build()); studentRepository.save(Student.builder() - .name("김빛나리") - .department(departementRepository.findByName("커뮤니케이션")) - .studentNum("22200023") - .semester(3) - .major1(majorRepository.findByName("공연영상학전공")) - .major2(majorRepository.findByName("컴퓨터공학전공")) - .phone("010-2332-4333") - .email("woo@handong.ac.kr") - .profile("profile.url") - .blog("blog.com") - .githubId("@woo.github") - .loginCnt(0L) - .readme("woo's readme") - .build()); + .name("김빛나리") + .department(departementRepository.findByName("커뮤니케이션학부")) + .studentNum("22200023") + .semester(3) + .major1(majorRepository.findByName("공연영상학전공")) + .major2(majorRepository.findByName("컴퓨터공학전공")) + .phone("010-2332-4333") + .email("woo@handong.ac.kr") + .profile("profile.url") + .blog("blog.com") + .githubId("@woo.github") + .loginCnt(0L) + .readme("woo's readme") + .build()); studentRepository.save(Student.builder() - .name("김혜린") - .department(departementRepository.findByName("상담복지")) - .studentNum("21900021") - .semester(4) - .major1(majorRepository.findByName("사회복지학전공")) - .major2(majorRepository.findByName("컴퓨터공학전공")) - .phone("010-4444-1234") - .email("wi@handong.ac.kr") - .profile("profile.url") - .blog("blog.com") - .githubId("@wi.github") - .loginCnt(0L) - .readme("wi's readme") - .build()); + .name("김혜린") + .department(departementRepository.findByName("상담심리사회복지학부")) + .studentNum("21900021") + .semester(4) + .major1(majorRepository.findByName("사회복지학전공")) + .major2(majorRepository.findByName("컴퓨터공학전공")) + .phone("010-4444-1234") + .email("wi@handong.ac.kr") + .profile("profile.url") + .blog("blog.com") + .githubId("@wi.github") + .loginCnt(0L) + .readme("wi's readme") + .build()); studentRepository.save(Student.builder() - .name("이소희") - .department(departementRepository.findByName("공간환경시스템")) - .studentNum("21800002") - .semester(9) - .major1(majorRepository.findByName("도시환경공학전공")) - .major2(majorRepository.findByName("컴퓨터공학전공")) - .phone("010-3221-6665") - .email("ha@handong.ac.kr") - .profile("profile.url") - .blog("blog.com") - .githubId("@ha.github") - .loginCnt(0L) - .readme("ha's readme") - .build()); + .name("이소희") + .department(departementRepository.findByName("공간환경시스템공학부")) + .studentNum("21800002") + .semester(9) + .major1(majorRepository.findByName("도시환경공학전공")) + .major2(majorRepository.findByName("컴퓨터공학전공")) + .phone("010-3221-6665") + .email("ha@handong.ac.kr") + .profile("profile.url") + .blog("blog.com") + .githubId("@ha.github") + .loginCnt(0L) + .readme("ha's readme") + .build()); studentRepository.save(Student.builder() - .name("이소연") - .department(departementRepository.findByName("콘텐츠융합디자인")) - .studentNum("21400025") - .semester(2) - .major1(majorRepository.findByName("컴퓨터공학전공")) - .major2(majorRepository.findByName("컴퓨터공학전공")) - .phone("010-4211-1123") - .email("ma@handong.ac.kr") - .profile("profile.url") - .blog("blog.com") - .githubId("@ma.github") - .loginCnt(0L) - .readme("ma's readme") - .build()); + .name("이소연") + .department(departementRepository.findByName("콘텐츠융합디자인학부")) + .studentNum("21400025") + .semester(2) + .major1(majorRepository.findByName("컴퓨터공학전공")) + .major2(majorRepository.findByName("컴퓨터공학전공")) + .phone("010-4211-1123") + .email("ma@handong.ac.kr") + .profile("profile.url") + .blog("blog.com") + .githubId("@ma.github") + .loginCnt(0L) + .readme("ma's readme") + .build()); studentRepository.save(Student.builder() - .name("이동영") - .department(departementRepository.findByName("기계제어")) - .studentNum("21100234") - .semester(10) - .major1(majorRepository.findByName("기계공학전공")) - .major2(majorRepository.findByName("컴퓨터공학전공")) - .phone("010-2311-9992") - .email("yu@handong.ac.kr") - .profile("profile.url") - .blog("blog.com") - .githubId("@yu.github") - .loginCnt(0L) - .readme("yu's readme") - .build()); + .name("이동영") + .department(departementRepository.findByName("기계제어공학부")) + .studentNum("21100234") + .semester(10) + .major1(majorRepository.findByName("기계공학전공")) + .major2(majorRepository.findByName("컴퓨터공학전공")) + .phone("010-2311-9992") + .email("yu@handong.ac.kr") + .profile("profile.url") + .blog("blog.com") + .githubId("@yu.github") + .loginCnt(0L) + .readme("yu's readme") + .build()); studentRepository.save(Student.builder() - .name("이연진") - .department(departementRepository.findByName("ICT창업학부")) - .studentNum("21800012") - .semester(9) - .major1(majorRepository.findByName("ICT 융합전공")) - .major2(majorRepository.findByName("컴퓨터공학전공")) - .phone("010-1234-0494") - .email("jin@handong.ac.kr") - .profile("profile.url") - .blog("blog.com") - .githubId("@jin.github") - .loginCnt(0L) - .readme("jin's readme") - .build()); + .name("이연진") + .department(departementRepository.findByName("ICT 창업학부")) + .studentNum("21800012") + .semester(9) + .major1(majorRepository.findByName("ICT 융합전공")) + .major2(majorRepository.findByName("컴퓨터공학전공")) + .phone("010-1234-0494") + .email("jin@handong.ac.kr") + .profile("profile.url") + .blog("blog.com") + .githubId("@jin.github") + .loginCnt(0L) + .readme("jin's readme") + .build()); studentRepository.save(Student.builder() - .name("김시온") - .department(departementRepository.findByName("전산전자")) - .studentNum("22100032") - .semester(2) - .major1(majorRepository.findByName("컴퓨터공학전공")) - .major2(majorRepository.findByName("생명과학전공")) - .phone("010-3232-6767") - .email("kim@handong.ac.kr") - .profile("profile.url") - .blog("blog.com") - .githubId("@kim.github") - .loginCnt(0L) - .readme("kim's readme") - .build()); + .name("김시온") + .department(departementRepository.findByName("전산전자공학부")) + .studentNum("22100032") + .semester(2) + .major1(majorRepository.findByName("컴퓨터공학전공")) + .major2(majorRepository.findByName("생명과학전공")) + .phone("010-3232-6767") + .email("kim@handong.ac.kr") + .profile("profile.url") + .blog("blog.com") + .githubId("@kim.github") + .loginCnt(0L) + .readme("kim's readme") + .build()); studentRepository.save(Student.builder() - .name("황유민") - .department(departementRepository.findByName("국제어문")) - .studentNum("21600432") - .semester(1) - .major1(majorRepository.findByName("국제지역학전공")) - .major2(majorRepository.findByName("컴퓨터공학전공")) - .phone("010-4322-9009") - .email("park@handong.ac.kr") - .profile("profile.url") - .blog("blog.com") - .githubId("@park.github") - .loginCnt(0L) - .readme("park's readme") - .build()); + .name("황유민") + .department(departementRepository.findByName("국제어문학부")) + .studentNum("21600432") + .semester(1) + .major1(majorRepository.findByName("국제지역학전공")) + .major2(majorRepository.findByName("컴퓨터공학전공")) + .phone("010-4322-9009") + .email("park@handong.ac.kr") + .profile("profile.url") + .blog("blog.com") + .githubId("@park.github") + .loginCnt(0L) + .readme("park's readme") + .build()); studentRepository.save(Student.builder() - .name("엄서영") - .department(departementRepository.findByName("경영경제")) - .studentNum("22000231") - .semester(5) - .major1(majorRepository.findByName("경영학전공")) - .major2(majorRepository.findByName("컴퓨터공학전공")) - .phone("010-6653-4231") - .email("lee@handong.ac.kr") - .profile("profile.url") - .blog("blog.com") - .githubId("@lee.github") - .loginCnt(0L) - .readme("lee's readme") - .build()); + .name("엄서영") + .department(departementRepository.findByName("경영경제학부")) + .studentNum("22000231") + .semester(5) + .major1(majorRepository.findByName("경영학전공")) + .major2(majorRepository.findByName("컴퓨터공학전공")) + .phone("010-6653-4231") + .email("lee@handong.ac.kr") + .profile("profile.url") + .blog("blog.com") + .githubId("@lee.github") + .loginCnt(0L) + .readme("lee's readme") + .build()); studentRepository.save(Student.builder() - .name("이찬유") - .department(departementRepository.findByName("법학부")) - .studentNum("21600423") - .semester(5) - .major1(majorRepository.findByName("한국법전공")) - .major2(majorRepository.findByName("컴퓨터공학전공")) - .phone("010-9292-9232") - .email("jeong@handong.ac.kr") - .profile("profile.url") - .blog("blog.com") - .githubId("@jeong.github") - .loginCnt(0L) - .readme("jeong's readme") - .build()); + .name("이찬유") + .department(departementRepository.findByName("법학부")) + .studentNum("21600423") + .semester(5) + .major1(majorRepository.findByName("한국법전공")) + .major2(majorRepository.findByName("컴퓨터공학전공")) + .phone("010-9292-9232") + .email("jeong@handong.ac.kr") + .profile("profile.url") + .blog("blog.com") + .githubId("@jeong.github") + .loginCnt(0L) + .readme("jeong's readme") + .build()); studentRepository.save(Student.builder() - .name("천그루") - .department(departementRepository.findByName("커뮤니케이션")) - .studentNum("22200026") - .semester(3) - .major1(majorRepository.findByName("공연영상학전공")) - .major2(majorRepository.findByName("컴퓨터공학전공")) - .phone("010-2312-4343") - .email("woo@handong.ac.kr") - .profile("profile.url") - .blog("blog.com") - .githubId("@woo.github") - .loginCnt(0L) - .readme("woo's readme") - .build()); + .name("천그루") + .department(departementRepository.findByName("커뮤니케이션학부")) + .studentNum("22200026") + .semester(3) + .major1(majorRepository.findByName("공연영상학전공")) + .major2(majorRepository.findByName("컴퓨터공학전공")) + .phone("010-2312-4343") + .email("woo@handong.ac.kr") + .profile("profile.url") + .blog("blog.com") + .githubId("@woo.github") + .loginCnt(0L) + .readme("woo's readme") + .build()); studentRepository.save(Student.builder() - .name("이하민") - .department(departementRepository.findByName("상담복지")) - .studentNum("21900032") - .semester(4) - .major1(majorRepository.findByName("사회복지학전공")) - .major2(majorRepository.findByName("컴퓨터공학전공")) - .phone("010-4444-4234") - .email("wi@handong.ac.kr") - .profile("profile.url") - .blog("blog.com") - .githubId("@wi.github") - .loginCnt(0L) - .readme("wi's readme") - .build()); + .name("이하민") + .department(departementRepository.findByName("상담심리사회복지학부")) + .studentNum("21910032") + .semester(4) + .major1(majorRepository.findByName("사회복지학전공")) + .major2(majorRepository.findByName("컴퓨터공학전공")) + .phone("010-4444-4234") + .email("wi@handong.ac.kr") + .profile("profile.url") + .blog("blog.com") + .githubId("@wi.github") + .loginCnt(0L) + .readme("wi's readme") + .build()); studentRepository.save(Student.builder() - .name("박관희") - .department(departementRepository.findByName("공간환경시스템")) - .studentNum("21800232") - .semester(9) - .major1(majorRepository.findByName("도시환경공학전공")) - .major2(majorRepository.findByName("컴퓨터공학전공")) - .phone("010-3221-6365") - .email("ha@handong.ac.kr") - .profile("profile.url") - .blog("blog.com") - .githubId("@ha.github") - .loginCnt(0L) - .readme("ha's readme") - .build()); + .name("박관희") + .department(departementRepository.findByName("공간환경시스템공학부")) + .studentNum("21800232") + .semester(9) + .major1(majorRepository.findByName("도시환경공학전공")) + .major2(majorRepository.findByName("컴퓨터공학전공")) + .phone("010-3221-6365") + .email("ha@handong.ac.kr") + .profile("profile.url") + .blog("blog.com") + .githubId("@ha.github") + .loginCnt(0L) + .readme("ha's readme") + .build()); studentRepository.save(Student.builder() - .name("현요섭") - .department(departementRepository.findByName("콘텐츠융합디자인")) - .studentNum("21400325") - .semester(2) - .major1(majorRepository.findByName("컴퓨터공학전공")) - .major2(majorRepository.findByName("컴퓨터공학전공")) - .phone("010-4211-1673") - .email("ma@handong.ac.kr") - .profile("profile.url") - .blog("blog.com") - .githubId("@ma.github") - .loginCnt(0L) - .readme("ma's readme") - .build()); + .name("현요섭") + .department(departementRepository.findByName("콘텐츠융합디자인학부")) + .studentNum("21400325") + .semester(2) + .major1(majorRepository.findByName("컴퓨터공학전공")) + .major2(majorRepository.findByName("컴퓨터공학전공")) + .phone("010-4211-1673") + .email("ma@handong.ac.kr") + .profile("profile.url") + .blog("blog.com") + .githubId("@ma.github") + .loginCnt(0L) + .readme("ma's readme") + .build()); studentRepository.save(Student.builder() - .name("이찬호") - .department(departementRepository.findByName("기계제어")) - .studentNum("21100734") - .semester(10) - .major1(majorRepository.findByName("기계공학전공")) - .major2(majorRepository.findByName("컴퓨터공학전공")) - .phone("010-2911-9192") - .email("yu@handong.ac.kr") - .profile("profile.url") - .blog("blog.com") - .githubId("@yu.github") - .loginCnt(0L) - .readme("yu's readme") - .build()); + .name("이찬호") + .department(departementRepository.findByName("기계제어공학부")) + .studentNum("21100734") + .semester(10) + .major1(majorRepository.findByName("기계공학전공")) + .major2(majorRepository.findByName("컴퓨터공학전공")) + .phone("010-2911-9192") + .email("yu@handong.ac.kr") + .profile("profile.url") + .blog("blog.com") + .githubId("@yu.github") + .loginCnt(0L) + .readme("yu's readme") + .build()); studentRepository.save(Student.builder() - .name("아무개") - .department(departementRepository.findByName("ICT창업학부")) - .studentNum("22200012") - .semester(9) - .major1(majorRepository.findByName("ICT 융합전공")) - .major2(majorRepository.findByName("컴퓨터공학전공")) - .phone("010-4321-1275") - .email("jin@handong.ac.kr") - .profile("profile.url") - .blog("blog.com") - .githubId("@jin.github") - .loginCnt(0L) - .readme("jin's readme") - .build()); + .name("아무개") + .department(departementRepository.findByName("ICT 창업학부")) + .studentNum("22200012") + .semester(9) + .major1(majorRepository.findByName("ICT 융합전공")) + .major2(majorRepository.findByName("컴퓨터공학전공")) + .phone("010-4321-1275") + .email("jin@handong.ac.kr") + .profile("profile.url") + .blog("blog.com") + .githubId("@jin.github") + .loginCnt(0L) + .readme("jin's readme") + .build()); studentRepository.save(Student.builder() - .name("김요나") - .department(departementRepository.findByName("전산전자")) - .studentNum("21100032") - .semester(2) - .major1(majorRepository.findByName("컴퓨터공학전공")) - .major2(majorRepository.findByName("생명과학전공")) - .phone("010-6731-1423") - .email("kim@handong.ac.kr") - .profile("profile.url") - .blog("blog.com") - .githubId("@kim.github") - .loginCnt(0L) - .readme("kim's readme") - .build()); + .name("김요나") + .department(departementRepository.findByName("전산전자공학부")) + .studentNum("21100032") + .semester(2) + .major1(majorRepository.findByName("컴퓨터공학전공")) + .major2(majorRepository.findByName("생명과학전공")) + .phone("010-6731-1423") + .email("kim@handong.ac.kr") + .profile("profile.url") + .blog("blog.com") + .githubId("@kim.github") + .loginCnt(0L) + .readme("kim's readme") + .build()); studentRepository.save(Student.builder() - .name("박도마") - .department(departementRepository.findByName("국제어문")) - .studentNum("21900432") - .semester(1) - .major1(majorRepository.findByName("국제지역학전공")) - .major2(majorRepository.findByName("컴퓨터공학전공")) - .phone("010-4222-3009") - .email("park@handong.ac.kr") - .profile("profile.url") - .blog("blog.com") - .githubId("@park.github") - .loginCnt(0L) - .readme("park's readme") - .build()); + .name("박도마") + .department(departementRepository.findByName("국제어문학부")) + .studentNum("21900432") + .semester(1) + .major1(majorRepository.findByName("국제지역학전공")) + .major2(majorRepository.findByName("컴퓨터공학전공")) + .phone("010-4222-3009") + .email("park@handong.ac.kr") + .profile("profile.url") + .blog("blog.com") + .githubId("@park.github") + .loginCnt(0L) + .readme("park's readme") + .build()); studentRepository.save(Student.builder() - .name("이배드로") - .department(departementRepository.findByName("경영경제")) - .studentNum("22000331") - .semester(5) - .major1(majorRepository.findByName("경영학전공")) - .major2(majorRepository.findByName("컴퓨터공학전공")) - .phone("010-6653-9991") - .email("lee@handong.ac.kr") - .profile("profile.url") - .blog("blog.com") - .githubId("@lee.github") - .loginCnt(0L) - .readme("lee's readme") - .build()); + .name("이배드로") + .department(departementRepository.findByName("경영경제학부")) + .studentNum("22000331") + .semester(5) + .major1(majorRepository.findByName("경영학전공")) + .major2(majorRepository.findByName("컴퓨터공학전공")) + .phone("010-6653-9991") + .email("lee@handong.ac.kr") + .profile("profile.url") + .blog("blog.com") + .githubId("@lee.github") + .loginCnt(0L) + .readme("lee's readme") + .build()); studentRepository.save(Student.builder() - .name("곽마태") - .department(departementRepository.findByName("법학부")) - .studentNum("21200423") - .semester(5) - .major1(majorRepository.findByName("한국법전공")) - .major2(majorRepository.findByName("컴퓨터공학전공")) - .phone("010-1292-9132") - .email("jeong@handong.ac.kr") - .profile("profile.url") - .blog("blog.com") - .githubId("@jeong.github") - .loginCnt(0L) - .readme("jeong's readme") - .build()); + .name("곽마태") + .department(departementRepository.findByName("법학부")) + .studentNum("21200423") + .semester(5) + .major1(majorRepository.findByName("한국법전공")) + .major2(majorRepository.findByName("컴퓨터공학전공")) + .phone("010-1292-9132") + .email("jeong@handong.ac.kr") + .profile("profile.url") + .blog("blog.com") + .githubId("@jeong.github") + .loginCnt(0L) + .readme("jeong's readme") + .build()); studentRepository.save(Student.builder() - .name("기운찬") - .department(departementRepository.findByName("커뮤니케이션")) - .studentNum("22100027") - .semester(3) - .major1(majorRepository.findByName("공연영상학전공")) - .major2(majorRepository.findByName("컴퓨터공학전공")) - .phone("010-2112-4243") - .email("woo@handong.ac.kr") - .profile("profile.url") - .blog("blog.com") - .githubId("@woo.github") - .loginCnt(0L) - .readme("woo's readme") - .build()); + .name("기운찬") + .department(departementRepository.findByName("커뮤니케이션학부")) + .studentNum("22100027") + .semester(3) + .major1(majorRepository.findByName("공연영상학전공")) + .major2(majorRepository.findByName("컴퓨터공학전공")) + .phone("010-2112-4243") + .email("woo@handong.ac.kr") + .profile("profile.url") + .blog("blog.com") + .githubId("@woo.github") + .loginCnt(0L) + .readme("woo's readme") + .build()); studentRepository.save(Student.builder() - .name("곤잘레스") - .department(departementRepository.findByName("상담복지")) - .studentNum("21900112") - .semester(4) - .major1(majorRepository.findByName("사회복지학전공")) - .major2(majorRepository.findByName("컴퓨터공학전공")) - .phone("010-1144-4214") - .email("wi@handong.ac.kr") - .profile("profile.url") - .blog("blog.com") - .githubId("@wi.github") - .loginCnt(0L) - .readme("wi's readme") - .build()); + .name("곤잘레스") + .department(departementRepository.findByName("상담심리사회복지학부")) + .studentNum("21900112") + .semester(4) + .major1(majorRepository.findByName("사회복지학전공")) + .major2(majorRepository.findByName("컴퓨터공학전공")) + .phone("010-1144-4214") + .email("wi@handong.ac.kr") + .profile("profile.url") + .blog("blog.com") + .githubId("@wi.github") + .loginCnt(0L) + .readme("wi's readme") + .build()); studentRepository.save(Student.builder() - .name("다비드") - .department(departementRepository.findByName("공간환경시스템")) - .studentNum("21800332") - .semester(9) - .major1(majorRepository.findByName("도시환경공학전공")) - .major2(majorRepository.findByName("컴퓨터공학전공")) - .phone("010-3331-6365") - .email("ha@handong.ac.kr") - .profile("profile.url") - .blog("blog.com") - .githubId("@ha.github") - .loginCnt(0L) - .readme("ha's readme") - .build()); + .name("다비드") + .department(departementRepository.findByName("공간환경시스템공학부")) + .studentNum("21800332") + .semester(9) + .major1(majorRepository.findByName("도시환경공학전공")) + .major2(majorRepository.findByName("컴퓨터공학전공")) + .phone("010-3331-6365") + .email("ha@handong.ac.kr") + .profile("profile.url") + .blog("blog.com") + .githubId("@ha.github") + .loginCnt(0L) + .readme("ha's readme") + .build()); studentRepository.save(Student.builder() - .name("도베르만") - .department(departementRepository.findByName("콘텐츠융합디자인")) - .studentNum("21400425") - .semester(2) - .major1(majorRepository.findByName("컴퓨터공학전공")) - .major2(majorRepository.findByName("컴퓨터공학전공")) - .phone("010-4211-2673") - .email("ma@handong.ac.kr") - .profile("profile.url") - .blog("blog.com") - .githubId("@ma.github") - .loginCnt(0L) - .readme("ma's readme") - .build()); + .name("도베르만") + .department(departementRepository.findByName("콘텐츠융합디자인학부")) + .studentNum("21400425") + .semester(2) + .major1(majorRepository.findByName("컴퓨터공학전공")) + .major2(majorRepository.findByName("컴퓨터공학전공")) + .phone("010-4211-2673") + .email("ma@handong.ac.kr") + .profile("profile.url") + .blog("blog.com") + .githubId("@ma.github") + .loginCnt(0L) + .readme("ma's readme") + .build()); studentRepository.save(Student.builder() - .name("진시황") - .department(departementRepository.findByName("기계제어")) - .studentNum("21100714") - .semester(10) - .major1(majorRepository.findByName("기계공학전공")) - .major2(majorRepository.findByName("컴퓨터공학전공")) - .phone("010-2931-9192") - .email("yu@handong.ac.kr") - .profile("profile.url") - .blog("blog.com") - .githubId("@yu.github") - .loginCnt(0L) - .readme("yu's readme") - .build()); + .name("진시황") + .department(departementRepository.findByName("기계제어공학부")) + .studentNum("21100714") + .semester(10) + .major1(majorRepository.findByName("기계공학전공")) + .major2(majorRepository.findByName("컴퓨터공학전공")) + .phone("010-2931-9192") + .email("yu@handong.ac.kr") + .profile("profile.url") + .blog("blog.com") + .githubId("@yu.github") + .loginCnt(0L) + .readme("yu's readme") + .build()); studentRepository.save(Student.builder() - .name("황유비") - .department(departementRepository.findByName("ICT창업학부")) - .studentNum("21900012") - .semester(9) - .major1(majorRepository.findByName("ICT 융합전공")) - .major2(majorRepository.findByName("컴퓨터공학전공")) - .phone("010-4891-1275") - .email("jin@handong.ac.kr") - .profile("profile.url") - .blog("blog.com") - .githubId("@jin.github") - .loginCnt(0L) - .readme("jin's readme") - .build()); + .name("황유비") + .department(departementRepository.findByName("ICT 창업학부")) + .studentNum("21900012") + .semester(9) + .major1(majorRepository.findByName("ICT 융합전공")) + .major2(majorRepository.findByName("컴퓨터공학전공")) + .phone("010-4891-1275") + .email("jin@handong.ac.kr") + .profile("profile.url") + .blog("blog.com") + .githubId("@jin.github") + .loginCnt(0L) + .readme("jin's readme") + .build()); studentRepository.save(Student.builder() - .name("우요셉") - .department(departementRepository.findByName("전산전자")) - .studentNum("21900032") - .semester(2) - .major1(majorRepository.findByName("컴퓨터공학전공")) - .major2(majorRepository.findByName("생명과학전공")) - .phone("010-9191-1423") - .email("kim@handong.ac.kr") - .profile("profile.url") - .blog("blog.com") - .githubId("@kim.github") - .loginCnt(0L) - .readme("kim's readme") - .build()); + .name("우요셉") + .department(departementRepository.findByName("전산전자공학부")) + .studentNum("21900032") + .semester(2) + .major1(majorRepository.findByName("컴퓨터공학전공")) + .major2(majorRepository.findByName("생명과학전공")) + .phone("010-9191-1423") + .email("kim@handong.ac.kr") + .profile("profile.url") + .blog("blog.com") + .githubId("@kim.github") + .loginCnt(0L) + .readme("kim's readme") + .build()); studentRepository.save(Student.builder() - .name("홍아담") - .department(departementRepository.findByName("국제어문")) - .studentNum("21901132") - .semester(1) - .major1(majorRepository.findByName("국제지역학전공")) - .major2(majorRepository.findByName("컴퓨터공학전공")) - .phone("010-9991-3009") - .email("park@handong.ac.kr") - .profile("profile.url") - .blog("blog.com") - .githubId("@park.github") - .loginCnt(0L) - .readme("park's readme") - .build()); + .name("홍아담") + .department(departementRepository.findByName("국제어문학부")) + .studentNum("21901132") + .semester(1) + .major1(majorRepository.findByName("국제지역학전공")) + .major2(majorRepository.findByName("컴퓨터공학전공")) + .phone("010-9991-3009") + .email("park@handong.ac.kr") + .profile("profile.url") + .blog("blog.com") + .githubId("@park.github") + .loginCnt(0L) + .readme("park's readme") + .build()); studentRepository.save(Student.builder() - .name("김이브") - .department(departementRepository.findByName("경영경제")) - .studentNum("22000131") - .semester(5) - .major1(majorRepository.findByName("경영학전공")) - .major2(majorRepository.findByName("컴퓨터공학전공")) - .phone("010-6653-9881") - .email("lee@handong.ac.kr") - .profile("profile.url") - .blog("blog.com") - .githubId("@lee.github") - .loginCnt(0L) - .readme("lee's readme") - .build()); + .name("김이브") + .department(departementRepository.findByName("경영경제학부")) + .studentNum("22000131") + .semester(5) + .major1(majorRepository.findByName("경영학전공")) + .major2(majorRepository.findByName("컴퓨터공학전공")) + .phone("010-6653-9881") + .email("lee@handong.ac.kr") + .profile("profile.url") + .blog("blog.com") + .githubId("@lee.github") + .loginCnt(0L) + .readme("lee's readme") + .build()); studentRepository.save(Student.builder() - .name("송삼손") - .department(departementRepository.findByName("법학부")) - .studentNum("21900423") - .semester(5) - .major1(majorRepository.findByName("한국법전공")) - .major2(majorRepository.findByName("컴퓨터공학전공")) - .phone("010-1293-9832") - .email("jeong@handong.ac.kr") - .profile("profile.url") - .blog("blog.com") - .githubId("@jeong.github") - .loginCnt(0L) - .readme("jeong's readme") - .build()); + .name("송삼손") + .department(departementRepository.findByName("법학부")) + .studentNum("21900423") + .semester(5) + .major1(majorRepository.findByName("한국법전공")) + .major2(majorRepository.findByName("컴퓨터공학전공")) + .phone("010-1293-9832") + .email("jeong@handong.ac.kr") + .profile("profile.url") + .blog("blog.com") + .githubId("@jeong.github") + .loginCnt(0L) + .readme("jeong's readme") + .build()); studentRepository.save(Student.builder() - .name("기윤호") - .department(departementRepository.findByName("커뮤니케이션")) - .studentNum("22100088") - .semester(3) - .major1(majorRepository.findByName("공연영상학전공")) - .major2(majorRepository.findByName("컴퓨터공학전공")) - .phone("010-2188-4243") - .email("woo@handong.ac.kr") - .profile("profile.url") - .blog("blog.com") - .githubId("@woo.github") - .loginCnt(0L) - .readme("woo's readme") - .build()); + .name("기윤호") + .department(departementRepository.findByName("커뮤니케이션학부")) + .studentNum("22100088") + .semester(3) + .major1(majorRepository.findByName("공연영상학전공")) + .major2(majorRepository.findByName("컴퓨터공학전공")) + .phone("010-2188-4243") + .email("woo@handong.ac.kr") + .profile("profile.url") + .blog("blog.com") + .githubId("@woo.github") + .loginCnt(0L) + .readme("woo's readme") + .build()); studentRepository.save(Student.builder() - .name("김영찬") - .department(departementRepository.findByName("상담복지")) - .studentNum("21900232") - .semester(4) - .major1(majorRepository.findByName("사회복지학전공")) - .major2(majorRepository.findByName("컴퓨터공학전공")) - .phone("010-6644-4214") - .email("wi@handong.ac.kr") - .profile("profile.url") - .blog("blog.com") - .githubId("@wi.github") - .loginCnt(0L) - .readme("wi's readme") - .build()); + .name("김영찬") + .department(departementRepository.findByName("상담심리사회복지학부")) + .studentNum("21900232") + .semester(4) + .major1(majorRepository.findByName("사회복지학전공")) + .major2(majorRepository.findByName("컴퓨터공학전공")) + .phone("010-6644-4214") + .email("wi@handong.ac.kr") + .profile("profile.url") + .blog("blog.com") + .githubId("@wi.github") + .loginCnt(0L) + .readme("wi's readme") + .build()); studentRepository.save(Student.builder() - .name("김영헌") - .department(departementRepository.findByName("공간환경시스템")) - .studentNum("21800232") - .semester(9) - .major1(majorRepository.findByName("도시환경공학전공")) - .major2(majorRepository.findByName("컴퓨터공학전공")) - .phone("010-3431-6365") - .email("ha@handong.ac.kr") - .profile("profile.url") - .blog("blog.com") - .githubId("@ha.github") - .loginCnt(0L) - .readme("ha's readme") - .build()); + .name("김영헌") + .department(departementRepository.findByName("공간환경시스템공학부")) + .studentNum("21810232") + .semester(9) + .major1(majorRepository.findByName("도시환경공학전공")) + .major2(majorRepository.findByName("컴퓨터공학전공")) + .phone("010-3431-6365") + .email("ha@handong.ac.kr") + .profile("profile.url") + .blog("blog.com") + .githubId("@ha.github") + .loginCnt(0L) + .readme("ha's readme") + .build()); studentRepository.save(Student.builder() - .name("김하은") - .department(departementRepository.findByName("콘텐츠융합디자인")) - .studentNum("21400825") - .semester(2) - .major1(majorRepository.findByName("컴퓨터공학전공")) - .major2(majorRepository.findByName("컴퓨터공학전공")) - .phone("010-4111-2673") - .email("ma@handong.ac.kr") - .profile("profile.url") - .blog("blog.com") - .githubId("@ma.github") - .loginCnt(0L) - .readme("ma's readme") - .build()); + .name("김하은") + .department(departementRepository.findByName("콘텐츠융합디자인학부")) + .studentNum("21400825") + .semester(2) + .major1(majorRepository.findByName("컴퓨터공학전공")) + .major2(majorRepository.findByName("컴퓨터공학전공")) + .phone("010-4111-2673") + .email("ma@handong.ac.kr") + .profile("profile.url") + .blog("blog.com") + .githubId("@ma.github") + .loginCnt(0L) + .readme("ma's readme") + .build()); studentRepository.save(Student.builder() - .name("장유진") - .department(departementRepository.findByName("기계제어")) - .studentNum("21100114") - .semester(10) - .major1(majorRepository.findByName("기계공학전공")) - .major2(majorRepository.findByName("컴퓨터공학전공")) - .phone("010-2931-9192") - .email("yu@handong.ac.kr") - .profile("profile.url") - .blog("blog.com") - .githubId("@yu.github") - .loginCnt(0L) - .readme("yu's readme") - .build()); + .name("장유진") + .department(departementRepository.findByName("기계제어공학부")) + .studentNum("21100114") + .semester(10) + .major1(majorRepository.findByName("기계공학전공")) + .major2(majorRepository.findByName("컴퓨터공학전공")) + .phone("010-2931-9192") + .email("yu@handong.ac.kr") + .profile("profile.url") + .blog("blog.com") + .githubId("@yu.github") + .loginCnt(0L) + .readme("yu's readme") + .build()); studentRepository.save(Student.builder() - .name("정수산나") - .department(departementRepository.findByName("ICT창업학부")) - .studentNum("21900312") - .semester(9) - .major1(majorRepository.findByName("ICT 융합전공")) - .major2(majorRepository.findByName("컴퓨터공학전공")) - .phone("010-4821-1175") - .email("jin@handong.ac.kr") - .profile("profile.url") - .blog("blog.com") - .githubId("@jin.github") - .loginCnt(0L) - .readme("jin's readme") - .build()); + .name("정수산나") + .department(departementRepository.findByName("ICT 창업학부")) + .studentNum("21900312") + .semester(9) + .major1(majorRepository.findByName("ICT 융합전공")) + .major2(majorRepository.findByName("컴퓨터공학전공")) + .phone("010-4821-1175") + .email("jin@handong.ac.kr") + .profile("profile.url") + .blog("blog.com") + .githubId("@jin.github") + .loginCnt(0L) + .readme("jin's readme") + .build()); } private void saveCategory() { categoryRepository.save(Category.builder() - .name("전공마일리지") - .build()); + .name("전공마일리지") + .build()); categoryRepository.save(Category.builder() - .name("산학마일리지") - .build()); + .name("산학마일리지") + .build()); categoryRepository.save(Category.builder() - .name("비교과-연구활동") - .build()); + .name("비교과-연구활동") + .build()); categoryRepository.save(Category.builder() - .name("비교과-특강참여") - .build()); + .name("비교과-특강참여") + .build()); categoryRepository.save(Category.builder() - .name("비교과-행사참여") - .build()); + .name("비교과-행사참여") + .build()); categoryRepository.save(Category.builder() - .name("비교과-학회할동") - .build()); + .name("비교과-학회활동") + .build()); categoryRepository.save(Category.builder() - .name("기타") - .build()); + .name("기타") + .build()); } private void saveDepartment() { departementRepository.save(Department.builder() - .name("전산전자") - .build()); + .name("전산전자공학부") + .build()); departementRepository.save(Department.builder() - .name("국제어문") - .build()); + .name("국제어문학부") + .build()); departementRepository.save(Department.builder() - .name("경영경제") - .build()); + .name("경영경제학부") + .build()); departementRepository.save(Department.builder() - .name("법학부") - .build()); + .name("법학부") + .build()); departementRepository.save(Department.builder() - .name("커뮤니케이션") - .build()); + .name("커뮤니케이션학부") + .build()); departementRepository.save(Department.builder() - .name("상담복지") - .build()); + .name("상담심리사회복지학부") + .build()); departementRepository.save(Department.builder() - .name("공간환경시스템") - .build()); + .name("공간환경시스템공학부") + .build()); departementRepository.save(Department.builder() - .name("콘텐츠융합디자인") - .build()); + .name("콘텐츠융합디자인학부") + .build()); departementRepository.save(Department.builder() - .name("기계제어") - .build()); + .name("기계제어공학부") + .build()); departementRepository.save(Department.builder() - .name("ICT창업학부") - .build()); + .name("ICT 창업학부") + .build()); departementRepository.save(Department.builder() - .name("ICT융합학부") - .build()); + .name("생명과학부") + .build()); departementRepository.save(Department.builder() - .name("생명과학") - .build()); - + .name("글로벌리더쉽학부") + .build()); } public void saveActivities() { activityRepository.save(Activity.builder() - .semester("2021-2") - .personal(false) - .remark("Spring 이용") - .requestStatus(1) - .name("(캠프)웹서비스 프로젝트(spring)_장소연") - .weight(3) - .category(categoryRepository.findByName("비교과-행사참여")) - .build()); + .semester("2021-2") + .personal(false) + .remark("Spring 이용") + .requestStatus(1) + .name("(캠프)웹서비스 프로젝트(spring)_장소연") + .weight(3) + .category(categoryRepository.findByName("비교과-행사참여")) + .build()); + activityRepository.save(Activity.builder() + .semester("2021-2") + .personal(false) + .remark("우수상 수상") + .requestStatus(1) + .name("(캠프)미리미리C 캠프_김광") + .weight(3) + .category(categoryRepository.findByName("비교과-행사참여")) + .build()); + activityRepository.save(Activity.builder() + .semester("2021-2") + .personal(false) + .remark("") + .requestStatus(1) + .name("공학프로젝트기획") + .weight(2) + .category(categoryRepository.findByName("전공마일리지")) + .build()); + activityRepository.save(Activity.builder() + .semester("2021-2") + .personal(true) + .remark("우수상 수상") + .requestStatus(1) + .name("해커톤") + .weight(5) + .category(categoryRepository.findByName("기타")) + .build()); + activityRepository.save(Activity.builder() + .semester("2021-2") + .personal(true) + .remark("") + .requestStatus(1) + .name("정보처리기사 자격증") + .weight(4) + .category(categoryRepository.findByName("기타")) + .build()); + activityRepository.save(Activity.builder() + .semester("2021-2") + .personal(false) + .remark("우수상 수상") + .requestStatus(1) + .name("(캠프)Advanced Flutter Camp_조성배") + .weight(3) + .category(categoryRepository.findByName("비교과-행사참여")) + .build()); + activityRepository.save(Activity.builder() + .semester("2021-2") + .personal(true) + .remark("") + .requestStatus(1) + .name("현장실습") + .weight(5) + .category(categoryRepository.findByName("산학마일리지")) + .build()); + activityRepository.save(Activity.builder() + .semester("2021-2") + .personal(true) + .remark("") + .requestStatus(1) + .name("논문 분석") + .weight(3) + .category(categoryRepository.findByName("비교과-연구활동")) + .build()); + activityRepository.save(Activity.builder() + .semester("2021-2") + .personal(false) + .remark("디지털 시대와 개발자 (10.26)") + .requestStatus(1) + .name("CSEE 특강") + .weight(3) + .category(categoryRepository.findByName("비교과-특강참여")) + .build()); + activityRepository.save(Activity.builder() + .semester("2021-2") + .personal(false) + .remark("") + .requestStatus(1) + .name("캡스톤 페스티벌 참여") + .weight(3) + .category(categoryRepository.findByName("비교과-행사참여")) + .build()); + activityRepository.save(Activity.builder() + .semester("2021-2") + .personal(false) + .remark("미리미리 C 캠프") + .requestStatus(1) + .name("CRA") + .weight(3) + .category(categoryRepository.findByName("비교과-학회활동")) + .build()); + activityRepository.save(Activity.builder() + .semester("2021-2") + .personal(false) + .remark("") + .requestStatus(1) + .name("GHOST GBC") + .weight(4) + .category(categoryRepository.findByName("비교과-학회활동")) + .build()); + activityRepository.save(Activity.builder() + .semester("2021-2") + .personal(true) + .remark("") + .requestStatus(1) + .name("네이버 부트캠프") + .weight(5) + .category(categoryRepository.findByName("기타")) + .build()); + activityRepository.save(Activity.builder() + .semester("2021-2") + .personal(false) + .remark("") + .requestStatus(1) + .name("(캠프)프로그래밍 집중훈련 캠프_김호준") + .weight(3) + .category(categoryRepository.findByName("비교과-행사참여")) + .build()); + activityRepository.save(Activity.builder() + .semester("2021-2") + .personal(false) + .remark("프로그래머로 산다는 것 (11.2)") + .requestStatus(1) + .name("CSEE 특강") + .weight(3) + .category(categoryRepository.findByName("비교과-특강참여")) + .build()); + activityRepository.save(Activity.builder() + .semester("2021-2") + .personal(false) + .remark("") + .requestStatus(1) + .name("(캠프)파이썬 기초 잡기 캠프_박성진") + .weight(3) + .category(categoryRepository.findByName("비교과-행사참여")) + .build()); + activityRepository.save(Activity.builder() + .semester("2021-2") + .personal(false) + .remark("") + .requestStatus(1) + .name("(캠프)Program Problem Solving 캠프_김광") + .weight(3) + .category(categoryRepository.findByName("비교과-행사참여")) + .build()); + activityRepository.save(Activity.builder() + .semester("2021-2") + .personal(false) + .remark("") + .requestStatus(1) + .name("(캠프)VVS_세상 소중한 나를 위한 캠프_정석민") + .weight(3) + .category(categoryRepository.findByName("비교과-행사참여")) + .build()); + activityRepository.save(Activity.builder() + .semester("2021-2") + .personal(false) + .remark("") + .requestStatus(1) + .name("(캠프)에메르송의 코딩테스트 준비 캠프_송다빈") + .weight(3) + .category(categoryRepository.findByName("비교과-행사참여")) + .build()); + activityRepository.save(Activity.builder() + .semester("2021-2") + .personal(false) + .remark("") + .requestStatus(1) + .name("(캠프)딥러닝 심화 캠프_김인중") + .weight(3) + .category(categoryRepository.findByName("비교과-행사참여")) + .build()); + activityRepository.save(Activity.builder() + .semester("2022-1") + .personal(false) + .remark("Spring 이용") + .requestStatus(1) + .name("(캠프)웹서비스 프로젝트(spring)_장소연") + .weight(3) + .category(categoryRepository.findByName("비교과-행사참여")) + .build()); + activityRepository.save(Activity.builder() + .semester("2022-1") + .personal(false) + .remark("우수상 수상") + .requestStatus(1) + .name("(캠프)미리미리C 캠프_김광") + .weight(3) + .category(categoryRepository.findByName("비교과-행사참여")) + .build()); + activityRepository.save(Activity.builder() + .semester("2022-1") + .personal(false) + .remark("") + .requestStatus(1) + .name("공학설계입문") + .weight(1) + .category(categoryRepository.findByName("전공마일리지")) + .build()); + activityRepository.save(Activity.builder() + .semester("2022-1") + .personal(true) + .remark("최우수상 수상") + .requestStatus(1) + .name("해커톤") + .weight(5) + .category(categoryRepository.findByName("기타")) + .build()); + activityRepository.save(Activity.builder() + .semester("2022-1") + .personal(true) + .remark("") + .requestStatus(1) + .name("ISQTB 자격증") + .weight(2) + .category(categoryRepository.findByName("기타")) + .build()); + activityRepository.save(Activity.builder() + .semester("2022-1") + .personal(false) + .remark("") + .requestStatus(1) + .name("(캠프)Advanced Flutter Camp_조성배") + .weight(3) + .category(categoryRepository.findByName("비교과-행사참여")) + .build()); + activityRepository.save(Activity.builder() + .semester("2022-1") + .personal(true) + .remark("BizFlow") + .requestStatus(1) + .name("현장실습") + .weight(5) + .category(categoryRepository.findByName("산학마일리지")) + .build()); + activityRepository.save(Activity.builder() + .semester("2022-1") + .personal(true) + .remark("AI 딥러닝") + .requestStatus(1) + .name("논문 분석") + .weight(3) + .category(categoryRepository.findByName("비교과-연구활동")) + .build()); + activityRepository.save(Activity.builder() + .semester("2022-1") + .personal(false) + .remark("제네시스랩의 기술 창업 스토리") + .requestStatus(1) + .name("CSEE 특강") + .weight(2) + .category(categoryRepository.findByName("비교과-특강참여")) + .build()); + activityRepository.save(Activity.builder() + .semester("2022-1") + .personal(false) + .remark("") + .requestStatus(1) + .name("공학 페스티벌 참여") + .weight(1) + .category(categoryRepository.findByName("비교과-행사참여")) + .build()); + activityRepository.save(Activity.builder() + .semester("2022-1") + .personal(false) + .remark("미리미리 C 캠프") + .requestStatus(1) + .name("CRA") + .weight(1) + .category(categoryRepository.findByName("비교과-학회활동")) + .build()); + activityRepository.save(Activity.builder() + .semester("2022-1") + .personal(false) + .remark("") + .requestStatus(1) + .name("슬기짜기 코딩 교육") + .weight(1) + .category(categoryRepository.findByName("비교과-학회활동")) + .build()); + activityRepository.save(Activity.builder() + .semester("2022-1") + .personal(true) + .remark("세상을 바꾸는 디지털 전환과 신기술 도입 사례 (04.16)") + .requestStatus(1) + .name("CSEE 특강") + .weight(1) + .category(categoryRepository.findByName("비교과-특강참여")) + .build()); + activityRepository.save(Activity.builder() + .semester("2022-1") + .personal(false) + .remark("") + .requestStatus(1) + .name("(캠프)프로그래밍 캠프_김호준") + .weight(3) + .category(categoryRepository.findByName("비교과-행사참여")) + .build()); + activityRepository.save(Activity.builder() + .semester("2022-1") + .personal(false) + .remark("글로벌 라이다 기술 동향 및 에스오에스랩 창업 스토리 (04.23)") + .requestStatus(1) + .name("CSEE 특강") + .weight(3) + .category(categoryRepository.findByName("비교과-특강참여")) + .build()); + activityRepository.save(Activity.builder() + .semester("2022-1") + .personal(false) + .remark("") + .requestStatus(1) + .name("(캠프)파이썬 심화 캠프_박성진") + .weight(3) + .category(categoryRepository.findByName("비교과-행사참여")) + .build()); + activityRepository.save(Activity.builder() + .semester("2022-1") + .personal(false) + .remark("") + .requestStatus(1) + .name("(캠프)Program Problem Solving 캠프_김광") + .weight(3) + .category(categoryRepository.findByName("비교과-행사참여")) + .build()); + activityRepository.save(Activity.builder() + .semester("2022-1") + .personal(false) + .remark("") + .requestStatus(1) + .name("(캠프)VVS_프로그램 기획 및 설계 캠프_정석민") + .weight(3) + .category(categoryRepository.findByName("비교과-행사참여")) + .build()); + activityRepository.save(Activity.builder() + .semester("2022-1") + .personal(false) + .remark("") + .requestStatus(1) + .name("(캠프)에메르송의 면접 준비 캠프_송다빈") + .weight(3) + .category(categoryRepository.findByName("비교과-행사참여")) + .build()); + activityRepository.save(Activity.builder() + .semester("2022-1") + .personal(false) + .remark("") + .requestStatus(1) + .name("(캠프)컴퓨터 비전 캠프_황성수") + .weight(3) + .category(categoryRepository.findByName("비교과-행사참여")) + .build()); + activityRepository.save(Activity.builder() + .semester("2022-2") + .personal(false) + .remark("Spring 이용") + .requestStatus(1) + .name("(캠프)웹서비스 프로젝트(spring)_장소연") + .weight(3) + .category(categoryRepository.findByName("비교과-행사참여")) + .build()); + activityRepository.save(Activity.builder() + .semester("2022-2") + .personal(false) + .remark("우수상 수상") + .requestStatus(1) + .name("(캠프)미리미리C 캠프_김광") + .weight(3) + .category(categoryRepository.findByName("비교과-행사참여")) + .build()); activityRepository.save(Activity.builder() - .semester("2022-2") - .personal(false) - .remark("우수상 수상") - .requestStatus(1) - .name("비즈플로우") - .weight(2) - .category(categoryRepository.findByName("비교과-행사참여")) - .build()); + .semester("2022-2") + .personal(false) + .remark("") + .requestStatus(1) + .name("랩 설명회 참여") + .weight(1) + .category(categoryRepository.findByName("전공마일리지")) + .build()); activityRepository.save(Activity.builder() - .semester("2020-2") - .personal(false) - .remark("") - .requestStatus(1) - .name("(캠프)미리미리C 캠프_김광") - .weight(5) - .category(categoryRepository.findByName("비교과-행사참여")) - .build()); + .semester("2022-2") + .personal(true) + .remark("장려상 수상") + .requestStatus(1) + .name("해커톤") + .weight(5) + .category(categoryRepository.findByName("기타")) + .build()); activityRepository.save(Activity.builder() - .semester("2020-1") - .personal(false) - .remark("") - .requestStatus(1) - .name("C 프로그래밍") - .weight(1) - .category(categoryRepository.findByName("전공마일리지")) - .build()); + .semester("2022-2") + .personal(true) + .remark("") + .requestStatus(1) + .name("SQLD 자격증") + .weight(3) + .category(categoryRepository.findByName("기타")) + .build()); activityRepository.save(Activity.builder() - .semester("2021-1") - .personal(false) - .remark("") - .requestStatus(1) - .name("AI프로젝트 입문") - .weight(2) - .category(categoryRepository.findByName("전공마일리지")) - .build()); + .semester("2022-2") + .personal(false) + .remark("") + .requestStatus(1) + .name("(캠프)Advanced Flutter Camp_조성배") + .weight(3) + .category(categoryRepository.findByName("비교과-행사참여")) + .build()); activityRepository.save(Activity.builder() - .semester("2019-2") - .personal(false) - .remark("") - .requestStatus(1) - .name("(캠프)Advanced Flutter Camp_조성배") - .weight(4) - .category(categoryRepository.findByName("비교과-행사참여")) - .build()); + .semester("2022-2") + .personal(true) + .remark("카카오") + .requestStatus(1) + .name("현장실습") + .weight(5) + .category(categoryRepository.findByName("산학마일리지")) + .build()); activityRepository.save(Activity.builder() - .semester("2019-1") - .personal(true) - .remark("") - .requestStatus(1) - .name("정보처리기사 자격증") - .weight(2) - .category(categoryRepository.findByName("기타")) - .build()); + .semester("2022-2") + .personal(true) + .remark("Brain Computer Interface") + .requestStatus(1) + .name("논문 분석") + .weight(3) + .category(categoryRepository.findByName("비교과-연구활동")) + .build()); activityRepository.save(Activity.builder() - .semester("2022-1") - .personal(false) - .remark("") - .requestStatus(1) - .name("공학프로젝트기획") - .weight(6) - .category(categoryRepository.findByName("전공마일리지")) - .build()); + .semester("2022-2") + .personal(false) + .remark("웹과 클라우드 개발자 취업의 현장 (11.07)") + .requestStatus(1) + .name("CSEE 특강") + .weight(3) + .category(categoryRepository.findByName("비교과-특강참여")) + .build()); activityRepository.save(Activity.builder() - .semester("2020-2") - .personal(false) - .remark("") - .requestStatus(1) - .name("캡스톤") - .weight(1) - .category(categoryRepository.findByName("전공마일리지")) - .build()); + .semester("2022-2") + .personal(false) + .remark("") + .requestStatus(1) + .name("커리어 페스티벌 참여") + .weight(1) + .category(categoryRepository.findByName("비교과-행사참여")) + .build()); activityRepository.save(Activity.builder() - .semester("2021-2") - .personal(false) - .remark("") - .requestStatus(1) - .name("프로그래밍 집중훈련 캠프_김호준") - .weight(7) - .category(categoryRepository.findByName("비교과-행사참여")) - .build()); + .semester("2022-2") + .personal(false) + .remark("미리미리 C 캠프") + .requestStatus(1) + .name("CRA") + .weight(1) + .category(categoryRepository.findByName("비교과-학회활동")) + .build()); + activityRepository.save(Activity.builder() + .semester("2022-2") + .personal(false) + .remark("") + .requestStatus(1) + .name("SODA 코딩 교육") + .weight(1) + .category(categoryRepository.findByName("비교과-학회활동")) + .build()); + activityRepository.save(Activity.builder() + .semester("2022-2") + .personal(true) + .remark("웹 개발자로 살아남는 법 (11.27)") + .requestStatus(1) + .name("CSEE 특강") + .weight(1) + .category(categoryRepository.findByName("비교과-특강참여")) + .build()); + activityRepository.save(Activity.builder() + .semester("2022-2") + .personal(false) + .remark("") + .requestStatus(1) + .name("(캠프)프로그래밍 캠프_김호준") + .weight(3) + .category(categoryRepository.findByName("비교과-행사참여")) + .build()); + activityRepository.save(Activity.builder() + .semester("2022-2") + .personal(false) + .remark("빅데이터 분석과 활용법 (12.10)") + .requestStatus(1) + .name("CSEE 특강") + .weight(1) + .category(categoryRepository.findByName("비교과-특강참여")) + .build()); + activityRepository.save(Activity.builder() + .semester("2022-2") + .personal(false) + .remark("") + .requestStatus(1) + .name("(캠프)파이썬 심화 캠프_박성진") + .weight(3) + .category(categoryRepository.findByName("비교과-행사참여")) + .build()); + activityRepository.save(Activity.builder() + .semester("2022-2") + .personal(false) + .remark("") + .requestStatus(1) + .name("(캠프)Program Problem Solving 캠프_김광") + .weight(3) + .category(categoryRepository.findByName("비교과-행사참여")) + .build()); + activityRepository.save(Activity.builder() + .semester("2022-2") + .personal(false) + .remark("") + .requestStatus(1) + .name("(캠프)VVS_프로그램 기획 및 설계 캠프_정석민") + .weight(3) + .category(categoryRepository.findByName("비교과-행사참여")) + .build()); + activityRepository.save(Activity.builder() + .semester("2022-2") + .personal(false) + .remark("") + .requestStatus(1) + .name("(캠프)에메르송의 면접 준비 캠프_송다빈") + .weight(3) + .category(categoryRepository.findByName("비교과-행사참여")) + .build()); + activityRepository.save(Activity.builder() + .semester("2022-2") + .personal(false) + .remark("") + .requestStatus(1) + .name("(캠프)컴퓨터 비전 캠프_황성수") + .weight(3) + .category(categoryRepository.findByName("비교과-행사참여")) + .build()); } @@ -1536,9 +1994,9 @@ private void saveMajor() { majorRepository.save(Major.builder().name("전자공학심화전공").build()); majorRepository.save(Major.builder().name("Information Technology").build()); majorRepository.save(Major.builder().name("ICT 융합전공").build()); - majorRepository.save(Major.builder().name("AI Convergence & Entrepreneurship").build()); - majorRepository.save(Major.builder().name("Global Entrepreneurship").build()); - majorRepository.save(Major.builder().name("AI 융합").build()); + majorRepository.save(Major.builder().name("AI Convergence & Entrepreneurship 전공").build()); + majorRepository.save(Major.builder().name("Global Entrepreneurship 전공").build()); + majorRepository.save(Major.builder().name("AI 융합 전공").build()); majorRepository.save(Major.builder().name("데이터 사이언스 전공").build()); majorRepository.save(Major.builder().name("경영학전공").build()); majorRepository.save(Major.builder().name("경제학전공").build()); @@ -1550,9 +2008,7 @@ private void saveMajor() { majorRepository.save(Major.builder().name("상담심리학전공").build()); majorRepository.save(Major.builder().name("사회복지학전공").build()); majorRepository.save(Major.builder().name("공연영상학전공").build()); - majorRepository.save(Major.builder().name("언로정보학전공").build()); - majorRepository.save(Major.builder().name("글로벌융합전공").build()); - majorRepository.save(Major.builder().name("학생설계융합전공").build()); + majorRepository.save(Major.builder().name("언론정보학전공").build()); majorRepository.save(Major.builder().name("글로벌한국학전공").build()); } } \ No newline at end of file diff --git a/src/main/java/com/server/hispath/config/WebConfig.java b/src/main/java/com/server/hispath/config/WebConfig.java index ca7bf79..f32ea09 100644 --- a/src/main/java/com/server/hispath/config/WebConfig.java +++ b/src/main/java/com/server/hispath/config/WebConfig.java @@ -25,7 +25,7 @@ public class WebConfig implements WebMvcConfigurer { public void addCorsMappings(CorsRegistry registry) { registry.addMapping("/**") .allowedMethods("*") - .allowedOrigins("http://localhost:3000", "http://localhost:8080"); + .allowedOrigins("http://localhost:3000", "http://localhost:8080", "https://hispath.kro.kr", "https://hispath-manager.kro.kr", "https://hispath-server.kro.kr"); } @Override diff --git a/src/main/java/com/server/hispath/department/application/dto/DepartmentDto.java b/src/main/java/com/server/hispath/department/application/dto/DepartmentDto.java index b32e57f..0307f01 100644 --- a/src/main/java/com/server/hispath/department/application/dto/DepartmentDto.java +++ b/src/main/java/com/server/hispath/department/application/dto/DepartmentDto.java @@ -14,12 +14,18 @@ public class DepartmentDto { private Long id; private String name; + private String profile; + + public DepartmentDto(Long id, String name) { + this.id = id; + this.name = name; + } public static DepartmentDto from (Department department) { - return new DepartmentDto(department.getId(), department.getName()); + return new DepartmentDto(department.getId(), department.getName(), department.getProfile()); } - public static DepartmentDto of(DepartmentCRRequest request) { + public static DepartmentDto from(DepartmentCRRequest request) { return new DepartmentDto(request.getDepartmentId(), request.getName()); } } diff --git a/src/main/java/com/server/hispath/department/domain/Department.java b/src/main/java/com/server/hispath/department/domain/Department.java index ada9921..9eed012 100644 --- a/src/main/java/com/server/hispath/department/domain/Department.java +++ b/src/main/java/com/server/hispath/department/domain/Department.java @@ -30,6 +30,8 @@ public class Department extends BaseEntity { private String name; + private String profile; + public void update(DepartmentDto dto) { this.name = dto.getName(); } diff --git a/src/main/java/com/server/hispath/department/presentation/DepartmentController.java b/src/main/java/com/server/hispath/department/presentation/DepartmentController.java index 7f152bc..6d49e92 100644 --- a/src/main/java/com/server/hispath/department/presentation/DepartmentController.java +++ b/src/main/java/com/server/hispath/department/presentation/DepartmentController.java @@ -1,5 +1,7 @@ package com.server.hispath.department.presentation; +import com.server.hispath.auth.domain.RequiredLogin; +import com.server.hispath.auth.domain.RequiredManagerLogin; import com.server.hispath.department.application.DepartmentService; import com.server.hispath.department.application.dto.DepartmentDto; import com.server.hispath.department.presentation.request.DepartmentCRRequest; @@ -21,14 +23,18 @@ public class DepartmentController { @PostMapping("/department") @ApiOperation(value = ApiDoc.DEPARTMENT_CREATE) + @RequiredManagerLogin public ResponseEntity create(@RequestBody DepartmentCRRequest request) { - Long savedId = departmentService.create(DepartmentDto.of(request)); + + Long savedId = departmentService.create(DepartmentDto.from(request)); return ResponseEntity.ok(savedId); } @GetMapping("/department/{id}") @ApiOperation(value = ApiDoc.DEPARTMENT_READ) + @RequiredLogin public ResponseEntity find(@PathVariable Long id) { + DepartmentDto dto = departmentService.find(id); DepartmentResponse response = DepartmentResponse.from(dto); return ResponseEntity.ok(response); @@ -36,7 +42,9 @@ public ResponseEntity find(@PathVariable Long id) { @GetMapping("/departments") @ApiOperation(value = ApiDoc.DEPARTMENT_READ_ALL) + @RequiredLogin public ResponseEntity> findAll() { + List dtos = departmentService.findAll(); List responses = dtos.stream() .map(DepartmentResponse::from) @@ -46,14 +54,16 @@ public ResponseEntity> findAll() { @PatchMapping("/department/{id}") @ApiOperation(value = ApiDoc.DEPARTMENT_UPDATE) + @RequiredManagerLogin public ResponseEntity update(@PathVariable Long id, @RequestBody DepartmentCRRequest request) { - DepartmentDto dto = departmentService.update(id, DepartmentDto.of(request)); + DepartmentDto dto = departmentService.update(id, DepartmentDto.from(request)); DepartmentResponse response = DepartmentResponse.from(dto); return ResponseEntity.ok(response); } @DeleteMapping("/department/{id}") @ApiOperation(value = ApiDoc.DEPARTMENT_DELETE) + @RequiredManagerLogin public ResponseEntity delete(@PathVariable Long id) { departmentService.delete(id); return ResponseEntity.ok(id); diff --git a/src/main/java/com/server/hispath/department/presentation/response/DepartmentResponse.java b/src/main/java/com/server/hispath/department/presentation/response/DepartmentResponse.java index d1b7d8a..7112792 100644 --- a/src/main/java/com/server/hispath/department/presentation/response/DepartmentResponse.java +++ b/src/main/java/com/server/hispath/department/presentation/response/DepartmentResponse.java @@ -13,8 +13,9 @@ public class DepartmentResponse { private Long departmentId; private String name; + private String profile; public static DepartmentResponse from (DepartmentDto dto) { - return new DepartmentResponse(dto.getId(), dto.getName()); + return new DepartmentResponse(dto.getId(), dto.getName(), dto.getProfile()); } } diff --git a/src/main/java/com/server/hispath/docs/ApiDoc.java b/src/main/java/com/server/hispath/docs/ApiDoc.java index c368e80..593d473 100644 --- a/src/main/java/com/server/hispath/docs/ApiDoc.java +++ b/src/main/java/com/server/hispath/docs/ApiDoc.java @@ -2,16 +2,12 @@ public class ApiDoc { - - /* Student 관련 API 명세 */ - - /* Activity 관련 API 명세 */ public static final String ACTIVITY_CREATE = "단일 활동 생성"; public static final String ACTIVITY_READ = "단일 활동 조회"; public static final String ACTIVITY_READ_ALL = "모든 활동 조회"; public static final String ACTIVITY_UPDATE = "활동 수정"; - public static final String ACTIVITY_DELETE = "활동 삭제"; + public static final String ACTIVITY_DELETE = "학생 활동 삭제"; public static final String MILEAGE_CREATE = "단일 마일리지 활동 등록"; public static final String MILEAGES_CREATE = "단일 마일리지 다중 등록"; public static final String MILEAGE_UPDATE = "마일리지 활동 수정"; @@ -28,14 +24,26 @@ public class ApiDoc { public static final String STUDENT_ACTIVITY_UPDATE = "학생의 참여 활동 수정"; public static final String STUDENT_ACTIVITY_READ_SEMESTER = "학생의 참여 활동 학기별 조회"; public static final String STUDENT_ACTIVITY_READ_SEMESTER_SECTION_STATUS = "학생의 참여 활동 상태와 함께 학기별, 섹션별 조회"; + public static final String STUDENT_ACTIVITY_READ_PARTICIPATE = "전체 활동 중 학생 참여 활동 조회"; public static final String SECTION_READ_ALL = "모든 섹션 조회"; public static final String PARTICIPANT_DELETE = "학생 참여 데이터 삭제"; public static final String ACTIVITY_APPLY = "학생 활동 마일리지 신청"; public static final String ACTIVITY_APPROVE = "학생 활동 마일리지 승인"; public static final String ACTIVITY_REJECT = "학생 활동 마일리지 반려"; + public static final String MILEAGE_CATEGORY_CHART_DATAS = "카테고리 당 마일리지 참여, 평균 수 조회"; public static final String ACTIVITY_STUDENT_DETAIL = "학생 개인 활동 상세 조회"; + /* Chart 관련 API 명세 */ + public static final String CHART_MILEAGE_CATEGORY = "카테고리에 따른 학생 마일리지 활동 차트 데이터 조회"; + public static final String CHART_MILEAGE_POPULARITY_CATEGORY = "카테고리에 따른 전체 활동 갯수와 나의 참여수, 평균 참여수 차트 데이터 조회"; + public static final String CHART_MILEAGE_RANK = "내 마일리지 총점이 어느정도 위치하는지 차트 데이터 조회"; + public static final String CHART_MILEAGE_TIMELINE = "마일리지 활동 Timeline 차트 데이터 조회"; + public static final String CHART_SCHOLARSHIP_WEIGHT = "학생의 전체 가중치 분포 차트 데이터 조회"; + public static final String CHART_ACTIVITY_CATEGORY = "카테고리 별 활동 갯수 분포 차트 데이터 조회"; + public static final String CHART_STUDENT_ACTIVITY = "학생들의 전체 섹션 활동 분포 차트 데이터 조회"; + public static final String CHART_SCHOLARSHIP_GRADE = "학년 별 마일리지 수혜 학생 분포 차트 데이터 조회"; + public static final String CHART_SCHOLARSHIP_DEPARTMENT = "학부 별 마일리지 수혜 학생 분포 차트 데이터 조회"; /* Category 관련 API 명세 */ public static final String CATEGORY_READ = "단일 카테고리 조회"; @@ -53,6 +61,7 @@ public class ApiDoc { public static final String NOTICE_CREATE = "공지 생성"; public static final String NOTICE_READ_ALL = "전체 공지 조회"; + public static final String NOTICE_READ_IMP = "강제 공지 조회"; public static final String NOTICE_READ = "단일 공지 조회"; public static final String NOTICE_DELETE = "공지 삭제"; public static final String NOTICE_UPDATE = "공지 수정"; @@ -66,14 +75,18 @@ public class ApiDoc { public static final String STUDENT_UPDATE = "학생 수정"; public static final String STUDENT_DELETE = "학생 삭제"; public static final String DASHBOARD = "메인페이지 대시보드 정보 조회"; + public static final String STUDENT_SEMESTER = "학생의 활동 학기들 조회"; /* Manager 관련 API 명세 */ public static final String MANAGER_READ = "단일 관리자 조회"; public static final String MANAGER_READ_ALL = "모든 관리자 조회"; public static final String MANAGER_CREATE = "관리자 생성"; public static final String MANAGER_UPDATE = "관리자 수정"; + public static final String MANAGER_PROFILE_UPDATE = "관리자 프로필 수정"; public static final String MANAGER_APPROVE = "관리자 승인"; public static final String MANAGER_DELETE = "관리자 삭제"; + public static final String MANAGER_DASHBOARD = "관리자 대시보드 조회"; + public static final String MANAGER_EMAIL = "접속한 관리자 이메일 조회"; /* Department 관련 API 명세 */ public static final String DEPARTMENT_READ = "단일 학부 조회"; @@ -97,6 +110,6 @@ public class ApiDoc { public static final String SCHOLARSHIP_ACTIVITIES = "장학금 수혜자 정보와 그 활동들 조회"; public static final String APPROVE_SCHOLARSHIPS = "현학기 장학금 승인 명단 엑셀 업로드"; public static final String SCHOLARSHIP_SEARCH_STUDENT = "장학금 수혜 학생 필터 검색"; - public static final String InHyeok = "제발 하라는 대로 하자 dev branch에서 dev 풀 받고, 다시 너의 브렌치로 이동해서 git merge dev 후 git push origin 너브랜체 그리고 pull request 만들기 pull request로 dev 에 스쿼시 머지 이후 로컬에서는 다시 dev로 이동 git pull origin dev 이런다음에 새로운 기능을 개발하려면 git checkout -b 인혁브렌치"; + } diff --git a/src/main/java/com/server/hispath/exception/GlobalExceptionHandler.java b/src/main/java/com/server/hispath/exception/GlobalExceptionHandler.java index d2d92ed..90d21f3 100644 --- a/src/main/java/com/server/hispath/exception/GlobalExceptionHandler.java +++ b/src/main/java/com/server/hispath/exception/GlobalExceptionHandler.java @@ -1,15 +1,37 @@ package com.server.hispath.exception; +import org.springframework.http.HttpStatus; import org.springframework.http.ResponseEntity; import org.springframework.web.bind.annotation.ControllerAdvice; import org.springframework.web.bind.annotation.ExceptionHandler; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + @ControllerAdvice public class GlobalExceptionHandler { +// private static final Logger logger = LoggerFactory.getLogger(GlobalExceptionHandler.class); + @ExceptionHandler(HisPathException.class) public ResponseEntity hisPathException(HisPathException e) { + +// if (e.getHttpStatus().is4xxClientError()) { +// logger.info("Client Error : " + e.getMessage()); +// } else if (e.getHttpStatus().is5xxServerError()) { +// logger.error("Server Error : " + e.getMessage()); +// } + return ResponseEntity.status(e.getHttpStatus()) .body(new ExceptionResponse(e.getMessage())); } + + @ExceptionHandler(Exception.class) + public ResponseEntity commonException(Exception e) { + +// logger.error("Unknown Exception : " + e.getMessage()); + + return ResponseEntity.status(HttpStatus.INTERNAL_SERVER_ERROR) + .body(new ExceptionResponse(e.getMessage())); + } } diff --git a/src/main/java/com/server/hispath/exception/activity/ActivityApplyException.java b/src/main/java/com/server/hispath/exception/activity/ActivityApplyException.java new file mode 100644 index 0000000..68fdd6f --- /dev/null +++ b/src/main/java/com/server/hispath/exception/activity/ActivityApplyException.java @@ -0,0 +1,12 @@ +package com.server.hispath.exception.activity; + +import com.server.hispath.exception.HisPathException; + +import org.springframework.http.HttpStatus; + +public class ActivityApplyException extends ActivityException { + public ActivityApplyException() { + super("이미 처리된 활동은 다시 신청할 수 없습니다.", HttpStatus.BAD_REQUEST); + } +} + diff --git a/src/main/java/com/server/hispath/filters/LoggingFilter.java b/src/main/java/com/server/hispath/filters/LoggingFilter.java new file mode 100644 index 0000000..08315fd --- /dev/null +++ b/src/main/java/com/server/hispath/filters/LoggingFilter.java @@ -0,0 +1,130 @@ +package com.server.hispath.filters; + +import java.io.IOException; +import java.io.InputStream; +import java.util.Arrays; +import java.util.List; +import java.util.Objects; +import java.util.UUID; +import javax.servlet.FilterChain; +import javax.servlet.ServletException; +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; + +import org.springframework.http.HttpMethod; +import org.springframework.http.MediaType; +import org.springframework.stereotype.Component; +import org.springframework.util.StreamUtils; +import org.springframework.web.filter.OncePerRequestFilter; +import org.springframework.web.util.ContentCachingResponseWrapper; + +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.slf4j.MDC; + +@Component +public class LoggingFilter extends OncePerRequestFilter { + protected static final Logger log = LoggerFactory.getLogger(LoggingFilter.class); + + @Override + public void doFilterInternal( + HttpServletRequest request, + HttpServletResponse response, + FilterChain filterChain + ) throws ServletException, IOException { + + MDC.put("traceId", UUID.randomUUID().toString()); + if(isFileUpload(request)){ + filterChain.doFilter(request,response); + MDC.clear(); + return; + } + doFilterWrapped(new RequestWrapper(request), new ResponseWrapper(response), filterChain); + MDC.clear(); + } + + public void doFilterWrapped( + RequestWrapper request, + ContentCachingResponseWrapper response, + FilterChain filterChain + ) throws ServletException, IOException { + + try { + logRequest(request); + filterChain.doFilter(request, response); + } finally { + logResponse(response); + response.copyBodyToResponse(); + } + } + + private static void logRequest(RequestWrapper request) throws IOException { + String queryString = request.getQueryString(); + String requestURI = request.getRequestURI(); + if (!Objects.isNull(queryString)) { + requestURI += queryString; + } + log.info("Request : {} uri=[{}] content-type=[{}]", + request.getMethod(), + requestURI, + request.getContentType() + ); + + logPayload("Request", request.getContentType(), request.getInputStream()); + } + + private static void logResponse(ContentCachingResponseWrapper response) throws IOException { + logPayload("Response", response.getContentType(), response.getContentInputStream()); + } + + private static void logPayload(String prefix, String contentType, InputStream inputStream) throws IOException { + if (Objects.isNull(contentType)) { + contentType = "application/json"; + } + boolean visible = isVisible(MediaType.valueOf(contentType)); + if (visible) { + logContentPayload(prefix, inputStream); + return; + } + log.info("{} Payload: Binary Content", prefix); + } + + private static void logContentPayload(String prefix, InputStream inputStream) throws IOException { + byte[] content = StreamUtils.copyToByteArray(inputStream); + if (content.length > 0) { + String contentString = new String(content); + log.info("{} Payload: {}", prefix, contentString); + } + } + + private static boolean isVisible(MediaType mediaType) { + final List VISIBLE_TYPES = Arrays.asList( + MediaType.valueOf("text/*"), + MediaType.APPLICATION_FORM_URLENCODED, + MediaType.APPLICATION_JSON, + MediaType.APPLICATION_XML, + MediaType.valueOf("application/*+json"), + MediaType.valueOf("application/*+xml"), + MediaType.MULTIPART_FORM_DATA + ); + + return VISIBLE_TYPES.stream() + .anyMatch(visibleType -> visibleType.includes(mediaType)); + } + + + private boolean isFileUpload(HttpServletRequest request){ + if(Objects.equals("POST", request.getMethod())){ + if(Objects.equals("/api/mileages",request.getRequestURI())){ + return true; + } + if(Objects.equals("/api/students",request.getRequestURI())){ + return true; + } + if(Objects.equals("/api/mileage/students",request.getRequestURI())){ + return true; + } + } + return false; + } +} \ No newline at end of file diff --git a/src/main/java/com/server/hispath/filters/RequestWrapper.java b/src/main/java/com/server/hispath/filters/RequestWrapper.java new file mode 100644 index 0000000..339490b --- /dev/null +++ b/src/main/java/com/server/hispath/filters/RequestWrapper.java @@ -0,0 +1,54 @@ +package com.server.hispath.filters; + +import java.io.ByteArrayInputStream; +import java.io.IOException; +import java.io.InputStream; +import javax.servlet.ReadListener; +import javax.servlet.ServletInputStream; +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletRequestWrapper; + +import org.springframework.util.StreamUtils; + +public class RequestWrapper extends HttpServletRequestWrapper { + + private byte[] cachedInputStream; + + public RequestWrapper(HttpServletRequest request) throws IOException { + super(request); + InputStream requestInputStream = request.getInputStream(); + this.cachedInputStream = StreamUtils.copyToByteArray(requestInputStream); + } + + @Override + public ServletInputStream getInputStream() { + return new ServletInputStream() { + private InputStream cachedBodyInputStream = new ByteArrayInputStream(cachedInputStream); + + @Override + public boolean isFinished() { + try { + return cachedBodyInputStream.available() == 0; + } catch (IOException e) { + e.printStackTrace(); + } + return false; + } + + @Override + public boolean isReady() { + return true; + } + + @Override + public void setReadListener(ReadListener readListener) { + throw new UnsupportedOperationException(); + } + + @Override + public int read() throws IOException { + return cachedBodyInputStream.read(); + } + }; + } +} diff --git a/src/main/java/com/server/hispath/filters/ResponseWrapper.java b/src/main/java/com/server/hispath/filters/ResponseWrapper.java new file mode 100644 index 0000000..0c88e01 --- /dev/null +++ b/src/main/java/com/server/hispath/filters/ResponseWrapper.java @@ -0,0 +1,11 @@ +package com.server.hispath.filters; + +import javax.servlet.http.HttpServletResponse; + +import org.springframework.web.util.ContentCachingResponseWrapper; + +public class ResponseWrapper extends ContentCachingResponseWrapper { + public ResponseWrapper(HttpServletResponse response) { + super(response); + } +} \ No newline at end of file diff --git a/src/main/java/com/server/hispath/major/application/dto/MajorDto.java b/src/main/java/com/server/hispath/major/application/dto/MajorDto.java index 306f71f..6e95742 100644 --- a/src/main/java/com/server/hispath/major/application/dto/MajorDto.java +++ b/src/main/java/com/server/hispath/major/application/dto/MajorDto.java @@ -11,7 +11,8 @@ public class MajorDto { private Long id; private String name; + private String profile; public static MajorDto from(Major major) { - return new MajorDto(major.getId(), major.getName()); + return new MajorDto(major.getId(), major.getName(), major.getProfile()); } } \ No newline at end of file diff --git a/src/main/java/com/server/hispath/major/domain/Major.java b/src/main/java/com/server/hispath/major/domain/Major.java index 4d0da31..44afc87 100644 --- a/src/main/java/com/server/hispath/major/domain/Major.java +++ b/src/main/java/com/server/hispath/major/domain/Major.java @@ -30,6 +30,7 @@ public class Major extends BaseEntity { @GeneratedValue(strategy = GenerationType.IDENTITY) private Long id; private String name; + private String profile; public static Major from(MajorContentDto dto){ return Major.builder() diff --git a/src/main/java/com/server/hispath/major/presentation/MajorController.java b/src/main/java/com/server/hispath/major/presentation/MajorController.java index 81c1d4d..0fcca8e 100644 --- a/src/main/java/com/server/hispath/major/presentation/MajorController.java +++ b/src/main/java/com/server/hispath/major/presentation/MajorController.java @@ -3,6 +3,8 @@ import java.util.List; import java.util.stream.Collectors; +import com.server.hispath.auth.domain.RequiredLogin; +import com.server.hispath.auth.domain.RequiredManagerLogin; import com.server.hispath.docs.ApiDoc; import com.server.hispath.major.application.MajorService; import com.server.hispath.major.application.dto.MajorContentDto; @@ -26,6 +28,7 @@ public class MajorController { @PostMapping("/major") @ApiOperation(value = ApiDoc.MAJOR_CREATE) + @RequiredManagerLogin public ResponseEntity create(@RequestBody MajorCURequest request) { Long id = majorService.create(MajorContentDto.from(request)); return ResponseEntity.ok(id); @@ -34,6 +37,7 @@ public ResponseEntity create(@RequestBody MajorCURequest request) { @GetMapping("/major/{id}") @ApiOperation(value = ApiDoc.MAJOR_READ) + @RequiredLogin public ResponseEntity find(@PathVariable Long id) { MajorResponse response = MajorResponse.from(majorService.find(id)); return ResponseEntity.ok(response); @@ -41,6 +45,7 @@ public ResponseEntity find(@PathVariable Long id) { @PatchMapping("/major/{id}") @ApiOperation(value = ApiDoc.MAJOR_UPDATE) + @RequiredManagerLogin public ResponseEntity update(@PathVariable Long id, @RequestBody MajorCURequest request) { MajorDto dto = majorService.update(id, MajorContentDto.from(request)); MajorResponse response = MajorResponse.from(dto); @@ -49,6 +54,7 @@ public ResponseEntity update(@PathVariable Long id, @RequestBody @DeleteMapping("/major/{id}") @ApiOperation(value = ApiDoc.MAJOR_DELETE) + @RequiredManagerLogin public ResponseEntity delete(@PathVariable Long id) { majorService.delete(id); return ResponseEntity.ok(id); @@ -56,6 +62,7 @@ public ResponseEntity delete(@PathVariable Long id) { @GetMapping("/majors") @ApiOperation(value = ApiDoc.MAJOR_READ_ALL) + @RequiredLogin public ResponseEntity> findAll() { List responses = majorService.findAll() .stream() diff --git a/src/main/java/com/server/hispath/major/presentation/MajorTestController.java b/src/main/java/com/server/hispath/major/presentation/MajorTestController.java deleted file mode 100644 index 359041d..0000000 --- a/src/main/java/com/server/hispath/major/presentation/MajorTestController.java +++ /dev/null @@ -1,39 +0,0 @@ -package com.server.hispath.major.presentation; - - -import com.server.hispath.major.domain.Major; -import com.server.hispath.major.domain.repository.MajorRepository; -import lombok.Builder; -import lombok.NoArgsConstructor; -import lombok.RequiredArgsConstructor; -import org.springframework.http.ResponseEntity; -import org.springframework.web.bind.annotation.GetMapping; -import org.springframework.web.bind.annotation.RequestMapping; -import org.springframework.web.bind.annotation.RestController; - - - -@RestController -@RequiredArgsConstructor -@RequestMapping("/major") -public class MajorTestController { - - private final MajorRepository majorRepository; - - @GetMapping("/init") - public ResponseEntity testInit() { - - majorRepository.save(Major.builder().name("AI컴퓨터공학심화").build()); - majorRepository.save(Major.builder().name("전자공학심화").build()); - majorRepository.save(Major.builder().name("국제지역학").build()); - majorRepository.save(Major.builder().name("국제관계학").build()); - majorRepository.save(Major.builder().name("경영학").build()); - majorRepository.save(Major.builder().name("언론정보학").build()); - majorRepository.save(Major.builder().name("법학").build()); - majorRepository.save(Major.builder().name("ICT융합전공").build()); - majorRepository.save(Major.builder().name("생명과학").build()); - majorRepository.save(Major.builder().name("경제학").build()); - - return ResponseEntity.ok(null); - } -} diff --git a/src/main/java/com/server/hispath/major/presentation/response/MajorResponse.java b/src/main/java/com/server/hispath/major/presentation/response/MajorResponse.java index ba3ac5c..514dbda 100644 --- a/src/main/java/com/server/hispath/major/presentation/response/MajorResponse.java +++ b/src/main/java/com/server/hispath/major/presentation/response/MajorResponse.java @@ -12,8 +12,9 @@ public class MajorResponse { private Long id; private String name; + private String profile; public static MajorResponse from(MajorDto dto) { - return new MajorResponse(dto.getId(), dto.getName()); + return new MajorResponse(dto.getId(), dto.getName(), dto.getProfile()); } } diff --git a/src/main/java/com/server/hispath/manager/application/ManagerService.java b/src/main/java/com/server/hispath/manager/application/ManagerService.java index b7d2264..089259f 100644 --- a/src/main/java/com/server/hispath/manager/application/ManagerService.java +++ b/src/main/java/com/server/hispath/manager/application/ManagerService.java @@ -1,12 +1,17 @@ package com.server.hispath.manager.application; +import java.time.LocalDate; import java.util.List; import java.util.stream.Collectors; import com.server.hispath.exception.manager.ManagerNotFoundException; import com.server.hispath.manager.application.dto.ManagerCUDto; +import com.server.hispath.manager.application.dto.ManagerDashboardDto; import com.server.hispath.manager.application.dto.ManagerDto; +import com.server.hispath.manager.application.dto.ManagerUpdateDto; +import com.server.hispath.manager.domain.DailyInfo; import com.server.hispath.manager.domain.Manager; +import com.server.hispath.manager.domain.repository.DailyInfoRepository; import com.server.hispath.manager.domain.repository.ManagerRepository; import org.springframework.stereotype.Service; @@ -19,6 +24,7 @@ public class ManagerService { private final ManagerRepository managerRepository; + private final DailyInfoRepository dailyInfoRepository; @Transactional public Long create(ManagerCUDto dto) { @@ -46,6 +52,13 @@ public ManagerDto update(Long id, ManagerCUDto dto) { return ManagerDto.of(manager); } + @Transactional + public ManagerDto update(Long id, ManagerUpdateDto dto){ + Manager manager = this.findById(id); + manager.update(dto); + return ManagerDto.of(manager); + } + @Transactional public Long delete(Long id) { managerRepository.deleteById(id); @@ -63,4 +76,22 @@ public Long approve(Long managerId, int level) { public Manager findById(Long id) { return managerRepository.findById(id).orElseThrow(ManagerNotFoundException::new); } + + @Transactional(readOnly = true) + public ManagerDashboardDto getDashboard(Long managerId) { + Manager manager = this.findById(managerId); + List dailyInfos = dailyInfoRepository.findDailyInfoByDateBetweenOrderByDateAsc(LocalDate.now() + .minusDays(6), LocalDate.now()); + Long[] loginCounts = dailyInfos.stream() + .map(DailyInfo::getLoginCnt) + .toArray(Long[]::new); + Long totalLoginCnt = dailyInfoRepository.getTotalLoginCnt(); + + return ManagerDashboardDto.of(manager, loginCounts, totalLoginCnt); + } + + @Transactional(readOnly = true) + public String getEmail(Long memberId){ + return this.findById(memberId).getEmail(); + } } diff --git a/src/main/java/com/server/hispath/manager/application/dto/ManagerCUDto.java b/src/main/java/com/server/hispath/manager/application/dto/ManagerCUDto.java index e2e2192..b6df6d5 100644 --- a/src/main/java/com/server/hispath/manager/application/dto/ManagerCUDto.java +++ b/src/main/java/com/server/hispath/manager/application/dto/ManagerCUDto.java @@ -12,12 +12,12 @@ public class ManagerCUDto { private String name; - private int power; + private String profile; private String email; private String department; public static ManagerCUDto of(ManagerCURequest request) { - return new ManagerCUDto(request.getName(), request.getPower(), request.getEmail(), request.getDepartment()); + return new ManagerCUDto(request.getName(), request.getProfile(), request.getEmail(), request.getDepartment()); } } \ No newline at end of file diff --git a/src/main/java/com/server/hispath/manager/application/dto/ManagerDashboardDto.java b/src/main/java/com/server/hispath/manager/application/dto/ManagerDashboardDto.java new file mode 100644 index 0000000..64aba69 --- /dev/null +++ b/src/main/java/com/server/hispath/manager/application/dto/ManagerDashboardDto.java @@ -0,0 +1,27 @@ +package com.server.hispath.manager.application.dto; + +import com.server.hispath.manager.domain.Manager; + +import lombok.AllArgsConstructor; +import lombok.Getter; +import lombok.NoArgsConstructor; + +@Getter +@NoArgsConstructor +@AllArgsConstructor +public class ManagerDashboardDto { + private Long id; + private String profile; + private String name; + private String department; + private boolean approved; + private String email; + private int power; + private Long[] loginCounts; + private Long totalCounts; + + public static ManagerDashboardDto of(Manager manager, Long[] loginCounts, Long totalCounts) { + return new ManagerDashboardDto(manager.getId(), manager.getProfile(), manager.getName(), manager.getDepartment(), + manager.isApproved(), manager.getEmail(), manager.getPower(), loginCounts, totalCounts); + } +} diff --git a/src/main/java/com/server/hispath/manager/application/dto/ManagerDto.java b/src/main/java/com/server/hispath/manager/application/dto/ManagerDto.java index e4828f3..8bf1496 100644 --- a/src/main/java/com/server/hispath/manager/application/dto/ManagerDto.java +++ b/src/main/java/com/server/hispath/manager/application/dto/ManagerDto.java @@ -17,13 +17,14 @@ public class ManagerDto { private Long id; private String name; private String email; + private String profile; private String department; private int power; private boolean approved; public static ManagerDto of(Manager manager) { return new ManagerDto(manager.getId(), manager.getName(), manager.getEmail(), - manager.getDepartment(), manager.getPower(), manager.isApproved()); + manager.getProfile(), manager.getDepartment(), manager.getPower(), manager.isApproved()); } diff --git a/src/main/java/com/server/hispath/manager/application/dto/ManagerUpdateDto.java b/src/main/java/com/server/hispath/manager/application/dto/ManagerUpdateDto.java new file mode 100644 index 0000000..f171d65 --- /dev/null +++ b/src/main/java/com/server/hispath/manager/application/dto/ManagerUpdateDto.java @@ -0,0 +1,22 @@ +package com.server.hispath.manager.application.dto; + +import com.server.hispath.manager.presentation.request.ManagerUpdateRequest; + +import lombok.AllArgsConstructor; +import lombok.Getter; +import lombok.NoArgsConstructor; + +@Getter +@NoArgsConstructor +@AllArgsConstructor +public class ManagerUpdateDto { + private String name; + private String profile; + private String email; + private String department; + private int power; + + public static ManagerUpdateDto from(ManagerUpdateRequest request){ + return new ManagerUpdateDto(request.getName(), request.getProfile(), request.getEmail(), request.getDepartment(), request.getPower()); + } +} diff --git a/src/main/java/com/server/hispath/manager/domain/DailyInfo.java b/src/main/java/com/server/hispath/manager/domain/DailyInfo.java new file mode 100644 index 0000000..0736443 --- /dev/null +++ b/src/main/java/com/server/hispath/manager/domain/DailyInfo.java @@ -0,0 +1,36 @@ +package com.server.hispath.manager.domain; + +import java.time.LocalDate; +import javax.persistence.Entity; +import javax.persistence.GeneratedValue; +import javax.persistence.GenerationType; +import javax.persistence.Id; + +import com.server.hispath.common.BaseEntity; + +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Getter; +import lombok.NoArgsConstructor; +import org.hibernate.annotations.SQLDelete; +import org.hibernate.annotations.Where; + +@Entity +@Getter +@NoArgsConstructor +@AllArgsConstructor +@Where(clause = "deleted = false") +@SQLDelete(sql = "UPDATE dailyInfo SET deleted = true Where id = ?") +public class DailyInfo extends BaseEntity { + @Id + @GeneratedValue(strategy = GenerationType.IDENTITY) + private Long id; + + LocalDate date = LocalDate.now(); + + Long loginCnt = 1L; + + public void login(){ + loginCnt++; + } +} diff --git a/src/main/java/com/server/hispath/manager/domain/Manager.java b/src/main/java/com/server/hispath/manager/domain/Manager.java index af3280c..b3b54eb 100644 --- a/src/main/java/com/server/hispath/manager/domain/Manager.java +++ b/src/main/java/com/server/hispath/manager/domain/Manager.java @@ -7,6 +7,7 @@ import com.server.hispath.common.BaseEntity; import com.server.hispath.manager.application.dto.ManagerCUDto; +import com.server.hispath.manager.application.dto.ManagerUpdateDto; import lombok.AllArgsConstructor; import lombok.Builder; @@ -30,15 +31,16 @@ public class Manager extends BaseEntity { private int power; private String name; private String email; + private String profile; private String department; private boolean approved; public static Manager of(ManagerCUDto dto) { return Manager.builder() - .power(dto.getPower()) .name(dto.getName()) .email(dto.getEmail()) + .profile(dto.getProfile()) .department(dto.getDepartment()) .approved(false) .build(); @@ -47,6 +49,14 @@ public static Manager of(ManagerCUDto dto) { public void update(ManagerCUDto dto) { this.email = dto.getEmail(); this.name = dto.getName(); + this.profile = dto.getProfile(); + this.department = dto.getDepartment(); + } + + public void update(ManagerUpdateDto dto){ + this.email = dto.getEmail(); + this.name = dto.getName(); + this.profile = dto.getProfile(); this.department = dto.getDepartment(); this.power = dto.getPower(); } diff --git a/src/main/java/com/server/hispath/manager/domain/repository/DailyInfoRepository.java b/src/main/java/com/server/hispath/manager/domain/repository/DailyInfoRepository.java new file mode 100644 index 0000000..5c5d54e --- /dev/null +++ b/src/main/java/com/server/hispath/manager/domain/repository/DailyInfoRepository.java @@ -0,0 +1,20 @@ +package com.server.hispath.manager.domain.repository; + +import java.time.LocalDate; +import java.util.List; +import java.util.Optional; + +import com.server.hispath.manager.domain.DailyInfo; + +import org.springframework.data.jpa.repository.JpaRepository; +import org.springframework.data.jpa.repository.Query; + +public interface DailyInfoRepository extends JpaRepository { + Optional findFirstByDate(LocalDate date); + + List findDailyInfoByDateBetweenOrderByDateAsc(LocalDate start, LocalDate end); + + @Query("select sum(d.loginCnt) from DailyInfo d ") + Long getTotalLoginCnt(); + +} diff --git a/src/main/java/com/server/hispath/manager/presentation/ManagerController.java b/src/main/java/com/server/hispath/manager/presentation/ManagerController.java index 729aec5..b754262 100644 --- a/src/main/java/com/server/hispath/manager/presentation/ManagerController.java +++ b/src/main/java/com/server/hispath/manager/presentation/ManagerController.java @@ -3,11 +3,19 @@ import java.util.List; import java.util.stream.Collectors; +import com.server.hispath.auth.domain.LoginManager; +import com.server.hispath.auth.domain.ManagerLogin; +import com.server.hispath.auth.domain.RequiredManagerLogin; +import com.server.hispath.auth.domain.RequiredSuperManagerLogin; import com.server.hispath.docs.ApiDoc; import com.server.hispath.manager.application.ManagerService; import com.server.hispath.manager.application.dto.ManagerCUDto; +import com.server.hispath.manager.application.dto.ManagerDashboardDto; +import com.server.hispath.manager.application.dto.ManagerUpdateDto; import com.server.hispath.manager.presentation.request.ManagerApproveRequest; import com.server.hispath.manager.presentation.request.ManagerCURequest; +import com.server.hispath.manager.presentation.request.ManagerUpdateRequest; +import com.server.hispath.manager.presentation.response.ManagerEmailResponse; import com.server.hispath.manager.presentation.response.ManagerResponse; import org.springframework.http.ResponseEntity; @@ -26,6 +34,7 @@ public class ManagerController { @PostMapping("/manager") @ApiOperation(value = ApiDoc.MANAGER_CREATE) + @RequiredManagerLogin public ResponseEntity create(@RequestBody ManagerCURequest request) { Long savedId = managerService.create(ManagerCUDto.of(request)); return ResponseEntity.ok(savedId); @@ -33,6 +42,7 @@ public ResponseEntity create(@RequestBody ManagerCURequest request) { @GetMapping("/manager/{id}") @ApiOperation(value = ApiDoc.MANAGER_READ) + @RequiredManagerLogin public ResponseEntity find(@PathVariable Long id) { ManagerResponse response = ManagerResponse.of(managerService.findManager(id)); return ResponseEntity.ok(response); @@ -40,6 +50,7 @@ public ResponseEntity find(@PathVariable Long id) { @GetMapping("/managers") @ApiOperation(value = ApiDoc.MANAGER_READ_ALL) + @RequiredManagerLogin public ResponseEntity> findAll() { List responses = managerService.findManagers() .stream() @@ -50,13 +61,23 @@ public ResponseEntity> findAll() { @PutMapping("/manager/{id}") @ApiOperation(value = ApiDoc.MANAGER_UPDATE) - public ResponseEntity update(@PathVariable Long id, @RequestBody ManagerCURequest request) { - ManagerResponse response = ManagerResponse.of(managerService.update(id, ManagerCUDto.of(request))); + @RequiredSuperManagerLogin + public ResponseEntity update(@PathVariable Long id, @RequestBody ManagerUpdateRequest request) { + ManagerResponse response = ManagerResponse.of(managerService.update(id, ManagerUpdateDto.from(request))); + return ResponseEntity.ok(response); + } + + @PutMapping("/manager") + @ApiOperation(value = ApiDoc.MANAGER_PROFILE_UPDATE) + @RequiredManagerLogin + public ResponseEntity updateProfile(@ManagerLogin LoginManager loginManager, @RequestBody ManagerCURequest request) { + ManagerResponse response = ManagerResponse.of(managerService.update(loginManager.getId(), ManagerCUDto.of(request))); return ResponseEntity.ok(response); } @PutMapping("/manager/approve") @ApiOperation(value = ApiDoc.MANAGER_APPROVE) + @RequiredSuperManagerLogin public ResponseEntity approve(@RequestBody ManagerApproveRequest request) { Long response = managerService.approve(request.getManagerId(), request.getLevel()); return ResponseEntity.ok(response); @@ -64,8 +85,23 @@ public ResponseEntity approve(@RequestBody ManagerApproveRequest request) @DeleteMapping("/manager/{id}") @ApiOperation(value = ApiDoc.MANAGER_DELETE) + @RequiredSuperManagerLogin public ResponseEntity delete(@PathVariable Long id) { Long response = managerService.delete(id); return ResponseEntity.ok(response); } + + @GetMapping("/manager/dashboard") + @ApiOperation(value = ApiDoc.MANAGER_DASHBOARD) + @RequiredManagerLogin + public ResponseEntity getDashboard(@ManagerLogin LoginManager loginManager) { + return ResponseEntity.ok(managerService.getDashboard(loginManager.getId())); + } + + @GetMapping("/manager/email") + @ApiOperation(value = ApiDoc.MANAGER_EMAIL) + @RequiredManagerLogin + public ResponseEntity getEmail(@ManagerLogin LoginManager loginManager) { + return ResponseEntity.ok(new ManagerEmailResponse(managerService.getEmail(loginManager.getId()))); + } } diff --git a/src/main/java/com/server/hispath/manager/presentation/request/ManagerCURequest.java b/src/main/java/com/server/hispath/manager/presentation/request/ManagerCURequest.java index 8dd225f..d2e58e8 100644 --- a/src/main/java/com/server/hispath/manager/presentation/request/ManagerCURequest.java +++ b/src/main/java/com/server/hispath/manager/presentation/request/ManagerCURequest.java @@ -10,7 +10,7 @@ public class ManagerCURequest { private String name; - private int power; + private String profile; private String email; private String department; diff --git a/src/main/java/com/server/hispath/manager/presentation/request/ManagerUpdateRequest.java b/src/main/java/com/server/hispath/manager/presentation/request/ManagerUpdateRequest.java new file mode 100644 index 0000000..3829524 --- /dev/null +++ b/src/main/java/com/server/hispath/manager/presentation/request/ManagerUpdateRequest.java @@ -0,0 +1,18 @@ +package com.server.hispath.manager.presentation.request; + +import lombok.Getter; +import lombok.NoArgsConstructor; +import lombok.Setter; + +@Getter +@Setter +@NoArgsConstructor +public class ManagerUpdateRequest { + + private String name; + private String profile; + private String email; + private String department; + private int power; + +} diff --git a/src/main/java/com/server/hispath/manager/presentation/response/ManagerEmailResponse.java b/src/main/java/com/server/hispath/manager/presentation/response/ManagerEmailResponse.java new file mode 100644 index 0000000..a2ededf --- /dev/null +++ b/src/main/java/com/server/hispath/manager/presentation/response/ManagerEmailResponse.java @@ -0,0 +1,12 @@ +package com.server.hispath.manager.presentation.response; + +import lombok.AllArgsConstructor; +import lombok.Getter; +import lombok.NoArgsConstructor; + +@Getter +@NoArgsConstructor +@AllArgsConstructor +public class ManagerEmailResponse { + private String email; +} diff --git a/src/main/java/com/server/hispath/manager/presentation/response/ManagerResponse.java b/src/main/java/com/server/hispath/manager/presentation/response/ManagerResponse.java index b83d644..b967442 100644 --- a/src/main/java/com/server/hispath/manager/presentation/response/ManagerResponse.java +++ b/src/main/java/com/server/hispath/manager/presentation/response/ManagerResponse.java @@ -14,13 +14,14 @@ public class ManagerResponse { private int power; private String name; private String email; + private String profile; private String department; private boolean approved; public static ManagerResponse of(ManagerDto dto) { return new ManagerResponse(dto.getId(), dto.getPower(), dto.getName(), - dto.getEmail(), dto.getDepartment(), dto.isApproved()); + dto.getEmail(), dto.getProfile(), dto.getDepartment(), dto.isApproved()); } } diff --git a/src/main/java/com/server/hispath/notice/application/NoticeService.java b/src/main/java/com/server/hispath/notice/application/NoticeService.java index 8bf304f..5d9754e 100644 --- a/src/main/java/com/server/hispath/notice/application/NoticeService.java +++ b/src/main/java/com/server/hispath/notice/application/NoticeService.java @@ -45,6 +45,12 @@ public List findAll() { List notices = noticeRepository.findAll(); return notices.stream().map(NoticeDto::from).collect(Collectors.toList()); } + @Transactional(readOnly = true) + public List findImp() { + LocalDate today = LocalDate.now(); + List notices = noticeRepository.findAllImpInPub(today); + return notices.stream().map(DashboardNoticeDto::of).collect(Collectors.toList()); + } @Transactional public NoticeDto find(Long id) { diff --git a/src/main/java/com/server/hispath/notice/application/dto/DashboardNoticeDto.java b/src/main/java/com/server/hispath/notice/application/dto/DashboardNoticeDto.java index 7f7fb86..b21421d 100644 --- a/src/main/java/com/server/hispath/notice/application/dto/DashboardNoticeDto.java +++ b/src/main/java/com/server/hispath/notice/application/dto/DashboardNoticeDto.java @@ -14,9 +14,12 @@ public class DashboardNoticeDto { private Long id; private String title; + private String content; private LocalDate pubDate; + private LocalDate expDate; + private LocalDate regDate; public static DashboardNoticeDto of(Notice notice) { - return new DashboardNoticeDto(notice.getId(), notice.getTitle(), notice.getPubDate()); + return new DashboardNoticeDto(notice.getId(), notice.getTitle(), notice.getContent(), notice.getPubDate(), notice.getExpDate(), notice.getCreatedAt().toLocalDate()); } } diff --git a/src/main/java/com/server/hispath/notice/domain/repository/NoticeRepository.java b/src/main/java/com/server/hispath/notice/domain/repository/NoticeRepository.java index 87a7b04..74395a8 100644 --- a/src/main/java/com/server/hispath/notice/domain/repository/NoticeRepository.java +++ b/src/main/java/com/server/hispath/notice/domain/repository/NoticeRepository.java @@ -1,5 +1,6 @@ package com.server.hispath.notice.domain.repository; +import com.server.hispath.activity.domain.Activity; import com.server.hispath.notice.domain.Notice; import org.springframework.data.jpa.repository.JpaRepository; @@ -15,4 +16,11 @@ @Repository public interface NoticeRepository extends JpaRepository { List findTop6ByPubDateLessThanEqualAndExpDateGreaterThanEqualOrderByPubDateDesc(LocalDate pubDate, LocalDate expDate); + + @Query("select n from Notice n " + + "where n.importance = true " + + "and n.pubDate <= :today " + + "and n.expDate >= :today") + List findAllImpInPub(LocalDate today); + } diff --git a/src/main/java/com/server/hispath/notice/presentation/NoticeController.java b/src/main/java/com/server/hispath/notice/presentation/NoticeController.java index aa4b18e..deeef36 100644 --- a/src/main/java/com/server/hispath/notice/presentation/NoticeController.java +++ b/src/main/java/com/server/hispath/notice/presentation/NoticeController.java @@ -1,12 +1,18 @@ package com.server.hispath.notice.presentation; +import com.server.hispath.auth.domain.LoginManager; +import com.server.hispath.auth.domain.ManagerLogin; +import com.server.hispath.auth.domain.RequiredLogin; +import com.server.hispath.auth.domain.RequiredManagerLogin; import com.server.hispath.docs.ApiDoc; +import com.server.hispath.notice.application.dto.DashboardNoticeDto; import com.server.hispath.notice.application.dto.NoticeContentDto; import com.server.hispath.notice.application.dto.NoticeDto; import com.server.hispath.notice.application.NoticeService; import com.server.hispath.notice.domain.Notice; import com.server.hispath.notice.presentation.request.NoticeRequest; +import com.server.hispath.notice.presentation.response.NoticeDashboardResponse; import com.server.hispath.notice.presentation.response.NoticeResponse; import io.swagger.annotations.ApiOperation; import org.springframework.http.ResponseEntity; @@ -26,25 +32,33 @@ public class NoticeController { private final NoticeService noticeService; - @CrossOrigin(origins = "http://localhost:3000") @PostMapping("/notice/add") @ApiOperation(value= ApiDoc.NOTICE_CREATE) - public ResponseEntity create(@RequestBody NoticeRequest request){ - Long id = noticeService.create(request.getManagerId(), NoticeContentDto.from(request)); + @RequiredManagerLogin + public ResponseEntity create(@ManagerLogin LoginManager loginManager, @RequestBody NoticeRequest request){ + Long id = noticeService.create(loginManager.getId(), NoticeContentDto.from(request)); return ResponseEntity.ok(id); } - @CrossOrigin(origins = "http://localhost:3000") @GetMapping("/notice") + @RequiredLogin @ApiOperation(value = ApiDoc.NOTICE_READ_ALL) public ResponseEntity> findAll() { List responses = noticeService.findAll().stream().sorted(Comparator.comparing(NoticeDto::getRegDate).reversed()).map(NoticeResponse::from).collect(Collectors.toList()); return ResponseEntity.ok(responses); } - @CrossOrigin(origins = "http://localhost:3000") + @GetMapping("/notice/imp") + @ApiOperation(value = ApiDoc.NOTICE_READ_IMP) + @RequiredLogin + public ResponseEntity> findImp() { + List responses = noticeService.findImp().stream().sorted(Comparator.comparing(DashboardNoticeDto::getPubDate).reversed()).map(NoticeDashboardResponse::of).collect(Collectors.toList()); + return ResponseEntity.ok(responses); + } + @GetMapping("/notice/{id}") @ApiOperation(value = ApiDoc.NOTICE_READ) + @RequiredLogin public ResponseEntity find(@PathVariable Long id){ // noticeService.increaseViewCnt(id); NoticeResponse response = NoticeResponse.from(noticeService.find(id)); @@ -52,19 +66,18 @@ public ResponseEntity find(@PathVariable Long id){ } - - @CrossOrigin(origins = "http://localhost:3000") @PatchMapping("/notice/{id}") @ApiOperation(value = ApiDoc.NOTICE_UPDATE) + @RequiredManagerLogin public ResponseEntity update(@PathVariable Long id, @RequestBody NoticeRequest request){ NoticeDto dto = noticeService.update(id, request.getManagerId(), NoticeContentDto.from(request)); NoticeResponse response = NoticeResponse.from(dto); return ResponseEntity.ok(response); } - @CrossOrigin(origins = "http://localhost:3000") @DeleteMapping("/notice/{id}") @ApiOperation(value = ApiDoc.NOTICE_DELETE) + @RequiredManagerLogin public ResponseEntity delete(@PathVariable Long id){ noticeService.delete(id); return ResponseEntity.ok(id); diff --git a/src/main/java/com/server/hispath/notice/presentation/response/NoticeDashboardResponse.java b/src/main/java/com/server/hispath/notice/presentation/response/NoticeDashboardResponse.java index 90062b4..ea3ad12 100644 --- a/src/main/java/com/server/hispath/notice/presentation/response/NoticeDashboardResponse.java +++ b/src/main/java/com/server/hispath/notice/presentation/response/NoticeDashboardResponse.java @@ -14,9 +14,12 @@ public class NoticeDashboardResponse { private Long noticeId; private String title; + private String content; private LocalDate pubDate; + private LocalDate expDate; + private LocalDate regDate; static public NoticeDashboardResponse of(DashboardNoticeDto dto) { - return new NoticeDashboardResponse(dto.getId(), dto.getTitle(), dto.getPubDate()); + return new NoticeDashboardResponse(dto.getId(), dto.getTitle(), dto.getContent(), dto.getPubDate(), dto.getExpDate(), dto.getRegDate()); } } diff --git a/src/main/java/com/server/hispath/resume/application/ResumeService.java b/src/main/java/com/server/hispath/resume/application/ResumeService.java index 8e61dfb..02fdac5 100644 --- a/src/main/java/com/server/hispath/resume/application/ResumeService.java +++ b/src/main/java/com/server/hispath/resume/application/ResumeService.java @@ -65,4 +65,13 @@ public List findAllStudentResumes(Long studentId) { .map(ResumeDto::of) .collect(Collectors.toList()); } + + @Transactional(readOnly = true) + public List findRecentResumes(Long studentId) { + Student student = studentService.findById(studentId); + return resumeRepository.findTop6ByStudentOrderByUpdatedAtDesc(student) + .stream() + .map(ResumeDto::of) + .collect(Collectors.toList()); + } } diff --git a/src/main/java/com/server/hispath/resume/domain/repository/ResumeRepository.java b/src/main/java/com/server/hispath/resume/domain/repository/ResumeRepository.java index b1d7510..58a2dad 100644 --- a/src/main/java/com/server/hispath/resume/domain/repository/ResumeRepository.java +++ b/src/main/java/com/server/hispath/resume/domain/repository/ResumeRepository.java @@ -9,4 +9,6 @@ public interface ResumeRepository extends JpaRepository { List findByStudent(Student student); + + List findTop6ByStudentOrderByUpdatedAtDesc(Student student); } diff --git a/src/main/java/com/server/hispath/resume/presentation/ResumeController.java b/src/main/java/com/server/hispath/resume/presentation/ResumeController.java index 7c9c473..d6bcdea 100644 --- a/src/main/java/com/server/hispath/resume/presentation/ResumeController.java +++ b/src/main/java/com/server/hispath/resume/presentation/ResumeController.java @@ -5,6 +5,9 @@ import com.server.hispath.activity.application.ActivityService; import com.server.hispath.activity.application.dto.ActivityParticipantDto; +import com.server.hispath.auth.domain.LoginStudent; +import com.server.hispath.auth.domain.RequiredLogin; +import com.server.hispath.auth.domain.StudentLogin; import com.server.hispath.docs.ApiDoc; import com.server.hispath.resume.application.ResumeService; import com.server.hispath.resume.application.dto.ResumeDto; @@ -31,15 +34,17 @@ public class ResumeController { @PostMapping("/resume") @ApiOperation(value = ApiDoc.RESUME_CREATE) - public ResponseEntity create(@RequestBody ResumeCURequest request) { - // Todo @Login 을 통해 API 를 호출 할 수 있도록 하기 - // Todo 현재는 그냥 단순 테스트를 위해 1번에 넣기 - Long response = resumeService.create(1L, new ResumeDto(request)); + @RequiredLogin + public ResponseEntity create( + @StudentLogin LoginStudent loginStudent, + @RequestBody ResumeCURequest request) { + Long response = resumeService.create(loginStudent.getId(), new ResumeDto(request)); return ResponseEntity.ok(response); } @PutMapping("/resume/{id}") @ApiOperation(value = ApiDoc.RESUME_UPDATE) + @RequiredLogin public ResponseEntity update(@PathVariable Long id, @RequestBody ResumeCURequest request) { ResumeResponse response = ResumeResponse.of(resumeService.update(new ResumeDto(id, request))); return ResponseEntity.ok(response); @@ -47,6 +52,7 @@ public ResponseEntity update(@PathVariable Long id, @RequestBody @DeleteMapping("/resume/{id}") @ApiOperation(value = ApiDoc.RESUME_DELETE) + @RequiredLogin public ResponseEntity delete(@PathVariable Long id) { resumeService.delete(id); return ResponseEntity.ok(null); @@ -54,16 +60,17 @@ public ResponseEntity delete(@PathVariable Long id) { @GetMapping("/resume") @ApiOperation(value = ApiDoc.RESUME_READ) + @RequiredLogin public ResponseEntity find(@RequestParam Long resumeId) { return ResponseEntity.ok(ResumeResponse.of(resumeService.find(resumeId))); } @GetMapping("/resumes") @ApiOperation(value = ApiDoc.RESUME_READ_ALL) - public ResponseEntity> findALl() { - // Todo @Login 을 통해 API 를 호출 할 수 있도록 하기 - // Todo 현재는 그냥 단순 테스트를 위해 1번에 넣기 - List responses = resumeService.findAllStudentResumes(1L) + @RequiredLogin + public ResponseEntity> findAll(@StudentLogin LoginStudent loginStudent) { + + List responses = resumeService.findAllStudentResumes(loginStudent.getId()) .stream() .map(ResumeResponse::of) .collect(Collectors.toList()); @@ -73,10 +80,10 @@ public ResponseEntity> findALl() { @GetMapping("/resume/info") @ApiOperation(value = ApiDoc.RESUME_INFO) - public ResponseEntity findStudentActivityInfo() { - // Todo @Login 을 통해 API 를 호출 할 수 있도록 하기 - // Todo 현재는 그냥 단순 테스트를 위해 1번에 넣기 - StudentDto studentDto = studentService.find(1L); + @RequiredLogin + public ResponseEntity findStudentActivityInfo(@StudentLogin LoginStudent loginStudent) { + + StudentDto studentDto = studentService.find(loginStudent.getId()); List activities = activityService.findAllParticipantActivites(studentDto.getId(), "ALL", "ALL"); return ResponseEntity.ok(new ResumeStudentInfo(studentDto, activities)); } diff --git a/src/main/java/com/server/hispath/scholarship/application/ScholarshipService.java b/src/main/java/com/server/hispath/scholarship/application/ScholarshipService.java index cbe9359..2f52cce 100644 --- a/src/main/java/com/server/hispath/scholarship/application/ScholarshipService.java +++ b/src/main/java/com/server/hispath/scholarship/application/ScholarshipService.java @@ -1,10 +1,10 @@ package com.server.hispath.scholarship.application; -import java.util.List; -import java.util.Optional; -import java.util.Set; +import java.util.*; import java.util.stream.Collectors; +import com.server.hispath.activity.application.dto.*; +import com.server.hispath.activity.application.dto.chart.ChartRankDto; import com.server.hispath.activity.domain.Activity; import com.server.hispath.activity.domain.repository.ActivityRepository; import com.server.hispath.exception.scholarship.ScholarshipDuplicateException; @@ -99,7 +99,7 @@ public void approveAll(List scholarshipApprovalDtos, Str .orElseThrow(StudentNotFoundException::new); Scholarship scholarship = scholarshipRepository.findFirstByStudentAndSemester(student, semester) .orElseThrow(ScholarshipNotFoundException::new); - scholarship.approve(); + scholarship.approve(dto.getResult()); }); @@ -150,4 +150,75 @@ public List searchScholarshipStudent(SearchRequestDto dto) { .map(ScholarshipDto::of) .collect(Collectors.toList()); } + + @Transactional(readOnly = true) + public ChartRankDto getRankChartData(Long studentId, ChartSearchRequestDto dto) { + + Student student = studentService.findById(studentId); + int myWeight = scholarshipRepository.findFirstByStudentAndSemester(student, dto.getSemester()) + .orElseGet(() -> Scholarship.builder().totalMileage(0).build()) + .getTotalMileage(); + Double avgWeight = scholarshipRepositoryCustom.getTotalMileageAvg(dto); + int maxWeight = activityRepository.sumActivityWeight(dto.getSemester()); + return new ChartRankDto(myWeight, avgWeight, maxWeight); + } + + @Transactional(readOnly = true) + public List getChartTimelines(Long studentId) { + return studentRepository.findStudentWithScholarships(studentId) + .orElseThrow(StudentNotFoundException::new) + .getScholarships() + .stream() + .filter(Scholarship::isApproved) + .map(ChartTimelineDto::of) + .sorted(Comparator.comparing(ChartTimelineDto::getSemester)) + .collect(Collectors.toList()); + } + + @Transactional(readOnly = true) + public List getChartWeightDistribution(String semester) { + List scholarships = scholarshipRepository.findAllBySemesterAndApprovedTrue(semester); + Long[] chartWeightDistribute = new Long[6]; + Arrays.fill(chartWeightDistribute, 0L); + scholarships.forEach(scholarship -> { + if (scholarship.getTotalMileage() < 20) + chartWeightDistribute[0]++; + else if (scholarship.getTotalMileage() < 40) + chartWeightDistribute[1]++; + else if (scholarship.getTotalMileage() < 60) + chartWeightDistribute[2]++; + else if (scholarship.getTotalMileage() < 80) + chartWeightDistribute[3]++; + else if (scholarship.getTotalMileage() < 100) + chartWeightDistribute[4]++; + else + chartWeightDistribute[5]++; + }); + + return Arrays.asList(chartWeightDistribute); + } + + @Transactional(readOnly = true) + public List getChartGradeDistribution(String semester) { + List chartGradeDataDtos = scholarshipRepositoryCustom.getCountByGradeAndSemester(semester); + + chartGradeDataDtos.sort(Comparator.comparing(ChartGradeDataDto::getGrade)); + ChartGradeDataDto[] chartGradeDatas = new ChartGradeDataDto[4]; + chartGradeDatas[0] = new ChartGradeDataDto(1, 0L); + chartGradeDatas[1] = new ChartGradeDataDto(2, 0L); + chartGradeDatas[2] = new ChartGradeDataDto(3, 0L); + chartGradeDatas[3] = new ChartGradeDataDto(4, 0L); + chartGradeDataDtos.forEach(chartGradeDataDto -> { + int grade = chartGradeDataDto.getGrade()/2 + chartGradeDataDto.getGrade()%2; + if(grade >= 4) grade = 4; + chartGradeDatas[grade-1].addCnt(chartGradeDataDto.getCnt()); + }); + + return List.of(chartGradeDatas); + } + + @Transactional(readOnly = true) + public List getChartDepartmentDistribution(String semester) { + return scholarshipRepositoryCustom.getCountByDepartmentAndSemester(semester); + } } diff --git a/src/main/java/com/server/hispath/scholarship/application/dto/SearchRequestDto.java b/src/main/java/com/server/hispath/scholarship/application/dto/SearchRequestDto.java index 245902b..741295d 100644 --- a/src/main/java/com/server/hispath/scholarship/application/dto/SearchRequestDto.java +++ b/src/main/java/com/server/hispath/scholarship/application/dto/SearchRequestDto.java @@ -1,6 +1,7 @@ package com.server.hispath.scholarship.application.dto; import lombok.AllArgsConstructor; +import lombok.Builder; import lombok.Getter; import lombok.NoArgsConstructor; @@ -10,7 +11,7 @@ public class SearchRequestDto { private String semester; private String studentSemester; - String department; - String major1; - String major2; + private String department; + private String major1; + private String major2; } diff --git a/src/main/java/com/server/hispath/scholarship/domain/Scholarship.java b/src/main/java/com/server/hispath/scholarship/domain/Scholarship.java index b79eb69..17614b8 100644 --- a/src/main/java/com/server/hispath/scholarship/domain/Scholarship.java +++ b/src/main/java/com/server/hispath/scholarship/domain/Scholarship.java @@ -51,8 +51,9 @@ public class Scholarship extends BaseEntity { private boolean approved = false; - public void approve() { + public void approve(String result) { approved = true; + this.result = result; } public boolean isStudentSemesterMatch(int studentSemester) { diff --git a/src/main/java/com/server/hispath/scholarship/domain/repository/ScholarshipRepository.java b/src/main/java/com/server/hispath/scholarship/domain/repository/ScholarshipRepository.java index 581d83e..1c227c0 100644 --- a/src/main/java/com/server/hispath/scholarship/domain/repository/ScholarshipRepository.java +++ b/src/main/java/com/server/hispath/scholarship/domain/repository/ScholarshipRepository.java @@ -29,5 +29,7 @@ public interface ScholarshipRepository extends JpaRepository "where s.student.id = :id " + "and s.semester = :semester ") Optional findStudentIdAndSemester(Long id, String semester); + + List findAllBySemesterAndApprovedTrue(String semester); } diff --git a/src/main/java/com/server/hispath/scholarship/domain/repository/ScholarshipRepositoryCustom.java b/src/main/java/com/server/hispath/scholarship/domain/repository/ScholarshipRepositoryCustom.java index 76c6de6..113154b 100644 --- a/src/main/java/com/server/hispath/scholarship/domain/repository/ScholarshipRepositoryCustom.java +++ b/src/main/java/com/server/hispath/scholarship/domain/repository/ScholarshipRepositoryCustom.java @@ -7,6 +7,7 @@ import com.querydsl.core.BooleanBuilder; import com.querydsl.jpa.impl.JPAQueryFactory; +import com.server.hispath.activity.application.dto.*; import com.server.hispath.scholarship.application.dto.SearchRequestDto; import com.server.hispath.scholarship.domain.Scholarship; @@ -14,7 +15,9 @@ import lombok.RequiredArgsConstructor; +import static com.server.hispath.activity.domain.QActivity.activity; import static com.server.hispath.scholarship.domain.QScholarship.scholarship; +import static com.server.hispath.student.domain.QParticipant.participant; @Repository @RequiredArgsConstructor @@ -25,15 +28,56 @@ public List searchScholarshipStudent(SearchRequestDto dto) { return queryFactory.select(scholarship) .distinct() .from(scholarship) - .leftJoin(scholarship.student) - .leftJoin(scholarship.sDepartment) - .leftJoin(scholarship.sMajor1) - .leftJoin(scholarship.sMajor2) + .leftJoin(scholarship.student).fetchJoin() + .leftJoin(scholarship.sDepartment).fetchJoin() + .leftJoin(scholarship.sMajor1).fetchJoin() + .leftJoin(scholarship.sMajor2).fetchJoin() .where(scholarshipStudentCondition(dto)) .fetch(); } + public Double getTotalMileageAvg(ChartSearchRequestDto dto) { + return queryFactory.select(scholarship.totalMileage.avg()) + .from(scholarship) + .where(totalMileageAvgCondition(dto)) + .fetchOne(); + } + + public List getCountByGradeAndSemester(String semester) { + return queryFactory.select(new QChartGradeDataDto(scholarship.studentSemester, scholarship.count())) + .from(scholarship) + .where(scholarship.semester.eq(semester).and(scholarship.approved.eq(true))) + .groupBy(scholarship.studentSemester) + .fetch(); + } + + public List getCountByDepartmentAndSemester(String semester) { + return queryFactory.select(new QChartDepartmentDataDto(scholarship.sDepartment.name, scholarship.count())) + .from(scholarship) + .where(scholarship.semester.eq(semester).and(scholarship.approved.eq(true))) + .groupBy(scholarship.sDepartment) + .fetch(); + } + + public BooleanBuilder totalMileageAvgCondition(ChartSearchRequestDto dto) { + BooleanBuilder booleanBuilder = new BooleanBuilder(); + + if (!Objects.isNull(dto.getSemester())) { + booleanBuilder.and(scholarship.semester.eq(dto.getSemester())); + } + if (!Objects.isNull(dto.getDepartment())) { + booleanBuilder.and(scholarship.sDepartment.name.eq(dto.getDepartment())); + } + + if (!Objects.isNull(dto.getGrade())) { + int grade = (dto.getGrade() + 1) / 2 * 2; + booleanBuilder.and(scholarship.studentSemester.eq(grade - 1).or(scholarship.studentSemester.eq(grade))); + } + + return booleanBuilder; + } + public BooleanBuilder scholarshipStudentCondition(SearchRequestDto dto) { BooleanBuilder booleanBuilder = new BooleanBuilder(); diff --git a/src/main/java/com/server/hispath/scholarship/presentation/ScholarshipController.java b/src/main/java/com/server/hispath/scholarship/presentation/ScholarshipController.java index 2d45c51..735b2f4 100644 --- a/src/main/java/com/server/hispath/scholarship/presentation/ScholarshipController.java +++ b/src/main/java/com/server/hispath/scholarship/presentation/ScholarshipController.java @@ -4,10 +4,10 @@ import java.util.stream.Collectors; import com.server.hispath.activity.application.ActivityService; - -import java.util.List; -import java.util.stream.Collectors; - +import com.server.hispath.auth.domain.LoginStudent; +import com.server.hispath.auth.domain.RequiredLogin; +import com.server.hispath.auth.domain.RequiredManagerLogin; +import com.server.hispath.auth.domain.StudentLogin; import com.server.hispath.docs.ApiDoc; import com.server.hispath.scholarship.application.ScholarshipService; import com.server.hispath.scholarship.application.dto.ScholarshipDto; @@ -22,7 +22,6 @@ import org.springframework.web.bind.annotation.*; import org.springframework.web.multipart.MultipartFile; - import io.swagger.annotations.ApiOperation; import lombok.RequiredArgsConstructor; @@ -37,16 +36,18 @@ public class ScholarshipController { @PostMapping("/scholarship") @ApiOperation(value = ApiDoc.SCHOLARSHIP_CREATE) - public ResponseEntity create(@RequestBody ScholarshipCURequest request) { - // Todo @Login 을 통해 API 를 호출 할 수 있도록 하기 - // Todo 현재는 그냥 단순 테스트를 위해 1번에 넣기 - Long response = scholarshipService.create(1L, request.getSemester()); + @RequiredLogin + public ResponseEntity create(@StudentLogin LoginStudent loginStudent, + @RequestBody ScholarshipCURequest request) { + + Long response = scholarshipService.create(loginStudent.getId(), request.getSemester()); return ResponseEntity.ok(response); } @GetMapping("/scholarships") @ApiOperation(value = ApiDoc.SCHOLARSHIP_READ_ALL) + @RequiredManagerLogin public ResponseEntity> getScholarshipStudents(@RequestParam boolean approved, @RequestParam String semester) { List responses = scholarshipService.findAllScholarshipStudent(approved, semester) .stream() @@ -57,6 +58,7 @@ public ResponseEntity> getScholarshipStudents(@Request @GetMapping("/scholarship/activities") @ApiOperation(value = ApiDoc.SCHOLARSHIP_ACTIVITIES) + @RequiredManagerLogin public ResponseEntity getScholarshipDetailInfo(@RequestParam Long studentId, @RequestParam String semester) { List scholarshipActivityResponses = activityService.findAllByStudentAndSemster(studentId, semester) .stream() @@ -69,6 +71,7 @@ public ResponseEntity getScholarshipDetailInfo(@Reque @PutMapping("/scholarship/approval") @ApiOperation(value = ApiDoc.APPROVE_SCHOLARSHIPS) + @RequiredManagerLogin public ResponseEntity approveAll(@RequestPart(value = "file", required = false) MultipartFile file, @RequestPart(value = "semester") String semester) throws Exception { scholarshipService.approveAll(ExcelManager.getScholarshipApproveDatas(ExcelManager.extract(file)), semester); @@ -77,8 +80,9 @@ public ResponseEntity approveAll(@RequestPart(value = "file", required = f @GetMapping("/scholarship/students") @ApiOperation(value = ApiDoc.SCHOLARSHIP_SEARCH_STUDENT) + @RequiredManagerLogin public ResponseEntity> searchScholarshipStudents( - @RequestParam(required = false) String semester , + @RequestParam(required = false) String semester, @RequestParam(required = false) String studentSemester, @RequestParam(required = false) String department, @RequestParam(required = false) String major1, diff --git a/src/main/java/com/server/hispath/scholarship/presentation/response/ScholarshipResponse.java b/src/main/java/com/server/hispath/scholarship/presentation/response/ScholarshipResponse.java index ae544d8..f505672 100644 --- a/src/main/java/com/server/hispath/scholarship/presentation/response/ScholarshipResponse.java +++ b/src/main/java/com/server/hispath/scholarship/presentation/response/ScholarshipResponse.java @@ -22,11 +22,12 @@ public class ScholarshipResponse { private String major2Name; private String email; private String phone; + private String result; private int totalWeight; public static ScholarshipResponse of(ScholarshipDto dto) { return new ScholarshipResponse(dto.getStudentId(), dto.getName(), dto.getStudentNum(), dto.getSemester(), dto.getStudentSemester(), dto.getDepartmentName(), dto.getMajor1Name(), - dto.getMajor2Name(), dto.getEmail(), dto.getPhone(), dto.getTotalWeight()); + dto.getMajor2Name(), dto.getEmail(), dto.getPhone(), dto.getResult(), dto.getTotalWeight()); } } diff --git a/src/main/java/com/server/hispath/student/application/StudentService.java b/src/main/java/com/server/hispath/student/application/StudentService.java index 899988b..d4b6944 100644 --- a/src/main/java/com/server/hispath/student/application/StudentService.java +++ b/src/main/java/com/server/hispath/student/application/StudentService.java @@ -1,5 +1,6 @@ package com.server.hispath.student.application; +import com.server.hispath.activity.application.dto.SemesterDto; import com.server.hispath.department.application.DepartmentService; import com.server.hispath.department.domain.Department; import com.server.hispath.exception.activity.ParticipantNotFoundException; @@ -8,7 +9,9 @@ import com.server.hispath.major.domain.Major; import com.server.hispath.student.application.dto.StudentCUDto; import com.server.hispath.student.application.dto.StudentDto; + import java.util.List; + import com.server.hispath.activity.application.ActivityService; import com.server.hispath.activity.application.MActivityService; import com.server.hispath.activity.domain.Activity; @@ -49,13 +52,13 @@ public Long create(StudentCUDto dto) { @Transactional public void createAll(List dtos) { List students = dtos.stream() - .map(dto -> { - Student student = findById(Long.valueOf(dto.getId())); - Department department = departmentService.findById(dto.getDepartmentId()); - Major major1 = majorService.findById(dto.getMajor1Id()); - Major major2 = majorService.findById(dto.getMajor2Id()); - return student.from(dto, department, major1, major2); - }).collect(Collectors.toList()); + .map(dto -> { + Student student = findById(Long.valueOf(dto.getId())); + Department department = departmentService.findById(dto.getDepartmentId()); + Major major1 = majorService.findById(dto.getMajor1Id()); + Major major2 = majorService.findById(dto.getMajor2Id()); + return student.from(dto, department, major1, major2); + }).collect(Collectors.toList()); studentRepository.saveAll(students); } @@ -73,8 +76,8 @@ public List findAll() { System.out.println("student.getName() = " + student.getName()); }); return students.stream() - .map(StudentDto::from) - .collect(Collectors.toList()); + .map(StudentDto::from) + .collect(Collectors.toList()); } @Transactional @@ -102,7 +105,7 @@ public void registerParticipants(Long activityId, List stud mActivityService.deleteAllParticipant(activity); studentRefDtos.forEach(dto -> { Student student = studentRepository.findByStudentNum(dto.getStudentNum()) - .orElseThrow(StudentNotFoundException::new); + .orElseThrow(StudentNotFoundException::new); validateStudent(student, dto); activity.addParticipant(student, Section.ETC); }); @@ -110,7 +113,7 @@ public void registerParticipants(Long activityId, List stud } @Transactional - public void registerParticipant(Long activityId, StudentSimpleRefDto dto){ + public void registerParticipant(Long activityId, StudentSimpleRefDto dto) { Activity activity = activityService.findById(activityId); Student student = studentRepository.findByStudentNum(dto.getStudentNum()) .orElseThrow(StudentNotFoundException::new); @@ -118,9 +121,21 @@ public void registerParticipant(Long activityId, StudentSimpleRefDto dto){ activity.addParticipant(student, Section.ETC); } - private void validateStudent(Student student, StudentSimpleRefDto dto){ + private void validateStudent(Student student, StudentSimpleRefDto dto) { if (!student.isNameMatch(dto.getName())) { throw new StudentDataNotMatchException(dto.getStudentNum(), dto.getName()); } } + + @Transactional(readOnly = true) + public List getStudentSemesters(Long studentId) { + Student student = studentRepository.findActivitiesByStudent(studentId) + .orElseThrow(StudentNotFoundException::new); + return student.getParticipants() + .stream() + .map(participant -> participant.getActivity().getSemester()) + .distinct() + .map(SemesterDto::new) + .collect(Collectors.toList()); + } } diff --git a/src/main/java/com/server/hispath/student/domain/Inhyok.java b/src/main/java/com/server/hispath/student/domain/Inhyok.java deleted file mode 100644 index 58f326a..0000000 --- a/src/main/java/com/server/hispath/student/domain/Inhyok.java +++ /dev/null @@ -1,24 +0,0 @@ -//package com.server.hispath.student.domain; -// -//import com.server.hispath.activity.domain.Activity; -//import com.server.hispath.category.application.dto.CategoryDto; -//import lombok.AllArgsConstructor; -//import lombok.Getter; -//import lombok.NoArgsConstructor; -// -//@Getter -//@NoArgsConstructor -//@AllArgsConstructor -//public class Inhyok { -// private Long id; -// private String semester; -// private String name; -// private String remark; -// private CategoryDto category; -// private boolean participated; -// -// public Inhyok(Activity activity, boolean participated) { -// return new Inhyok(activity.getId(), activity.getSemester(), activity.getName(), CategoryDto.from(activity.getCategory()), -// , participated); -// } -//} diff --git a/src/main/java/com/server/hispath/student/domain/Participant.java b/src/main/java/com/server/hispath/student/domain/Participant.java index 9e8b7e3..38b4d6b 100644 --- a/src/main/java/com/server/hispath/student/domain/Participant.java +++ b/src/main/java/com/server/hispath/student/domain/Participant.java @@ -32,6 +32,7 @@ public class Participant extends BaseEntity { @Enumerated(EnumType.STRING) private Section section; + @Column(length = 5555) String data; public Participant(Student student, Activity activity, Section section) { @@ -54,10 +55,11 @@ public boolean isSameSemester(String semester) { return activity.isSameSemester(semester); } - public boolean isSameSection(String section) { if (Objects.equals(section, "ALL")) return true; + if (Objects.equals(section, "마일리지")) + return this.activity.getRequestStatus() == 1; return Objects.equals(this.section.getName(), section); } @@ -76,8 +78,13 @@ public void update(ParticipantContentDto participantContentDto) { this.data = participantContentDto.getData(); } + public String getActivityCategoryName(){ + return activity.getCategory().getName(); + } + public boolean isPersonal(){ return this.activity.isPersonal(); } + } diff --git a/src/main/java/com/server/hispath/student/domain/Student.java b/src/main/java/com/server/hispath/student/domain/Student.java index 18ff873..5cfe674 100644 --- a/src/main/java/com/server/hispath/student/domain/Student.java +++ b/src/main/java/com/server/hispath/student/domain/Student.java @@ -61,6 +61,7 @@ public class Student extends BaseEntity { private LocalDateTime lastLoginDate; + @Column(length = 5555) private String readme; @ManyToOne(fetch = FetchType.LAZY) diff --git a/src/main/java/com/server/hispath/student/domain/repository/StudentRepository.java b/src/main/java/com/server/hispath/student/domain/repository/StudentRepository.java index 1c3fd0e..ba73716 100644 --- a/src/main/java/com/server/hispath/student/domain/repository/StudentRepository.java +++ b/src/main/java/com/server/hispath/student/domain/repository/StudentRepository.java @@ -39,8 +39,8 @@ public interface StudentRepository extends JpaRepository { "where s.id = :id and a.requestStatus = 1") Optional findStudentWithMActivities(Long id); -// @Query("select a from Student a " + -// "left join fetch a.participants as p " + -// "left join fetch p.activity as q ") -// Optional findParticipatedStudent(); + @Query("select s from Student s " + + "left join fetch s.scholarships " + + "where s.id = :id ") + Optional findStudentWithScholarships(Long id); } diff --git a/src/main/java/com/server/hispath/student/domain/repository/StudentRepositoryCustom.java b/src/main/java/com/server/hispath/student/domain/repository/StudentRepositoryCustom.java new file mode 100644 index 0000000..da6535e --- /dev/null +++ b/src/main/java/com/server/hispath/student/domain/repository/StudentRepositoryCustom.java @@ -0,0 +1,49 @@ +package com.server.hispath.student.domain.repository; + +import java.util.Objects; +import java.util.Optional; + +import com.querydsl.core.BooleanBuilder; +import com.querydsl.jpa.impl.JPAQueryFactory; +import com.server.hispath.student.domain.QStudent; +import com.server.hispath.student.domain.Student; + +import org.springframework.stereotype.Repository; + +import lombok.RequiredArgsConstructor; + +import static com.server.hispath.activity.domain.QActivity.activity; +import static com.server.hispath.student.domain.QParticipant.participant; +import static com.server.hispath.student.domain.QStudent.student; + +@Repository +@RequiredArgsConstructor +public class StudentRepositoryCustom { + private final JPAQueryFactory queryFactory; + + + public Optional findStudentWithIdAndSemester(Long id, String semester, boolean isMileage) { + Student student = queryFactory.select(QStudent.student) + .from(QStudent.student) + .leftJoin(QStudent.student.participants, participant).fetchJoin() + .leftJoin(participant.activity, activity).fetchJoin() + .leftJoin(activity.category).fetchJoin() + .where(studentSearchCondition(id, semester, isMileage)) + .fetchOne(); + return Optional.ofNullable(student); + } + + + public BooleanBuilder studentSearchCondition(Long studentId, String semester, boolean isMileage) { + BooleanBuilder booleanBuilder = new BooleanBuilder(); + + booleanBuilder.and(student.id.eq(studentId)); + if (!Objects.isNull(semester)) { + booleanBuilder.and(activity.semester.eq(semester)); + } + if (isMileage) { + booleanBuilder.and(activity.requestStatus.eq(1)); + } + return booleanBuilder; + } +} diff --git a/src/main/java/com/server/hispath/student/presentation/StudentController.java b/src/main/java/com/server/hispath/student/presentation/StudentController.java index cfacede..3166d91 100644 --- a/src/main/java/com/server/hispath/student/presentation/StudentController.java +++ b/src/main/java/com/server/hispath/student/presentation/StudentController.java @@ -4,10 +4,18 @@ import java.util.stream.Collectors; import com.server.hispath.activity.application.ActivityService; +import com.server.hispath.activity.application.dto.ActivityParticipantDto; import com.server.hispath.activity.presentation.response.ActivityParticipantStatusResponse; +import com.server.hispath.activity.presentation.response.SemesterResponse; +import com.server.hispath.auth.domain.LoginStudent; +import com.server.hispath.auth.domain.RequiredLogin; +import com.server.hispath.auth.domain.RequiredManagerLogin; +import com.server.hispath.auth.domain.StudentLogin; import com.server.hispath.docs.ApiDoc; import com.server.hispath.notice.application.NoticeService; import com.server.hispath.notice.application.dto.DashboardNoticeDto; +import com.server.hispath.resume.application.ResumeService; +import com.server.hispath.resume.application.dto.ResumeDto; import com.server.hispath.student.application.StudentService; import com.server.hispath.student.application.dto.StudentCUDto; import com.server.hispath.student.application.dto.StudentDto; @@ -32,9 +40,11 @@ public class StudentController { private final StudentService studentService; private final NoticeService noticeService; private final ActivityService activityService; + private final ResumeService resumeService; @PostMapping("/student") @ApiOperation(value = ApiDoc.STUDENT_CREATE) + @RequiredManagerLogin public ResponseEntity create(@RequestBody StudentCURequest request) { Long savedId = studentService.create(StudentCUDto.of(request)); return ResponseEntity.ok(savedId); @@ -42,21 +52,33 @@ public ResponseEntity create(@RequestBody StudentCURequest request) { @PostMapping("/students") @ApiOperation(value = ApiDoc.STUDENTS_CREATE) - public ResponseEntity createStudents(MultipartFile file) throws Exception { + @RequiredManagerLogin + public ResponseEntity createStudents(@RequestPart("file") MultipartFile file) throws Exception { studentService.createAll(ExcelManager.getStudentDatas(ExcelManager.extract(file))); return ResponseEntity.ok(null); } @GetMapping("/student/{id}") @ApiOperation(value = ApiDoc.STUDENT_READ) + @RequiredManagerLogin public ResponseEntity find(@PathVariable Long id) { StudentDto dto = studentService.find(id); StudentResponse response = StudentResponse.from(dto); return ResponseEntity.ok(response); } + @GetMapping("/student") + @ApiOperation(value = ApiDoc.STUDENT_READ) + @RequiredLogin + public ResponseEntity find(@StudentLogin LoginStudent loginStudent) { + StudentDto dto = studentService.find(loginStudent.getId()); + StudentResponse response = StudentResponse.from(dto); + return ResponseEntity.ok(response); + } + @GetMapping("/students") @ApiOperation(value = ApiDoc.STUDENT_READ_ALL) + @RequiredManagerLogin public ResponseEntity> findAll() { List dtos = studentService.findAll(); List responses = dtos.stream() @@ -67,35 +89,73 @@ public ResponseEntity> findAll() { @PutMapping("/student/{id}") @ApiOperation(value = ApiDoc.STUDENT_UPDATE) + @RequiredManagerLogin public ResponseEntity update(@PathVariable Long id, @RequestBody StudentCURequest request) { StudentDto dto = studentService.update(id, request.getDepartmentId(), request.getMajor1Id(), request.getMajor2Id(), StudentCUDto.of(request)); StudentResponse response = StudentResponse.from(dto); return ResponseEntity.ok(response); } + @PutMapping("/student") + @ApiOperation(value = ApiDoc.STUDENT_UPDATE) + @RequiredLogin + public ResponseEntity update( + @StudentLogin LoginStudent loginStudent, + @RequestBody StudentCURequest request) { + StudentDto dto = studentService.update(loginStudent.getId(), request.getDepartmentId(), + request.getMajor1Id(), request.getMajor2Id(), StudentCUDto.of(request)); + StudentResponse response = StudentResponse.from(dto); + return ResponseEntity.ok(response); + } + @DeleteMapping("/student/{id}") @ApiOperation(value = ApiDoc.STUDENT_DELETE) + @RequiredManagerLogin public ResponseEntity delete(@PathVariable Long id) { + studentService.delete(id); return ResponseEntity.ok(id); } - @GetMapping("/student/dashboard/{id}") + @GetMapping("/student/dashboard") @ApiOperation(value = ApiDoc.DASHBOARD) - public ResponseEntity getDashboardInfo(@PathVariable Long id) { - StudentDto studentDto = studentService.find(id); + @RequiredLogin + public ResponseEntity getDashboardInfo(@StudentLogin LoginStudent loginStudent) { + + StudentDto studentDto = studentService.find(loginStudent.getId()); List dashboardNoticeDtos = noticeService.findRecentNotice(); - return ResponseEntity.ok(DashboardResponse.from(studentDto, dashboardNoticeDtos)); + List resumeDtos = resumeService.findRecentResumes(loginStudent.getId()); + List activityDtos = activityService.findRecentParticipantActivities(loginStudent.getId()); + + return ResponseEntity.ok(DashboardResponse.from(studentDto, dashboardNoticeDtos, resumeDtos, activityDtos)); } @GetMapping("/student-activities/status") @ApiOperation(value = ApiDoc.STUDENT_ACTIVITY_READ_SEMESTER_SECTION_STATUS) - public ResponseEntity> findStudentActivitiesWithStatus(@RequestParam String semester, @RequestParam String section) { - // ToDo Student ID 관련해서는 나중에 Login 처리하기 현재는 1L로 되어있음 - List responses = activityService.findAllPersonalParticipantActivites(1L, semester, section) + @RequiredLogin + public ResponseEntity> findStudentActivitiesWithStatus( + @StudentLogin LoginStudent loginStudent, + @RequestParam String semester, + @RequestParam String section) { + + List responses = activityService.findAllPersonalParticipantActivites(loginStudent.getId(), semester, section) .stream() .map(ActivityParticipantStatusResponse::of) .collect(Collectors.toList()); return ResponseEntity.ok(responses); } + + @GetMapping("/student/semesters") + @ApiOperation(value = ApiDoc.STUDENT_SEMESTER) + @RequiredLogin + public ResponseEntity> getStudentSemeters( + @StudentLogin LoginStudent loginStudent + ) { + + List responses = studentService.getStudentSemesters(loginStudent.getId()) + .stream() + .map(SemesterResponse::from) + .collect(Collectors.toList()); + return ResponseEntity.ok(responses); + } } diff --git a/src/main/java/com/server/hispath/student/presentation/response/DashboardResponse.java b/src/main/java/com/server/hispath/student/presentation/response/DashboardResponse.java index 87f63b1..534c589 100644 --- a/src/main/java/com/server/hispath/student/presentation/response/DashboardResponse.java +++ b/src/main/java/com/server/hispath/student/presentation/response/DashboardResponse.java @@ -3,10 +3,12 @@ import java.util.List; import java.util.stream.Collectors; +import com.server.hispath.activity.application.dto.ActivityParticipantDto; import com.server.hispath.department.presentation.response.DepartmentResponse; import com.server.hispath.major.presentation.response.MajorResponse; import com.server.hispath.notice.application.dto.DashboardNoticeDto; import com.server.hispath.notice.presentation.response.NoticeDashboardResponse; +import com.server.hispath.resume.application.dto.ResumeDto; import com.server.hispath.student.application.dto.StudentDto; import lombok.AllArgsConstructor; @@ -31,11 +33,19 @@ public class DashboardResponse { private String blog; private String readme; private List notice; + private List resumes; + private List activities; + + public static DashboardResponse from(StudentDto studentDto, + List noticeDtos, + List resumeDtos, + List activityParticipantDtos) { - public static DashboardResponse from(StudentDto studentDto, List noticeDtos) { return new DashboardResponse(studentDto.getId(), studentDto.getProfile(), studentDto.getName(), studentDto.getStudentNum(), MajorResponse.from(studentDto.getMajor1()), MajorResponse.from(studentDto.getMajor2()), DepartmentResponse.from(studentDto.getDepartmentDto()), studentDto.getSemester(), studentDto.getEmail(), studentDto.getPhone(), studentDto.getGithubId(), studentDto.getBlog(), studentDto.getReadme(), - noticeDtos.stream().map(NoticeDashboardResponse::of).collect(Collectors.toList())); + noticeDtos.stream() + .map(NoticeDashboardResponse::of) + .collect(Collectors.toList()), resumeDtos, activityParticipantDtos); } } diff --git a/src/main/resources/logback-spring.xml b/src/main/resources/logback-spring.xml new file mode 100644 index 0000000..4df4d25 --- /dev/null +++ b/src/main/resources/logback-spring.xml @@ -0,0 +1,15 @@ + + + + + + + + + + + + + + From 4e6f3b6c62da5a219f0c6c020069bb6a891de6a4 Mon Sep 17 00:00:00 2001 From: davidpiao Date: Tue, 29 Nov 2022 20:06:45 +0900 Subject: [PATCH 3/5] chore: student, manager, department, major test data edit --- .../server/hispath/common/TestController.java | 232 ++++++++++-------- 1 file changed, 129 insertions(+), 103 deletions(-) diff --git a/src/main/java/com/server/hispath/common/TestController.java b/src/main/java/com/server/hispath/common/TestController.java index e8b226e..d05d70d 100644 --- a/src/main/java/com/server/hispath/common/TestController.java +++ b/src/main/java/com/server/hispath/common/TestController.java @@ -265,86 +265,100 @@ public void saveParticipant() { private void saveManager() { managerRepository.save(Manager.builder() - .name("김광 교수님") + .name("이정재 교수님") .email("kkim@handong.ac.kr") .department("CSEE") + .profile("https://user-images.githubusercontent.com/63008958/203914314-2eb9a33d-efab-4f08-80cf-ce00757d232a.jpeg") .approved(true).build()); managerRepository.save(Manager.builder() - .name("장소연 교수님") + .name("아이유 교수님") .email("jerry1004@handong.ac.kr") .department("CSEE") + .profile("https://user-images.githubusercontent.com/63008958/203914299-6d707193-28ab-457c-8d03-51efb758072d.jpeg") .approved(true).build()); managerRepository.save(Manager.builder() - .name("장기려 박사님") + .name("송중기 박사님") .email("janggiryeo@handong.ac.kr") .department("JGR") + .profile("https://user-images.githubusercontent.com/63008958/203914292-50d8abb3-8e7a-45c1-90ca-22bc156b1165.jpeg") .approved(true).build()); managerRepository.save(Manager.builder() - .name("최도성 총장님") + .name("공유 총장님") .email("cds@handong.ac.kr") .department("HGU") + .profile("https://user-images.githubusercontent.com/63008958/203914306-5dbc47d3-ae07-4314-8708-abef0fcdd7c1.jpeg") .approved(true).build()); managerRepository.save(Manager.builder() - .name("최경현 선생님") + .name("김태리 선생님") .email("cgh@handong.ac.kr") .department("SW") + .profile("https://user-images.githubusercontent.com/63008958/203914310-b00e05a7-c827-4247-945c-737ac56eeaf1.jpeg") .approved(false).build()); managerRepository.save(Manager.builder() - .name("이윤정 선생님") + .name("이지은 선생님") .email("lyj@handong.ac.kr") .department("SW") + .profile("https://user-images.githubusercontent.com/63008958/203914295-2fc460fe-3998-4f3c-b298-fff9a6c5676a.jpeg") .approved(false).build()); managerRepository.save(Manager.builder() - .name("이미나 선생님") + .name("손예진 선생님") .email("lmn@handong.ac.kr") .department("SW") + .profile("https://user-images.githubusercontent.com/63008958/203914281-9c0acb13-562b-45df-a16a-61015f6881ff.png") .approved(true).build()); managerRepository.save(Manager.builder() - .name("안병웅") + .name("안병웅 관리자") .email("BW_Ahn@handong.ac.kr") .department("전산전자공학부") + .profile("https://user-images.githubusercontent.com/63008958/203915182-c8216b87-9e06-4a10-8efe-b8d0cb43b5af.png") .approved(true).build()); managerRepository.save(Manager.builder() - .name("박성진") - .email("JakePark@handong.ac.kr") + .name("박성진 괸리자") + .email("david@handong.ac.kr") .department("글로벌리더쉽학부") + .profile("https://user-images.githubusercontent.com/63008958/203915214-b9d6ffef-b011-43a4-9a9b-bf160f88b07c.png") .approved(true).build()); managerRepository.save(Manager.builder() .name("홍성헌") .email("lukehongg@handong.ac.kr") .department("전산전자공학부") + .profile("https://hispath.s3.ap-northeast-2.amazonaws.com/upload/student-5/plant-2004483_1920.jpg") .approved(true).build()); managerRepository.save(Manager.builder() .name("이인혁") .email("Bruse@handong.ac.kr") .department("ICT 융합학부") + .profile("https://hispath.s3.ap-northeast-2.amazonaws.com/upload/student-5/plant-2004483_1920.jpg") .approved(true).build()); managerRepository.save(Manager.builder() .name("정수산나") .email("Sanna@handong.ac.kr") .department("경영경제학부") + .profile("https://hispath.s3.ap-northeast-2.amazonaws.com/upload/student-5/plant-2004483_1920.jpg") .approved(false).build()); managerRepository.save(Manager.builder() .name("정석민") .email("PeterJung@handong.ac.kr") .department("글로벌리더쉽학부") + .profile("https://hispath.s3.ap-northeast-2.amazonaws.com/upload/student-5/plant-2004483_1920.jpg") .approved(false).build()); managerRepository.save(Manager.builder() .name("송다빈") .email("Emerson@handong.ac.kr") .department("전산전자공학부") + .profile("https://hispath.s3.ap-northeast-2.amazonaws.com/upload/student-5/plant-2004483_1920.jpg") .approved(true).build()); } @@ -532,7 +546,7 @@ private void saveStudent() { .major2(majorRepository.findByName("-")) .phone("010-9484-4321") .email("david@handong.ac.kr") - .profile("profile.url") + .profile("https://user-images.githubusercontent.com/63008958/203534676-49fb985a-c686-4965-9dc4-d46ae90cc3e7.png") .blog("blog.com") .githubId("@davidpiao.github") .loginCnt(0L) @@ -547,7 +561,7 @@ private void saveStudent() { .major2(majorRepository.findByName("-")) .phone("010-1623-1512") .email("mh03@handong.ac.kr") - .profile("profile.url") + .profile("https://user-images.githubusercontent.com/63008958/203915182-c8216b87-9e06-4a10-8efe-b8d0cb43b5af.png") .blog("blog.com") .githubId("@wooong.github") .loginCnt(0L) @@ -562,7 +576,7 @@ private void saveStudent() { .major2(majorRepository.findByName("언론정보학전공")) .phone("010-1623-3322") .email("hong@handong.ac.kr") - .profile("profile.url") + .profile("https://user-images.githubusercontent.com/63008958/203469086-7e27bf70-cca1-4bf2-be74-e16dbcee7507.jpeg") .blog("blog.com") .githubId("@hong.github") .loginCnt(0L) @@ -577,7 +591,7 @@ private void saveStudent() { .major2(majorRepository.findByName("기계공학전공")) .phone("010-4983-6555") .email("lee@handong.ac.kr") - .profile("profile.url") + .profile("https://user-images.githubusercontent.com/63008958/203468795-8bf6ee4b-5ee6-4ae4-87ed-ca438307c30f.jpeg") .blog("blog.com") .githubId("@ee.github") .loginCnt(0L) @@ -592,7 +606,7 @@ private void saveStudent() { .major2(majorRepository.findByName("-")) .phone("010-4983-6555") .email("jeong@handong.ac.kr") - .profile("profile.url") + .profile("https://hispath.s3.ap-northeast-2.amazonaws.com/upload/student-5/plant-2004483_1920.jpg") .blog("blog.com") .githubId("@jeong.github") .loginCnt(0L) @@ -607,14 +621,14 @@ private void saveStudent() { .major2(majorRepository.findByName("한국법전공")) .phone("010-7788-0142") .email("song@handong.ac.kr") - .profile("profile.url") + .profile("https://user-images.githubusercontent.com/63008958/203534764-4f30254d-d917-444c-84f9-d8e922b967fa.png") .blog("blog.com") .githubId("@song.github") .loginCnt(0L) .readme("song's readme") .build()); studentRepository.save(Student.builder() - .name("김한동") + .name("문하현") .department(departementRepository.findByName("전산전자공학부")) .studentNum("22200000") .semester(5) @@ -622,14 +636,14 @@ private void saveStudent() { .major2(majorRepository.findByName("생명과학전공")) .phone("010-1234-1234") .email("kim@handong.ac.kr") - .profile("profile.url") + .profile("https://user-images.githubusercontent.com/63008958/203492174-ef61e68c-a3d9-429e-8947-75542423977a.png") .blog("blog.com") .githubId("@kim.github") .loginCnt(0L) .readme("kim's readme") .build()); studentRepository.save(Student.builder() - .name("박한동") + .name("박관희") .department(departementRepository.findByName("국제어문학부")) .studentNum("22200001") .semester(3) @@ -637,14 +651,14 @@ private void saveStudent() { .major2(majorRepository.findByName("컴퓨터공학전공")) .phone("010-1234-5678") .email("park@handong.ac.kr") - .profile("profile.url") + .profile("https://user-images.githubusercontent.com/63008958/203862630-2915aaad-8ff0-42ae-b217-fcbce19e4791.png") .blog("blog.com") .githubId("@park.github") .loginCnt(0L) .readme("park's readme") .build()); studentRepository.save(Student.builder() - .name("이한동") + .name("이연진") .department(departementRepository.findByName("경영경제학부")) .studentNum("22200002") .semester(5) @@ -652,14 +666,14 @@ private void saveStudent() { .major2(majorRepository.findByName("컴퓨터공학전공")) .phone("010-5678-1234") .email("lee@handong.ac.kr") - .profile("profile.url") + .profile("https://user-images.githubusercontent.com/63008958/203536628-985c37e3-49a9-4a50-82a3-485c09c456c4.png") .blog("blog.com") .githubId("@lee.github") .loginCnt(0L) .readme("lee's readme") .build()); studentRepository.save(Student.builder() - .name("정한동") + .name("게스트") .department(departementRepository.findByName("법학부")) .studentNum("22200003") .semester(6) @@ -667,7 +681,7 @@ private void saveStudent() { .major2(majorRepository.findByName("컴퓨터공학전공")) .phone("010-1111-1111") .email("jeong@handong.ac.kr") - .profile("profile.url") + .profile("https://hispath.s3.ap-northeast-2.amazonaws.com/upload/student-10/Original Logo.png") .blog("blog.com") .githubId("@jeong.github") .loginCnt(0L) @@ -682,7 +696,7 @@ private void saveStudent() { .major2(majorRepository.findByName("컴퓨터공학전공")) .phone("010-2222-3333") .email("woo@handong.ac.kr") - .profile("profile.url") + .profile("https://hispath.s3.ap-northeast-2.amazonaws.com/upload/student-5/plant-2004483_1920.jpg") .blog("blog.com") .githubId("@woo.github") .loginCnt(0L) @@ -697,7 +711,7 @@ private void saveStudent() { .major2(majorRepository.findByName("컴퓨터공학전공")) .phone("010-4444-1234") .email("wi@handong.ac.kr") - .profile("profile.url") + .profile("https://hispath.s3.ap-northeast-2.amazonaws.com/upload/student-5/plant-2004483_1920.jpg") .blog("blog.com") .githubId("@wi.github") .loginCnt(0L) @@ -712,7 +726,7 @@ private void saveStudent() { .major2(majorRepository.findByName("컴퓨터공학전공")) .phone("010-9999-1111") .email("ha@handong.ac.kr") - .profile("profile.url") + .profile("https://hispath.s3.ap-northeast-2.amazonaws.com/upload/student-5/plant-2004483_1920.jpg") .blog("blog.com") .githubId("@ha.github") .loginCnt(0L) @@ -727,7 +741,7 @@ private void saveStudent() { .major2(majorRepository.findByName("컴퓨터공학전공")) .phone("010-4312-4312") .email("ma@handong.ac.kr") - .profile("profile.url") + .profile("https://hispath.s3.ap-northeast-2.amazonaws.com/upload/student-5/plant-2004483_1920.jpg") .blog("blog.com") .githubId("@ma.github") .loginCnt(0L) @@ -742,7 +756,7 @@ private void saveStudent() { .major2(majorRepository.findByName("컴퓨터공학전공")) .phone("010-3434-2323") .email("yu@handong.ac.kr") - .profile("profile.url") + .profile("https://hispath.s3.ap-northeast-2.amazonaws.com/upload/student-5/plant-2004483_1920.jpg") .blog("blog.com") .githubId("@yu.github") .loginCnt(0L) @@ -757,7 +771,7 @@ private void saveStudent() { .major2(majorRepository.findByName("컴퓨터공학전공")) .phone("010-8787-8787") .email("jin@handong.ac.kr") - .profile("profile.url") + .profile("https://hispath.s3.ap-northeast-2.amazonaws.com/upload/student-5/plant-2004483_1920.jpg") .blog("blog.com") .githubId("@jin.github") .loginCnt(0L) @@ -772,7 +786,7 @@ private void saveStudent() { .major2(majorRepository.findByName("생명과학전공")) .phone("010-1234-1234") .email("kim@handong.ac.kr") - .profile("profile.url") + .profile("https://hispath.s3.ap-northeast-2.amazonaws.com/upload/student-5/plant-2004483_1920.jpg") .blog("blog.com") .githubId("@kim.github") .loginCnt(0L) @@ -787,7 +801,7 @@ private void saveStudent() { .major2(majorRepository.findByName("컴퓨터공학전공")) .phone("010-1234-5678") .email("park@handong.ac.kr") - .profile("profile.url") + .profile("https://hispath.s3.ap-northeast-2.amazonaws.com/upload/student-5/plant-2004483_1920.jpg") .blog("blog.com") .githubId("@park.github") .loginCnt(0L) @@ -802,7 +816,7 @@ private void saveStudent() { .major2(majorRepository.findByName("컴퓨터공학전공")) .phone("010-6655-4232") .email("lee@handong.ac.kr") - .profile("profile.url") + .profile("https://hispath.s3.ap-northeast-2.amazonaws.com/upload/student-5/plant-2004483_1920.jpg") .blog("blog.com") .githubId("@lee.github") .loginCnt(0L) @@ -817,7 +831,7 @@ private void saveStudent() { .major2(majorRepository.findByName("컴퓨터공학전공")) .phone("010-9292-9292") .email("jeong@handong.ac.kr") - .profile("profile.url") + .profile("https://hispath.s3.ap-northeast-2.amazonaws.com/upload/student-5/plant-2004483_1920.jpg") .blog("blog.com") .githubId("@jeong.github") .loginCnt(0L) @@ -832,7 +846,7 @@ private void saveStudent() { .major2(majorRepository.findByName("컴퓨터공학전공")) .phone("010-2332-4333") .email("woo@handong.ac.kr") - .profile("profile.url") + .profile("https://hispath.s3.ap-northeast-2.amazonaws.com/upload/student-5/plant-2004483_1920.jpg") .blog("blog.com") .githubId("@woo.github") .loginCnt(0L) @@ -847,7 +861,7 @@ private void saveStudent() { .major2(majorRepository.findByName("컴퓨터공학전공")) .phone("010-4444-1234") .email("wi@handong.ac.kr") - .profile("profile.url") + .profile("https://hispath.s3.ap-northeast-2.amazonaws.com/upload/student-5/plant-2004483_1920.jpg") .blog("blog.com") .githubId("@wi.github") .loginCnt(0L) @@ -862,7 +876,7 @@ private void saveStudent() { .major2(majorRepository.findByName("컴퓨터공학전공")) .phone("010-3221-6665") .email("ha@handong.ac.kr") - .profile("profile.url") + .profile("https://hispath.s3.ap-northeast-2.amazonaws.com/upload/student-5/plant-2004483_1920.jpg") .blog("blog.com") .githubId("@ha.github") .loginCnt(0L) @@ -877,7 +891,7 @@ private void saveStudent() { .major2(majorRepository.findByName("컴퓨터공학전공")) .phone("010-4211-1123") .email("ma@handong.ac.kr") - .profile("profile.url") + .profile("https://hispath.s3.ap-northeast-2.amazonaws.com/upload/student-5/plant-2004483_1920.jpg") .blog("blog.com") .githubId("@ma.github") .loginCnt(0L) @@ -892,7 +906,7 @@ private void saveStudent() { .major2(majorRepository.findByName("컴퓨터공학전공")) .phone("010-2311-9992") .email("yu@handong.ac.kr") - .profile("profile.url") + .profile("https://hispath.s3.ap-northeast-2.amazonaws.com/upload/student-5/plant-2004483_1920.jpg") .blog("blog.com") .githubId("@yu.github") .loginCnt(0L) @@ -907,7 +921,7 @@ private void saveStudent() { .major2(majorRepository.findByName("컴퓨터공학전공")) .phone("010-1234-0494") .email("jin@handong.ac.kr") - .profile("profile.url") + .profile("https://hispath.s3.ap-northeast-2.amazonaws.com/upload/student-5/plant-2004483_1920.jpg") .blog("blog.com") .githubId("@jin.github") .loginCnt(0L) @@ -922,7 +936,7 @@ private void saveStudent() { .major2(majorRepository.findByName("생명과학전공")) .phone("010-3232-6767") .email("kim@handong.ac.kr") - .profile("profile.url") + .profile("https://hispath.s3.ap-northeast-2.amazonaws.com/upload/student-5/plant-2004483_1920.jpg") .blog("blog.com") .githubId("@kim.github") .loginCnt(0L) @@ -937,7 +951,7 @@ private void saveStudent() { .major2(majorRepository.findByName("컴퓨터공학전공")) .phone("010-4322-9009") .email("park@handong.ac.kr") - .profile("profile.url") + .profile("https://hispath.s3.ap-northeast-2.amazonaws.com/upload/student-5/plant-2004483_1920.jpg") .blog("blog.com") .githubId("@park.github") .loginCnt(0L) @@ -952,7 +966,7 @@ private void saveStudent() { .major2(majorRepository.findByName("컴퓨터공학전공")) .phone("010-6653-4231") .email("lee@handong.ac.kr") - .profile("profile.url") + .profile("https://hispath.s3.ap-northeast-2.amazonaws.com/upload/student-5/plant-2004483_1920.jpg") .blog("blog.com") .githubId("@lee.github") .loginCnt(0L) @@ -967,7 +981,7 @@ private void saveStudent() { .major2(majorRepository.findByName("컴퓨터공학전공")) .phone("010-9292-9232") .email("jeong@handong.ac.kr") - .profile("profile.url") + .profile("https://hispath.s3.ap-northeast-2.amazonaws.com/upload/student-5/plant-2004483_1920.jpg") .blog("blog.com") .githubId("@jeong.github") .loginCnt(0L) @@ -982,7 +996,7 @@ private void saveStudent() { .major2(majorRepository.findByName("컴퓨터공학전공")) .phone("010-2312-4343") .email("woo@handong.ac.kr") - .profile("profile.url") + .profile("https://hispath.s3.ap-northeast-2.amazonaws.com/upload/student-5/plant-2004483_1920.jpg") .blog("blog.com") .githubId("@woo.github") .loginCnt(0L) @@ -997,7 +1011,7 @@ private void saveStudent() { .major2(majorRepository.findByName("컴퓨터공학전공")) .phone("010-4444-4234") .email("wi@handong.ac.kr") - .profile("profile.url") + .profile("https://hispath.s3.ap-northeast-2.amazonaws.com/upload/student-5/plant-2004483_1920.jpg") .blog("blog.com") .githubId("@wi.github") .loginCnt(0L) @@ -1012,7 +1026,7 @@ private void saveStudent() { .major2(majorRepository.findByName("컴퓨터공학전공")) .phone("010-3221-6365") .email("ha@handong.ac.kr") - .profile("profile.url") + .profile("https://hispath.s3.ap-northeast-2.amazonaws.com/upload/student-5/plant-2004483_1920.jpg") .blog("blog.com") .githubId("@ha.github") .loginCnt(0L) @@ -1027,7 +1041,7 @@ private void saveStudent() { .major2(majorRepository.findByName("컴퓨터공학전공")) .phone("010-4211-1673") .email("ma@handong.ac.kr") - .profile("profile.url") + .profile("https://hispath.s3.ap-northeast-2.amazonaws.com/upload/student-5/plant-2004483_1920.jpg") .blog("blog.com") .githubId("@ma.github") .loginCnt(0L) @@ -1042,7 +1056,7 @@ private void saveStudent() { .major2(majorRepository.findByName("컴퓨터공학전공")) .phone("010-2911-9192") .email("yu@handong.ac.kr") - .profile("profile.url") + .profile("https://hispath.s3.ap-northeast-2.amazonaws.com/upload/student-5/plant-2004483_1920.jpg") .blog("blog.com") .githubId("@yu.github") .loginCnt(0L) @@ -1057,7 +1071,7 @@ private void saveStudent() { .major2(majorRepository.findByName("컴퓨터공학전공")) .phone("010-4321-1275") .email("jin@handong.ac.kr") - .profile("profile.url") + .profile("https://hispath.s3.ap-northeast-2.amazonaws.com/upload/student-5/plant-2004483_1920.jpg") .blog("blog.com") .githubId("@jin.github") .loginCnt(0L) @@ -1072,7 +1086,7 @@ private void saveStudent() { .major2(majorRepository.findByName("생명과학전공")) .phone("010-6731-1423") .email("kim@handong.ac.kr") - .profile("profile.url") + .profile("https://hispath.s3.ap-northeast-2.amazonaws.com/upload/student-5/plant-2004483_1920.jpg") .blog("blog.com") .githubId("@kim.github") .loginCnt(0L) @@ -1087,7 +1101,7 @@ private void saveStudent() { .major2(majorRepository.findByName("컴퓨터공학전공")) .phone("010-4222-3009") .email("park@handong.ac.kr") - .profile("profile.url") + .profile("https://hispath.s3.ap-northeast-2.amazonaws.com/upload/student-5/plant-2004483_1920.jpg") .blog("blog.com") .githubId("@park.github") .loginCnt(0L) @@ -1102,7 +1116,7 @@ private void saveStudent() { .major2(majorRepository.findByName("컴퓨터공학전공")) .phone("010-6653-9991") .email("lee@handong.ac.kr") - .profile("profile.url") + .profile("https://hispath.s3.ap-northeast-2.amazonaws.com/upload/student-5/plant-2004483_1920.jpg") .blog("blog.com") .githubId("@lee.github") .loginCnt(0L) @@ -1117,7 +1131,7 @@ private void saveStudent() { .major2(majorRepository.findByName("컴퓨터공학전공")) .phone("010-1292-9132") .email("jeong@handong.ac.kr") - .profile("profile.url") + .profile("https://hispath.s3.ap-northeast-2.amazonaws.com/upload/student-5/plant-2004483_1920.jpg") .blog("blog.com") .githubId("@jeong.github") .loginCnt(0L) @@ -1132,7 +1146,7 @@ private void saveStudent() { .major2(majorRepository.findByName("컴퓨터공학전공")) .phone("010-2112-4243") .email("woo@handong.ac.kr") - .profile("profile.url") + .profile("https://hispath.s3.ap-northeast-2.amazonaws.com/upload/student-5/plant-2004483_1920.jpg") .blog("blog.com") .githubId("@woo.github") .loginCnt(0L) @@ -1147,7 +1161,7 @@ private void saveStudent() { .major2(majorRepository.findByName("컴퓨터공학전공")) .phone("010-1144-4214") .email("wi@handong.ac.kr") - .profile("profile.url") + .profile("https://hispath.s3.ap-northeast-2.amazonaws.com/upload/student-5/plant-2004483_1920.jpg") .blog("blog.com") .githubId("@wi.github") .loginCnt(0L) @@ -1162,7 +1176,7 @@ private void saveStudent() { .major2(majorRepository.findByName("컴퓨터공학전공")) .phone("010-3331-6365") .email("ha@handong.ac.kr") - .profile("profile.url") + .profile("https://hispath.s3.ap-northeast-2.amazonaws.com/upload/student-5/plant-2004483_1920.jpg") .blog("blog.com") .githubId("@ha.github") .loginCnt(0L) @@ -1177,7 +1191,7 @@ private void saveStudent() { .major2(majorRepository.findByName("컴퓨터공학전공")) .phone("010-4211-2673") .email("ma@handong.ac.kr") - .profile("profile.url") + .profile("https://hispath.s3.ap-northeast-2.amazonaws.com/upload/student-5/plant-2004483_1920.jpg") .blog("blog.com") .githubId("@ma.github") .loginCnt(0L) @@ -1192,7 +1206,7 @@ private void saveStudent() { .major2(majorRepository.findByName("컴퓨터공학전공")) .phone("010-2931-9192") .email("yu@handong.ac.kr") - .profile("profile.url") + .profile("https://hispath.s3.ap-northeast-2.amazonaws.com/upload/student-5/plant-2004483_1920.jpg") .blog("blog.com") .githubId("@yu.github") .loginCnt(0L) @@ -1207,7 +1221,7 @@ private void saveStudent() { .major2(majorRepository.findByName("컴퓨터공학전공")) .phone("010-4891-1275") .email("jin@handong.ac.kr") - .profile("profile.url") + .profile("https://hispath.s3.ap-northeast-2.amazonaws.com/upload/student-5/plant-2004483_1920.jpg") .blog("blog.com") .githubId("@jin.github") .loginCnt(0L) @@ -1223,7 +1237,7 @@ private void saveStudent() { .major2(majorRepository.findByName("생명과학전공")) .phone("010-9191-1423") .email("kim@handong.ac.kr") - .profile("profile.url") + .profile("https://hispath.s3.ap-northeast-2.amazonaws.com/upload/student-5/plant-2004483_1920.jpg") .blog("blog.com") .githubId("@kim.github") .loginCnt(0L) @@ -1238,7 +1252,7 @@ private void saveStudent() { .major2(majorRepository.findByName("컴퓨터공학전공")) .phone("010-9991-3009") .email("park@handong.ac.kr") - .profile("profile.url") + .profile("https://hispath.s3.ap-northeast-2.amazonaws.com/upload/student-5/plant-2004483_1920.jpg") .blog("blog.com") .githubId("@park.github") .loginCnt(0L) @@ -1253,7 +1267,7 @@ private void saveStudent() { .major2(majorRepository.findByName("컴퓨터공학전공")) .phone("010-6653-9881") .email("lee@handong.ac.kr") - .profile("profile.url") + .profile("https://hispath.s3.ap-northeast-2.amazonaws.com/upload/student-5/plant-2004483_1920.jpg") .blog("blog.com") .githubId("@lee.github") .loginCnt(0L) @@ -1268,7 +1282,7 @@ private void saveStudent() { .major2(majorRepository.findByName("컴퓨터공학전공")) .phone("010-1293-9832") .email("jeong@handong.ac.kr") - .profile("profile.url") + .profile("https://hispath.s3.ap-northeast-2.amazonaws.com/upload/student-5/plant-2004483_1920.jpg") .blog("blog.com") .githubId("@jeong.github") .loginCnt(0L) @@ -1283,7 +1297,7 @@ private void saveStudent() { .major2(majorRepository.findByName("컴퓨터공학전공")) .phone("010-2188-4243") .email("woo@handong.ac.kr") - .profile("profile.url") + .profile("https://hispath.s3.ap-northeast-2.amazonaws.com/upload/student-5/plant-2004483_1920.jpg") .blog("blog.com") .githubId("@woo.github") .loginCnt(0L) @@ -1298,7 +1312,7 @@ private void saveStudent() { .major2(majorRepository.findByName("컴퓨터공학전공")) .phone("010-6644-4214") .email("wi@handong.ac.kr") - .profile("profile.url") + .profile("https://hispath.s3.ap-northeast-2.amazonaws.com/upload/student-5/plant-2004483_1920.jpg") .blog("blog.com") .githubId("@wi.github") .loginCnt(0L) @@ -1313,7 +1327,7 @@ private void saveStudent() { .major2(majorRepository.findByName("컴퓨터공학전공")) .phone("010-3431-6365") .email("ha@handong.ac.kr") - .profile("profile.url") + .profile("https://hispath.s3.ap-northeast-2.amazonaws.com/upload/student-5/plant-2004483_1920.jpg") .blog("blog.com") .githubId("@ha.github") .loginCnt(0L) @@ -1328,7 +1342,7 @@ private void saveStudent() { .major2(majorRepository.findByName("컴퓨터공학전공")) .phone("010-4111-2673") .email("ma@handong.ac.kr") - .profile("profile.url") + .profile("https://hispath.s3.ap-northeast-2.amazonaws.com/upload/student-5/plant-2004483_1920.jpg") .blog("blog.com") .githubId("@ma.github") .loginCnt(0L) @@ -1343,7 +1357,7 @@ private void saveStudent() { .major2(majorRepository.findByName("컴퓨터공학전공")) .phone("010-2931-9192") .email("yu@handong.ac.kr") - .profile("profile.url") + .profile("https://hispath.s3.ap-northeast-2.amazonaws.com/upload/student-5/plant-2004483_1920.jpg") .blog("blog.com") .githubId("@yu.github") .loginCnt(0L) @@ -1358,7 +1372,7 @@ private void saveStudent() { .major2(majorRepository.findByName("컴퓨터공학전공")) .phone("010-4821-1175") .email("jin@handong.ac.kr") - .profile("profile.url") + .profile("https://hispath.s3.ap-northeast-2.amazonaws.com/upload/student-5/plant-2004483_1920.jpg") .blog("blog.com") .githubId("@jin.github") .loginCnt(0L) @@ -1395,39 +1409,51 @@ private void saveCategory() { private void saveDepartment() { departementRepository.save(Department.builder() .name("전산전자공학부") + .profile("https://user-images.githubusercontent.com/63008958/203982136-82098fb9-f082-40e3-a677-e84076ea7745.png") .build()); departementRepository.save(Department.builder() .name("국제어문학부") + .profile("https://user-images.githubusercontent.com/63008958/203982173-f22aa5a5-0e7f-45cc-91b0-1870ced20441.png") .build()); departementRepository.save(Department.builder() .name("경영경제학부") + .profile("https://user-images.githubusercontent.com/63008958/203982171-65bbc7d2-a8de-43d2-9db3-ca361aa36b1c.png") .build()); departementRepository.save(Department.builder() .name("법학부") + .profile("https://user-images.githubusercontent.com/63008958/203982170-44a91016-1b6a-4d88-b7a1-4560966521f2.png") .build()); departementRepository.save(Department.builder() .name("커뮤니케이션학부") + .profile("https://user-images.githubusercontent.com/63008958/203982168-d3cba5e1-2627-4941-a414-aa3e17fd2959.png") .build()); departementRepository.save(Department.builder() .name("상담심리사회복지학부") + .profile("https://user-images.githubusercontent.com/63008958/203982129-0ed8a671-c04a-443f-b48e-7471074112ea.png") .build()); departementRepository.save(Department.builder() .name("공간환경시스템공학부") + .profile("https://user-images.githubusercontent.com/63008958/203982164-378d214b-04ce-4d1f-b909-36daf17b5cdb.png") .build()); departementRepository.save(Department.builder() .name("콘텐츠융합디자인학부") + .profile("https://user-images.githubusercontent.com/63008958/203982153-f2ae91d9-8984-40ed-9802-5b2f71f123b5.png") .build()); departementRepository.save(Department.builder() .name("기계제어공학부") + .profile("https://user-images.githubusercontent.com/63008958/203982161-61e66aa6-6625-4eb0-819c-71edc01f47ad.png") .build()); departementRepository.save(Department.builder() .name("ICT 창업학부") + .profile("https://user-images.githubusercontent.com/63008958/203982115-30963e7f-19e9-4f45-8390-bec128a1981b.png") .build()); departementRepository.save(Department.builder() .name("생명과학부") + .profile("https://user-images.githubusercontent.com/63008958/203982143-6972a9ad-8b43-4024-b63f-59ce0969e922.png") .build()); departementRepository.save(Department.builder() .name("글로벌리더쉽학부") + .profile("https://user-images.githubusercontent.com/63008958/203982177-4324201c-63d8-4df0-abe7-09fd1c7cfd21.png") .build()); } @@ -1977,38 +2003,38 @@ public void saveActivities() { private void saveMajor() { - majorRepository.save(Major.builder().name("-").build()); - majorRepository.save(Major.builder().name("건설공학전공").build()); - majorRepository.save(Major.builder().name("도시환경공학전공").build()); - majorRepository.save(Major.builder().name("기계공학전공").build()); - majorRepository.save(Major.builder().name("전자제어공학전공").build()); - majorRepository.save(Major.builder().name("생명과학전공").build()); - majorRepository.save(Major.builder().name("글로벌융합전공").build()); - majorRepository.save(Major.builder().name("수학통계전공").build()); - majorRepository.save(Major.builder().name("학생설계융합전공").build()); - majorRepository.save(Major.builder().name("시각디자인전공").build()); - majorRepository.save(Major.builder().name("제품디자인전공").build()); - majorRepository.save(Major.builder().name("컴퓨터공학전공").build()); - majorRepository.save(Major.builder().name("컴퓨터공학심화전공").build()); - majorRepository.save(Major.builder().name("전자공학전공").build()); - majorRepository.save(Major.builder().name("전자공학심화전공").build()); - majorRepository.save(Major.builder().name("Information Technology").build()); - majorRepository.save(Major.builder().name("ICT 융합전공").build()); - majorRepository.save(Major.builder().name("AI Convergence & Entrepreneurship 전공").build()); - majorRepository.save(Major.builder().name("Global Entrepreneurship 전공").build()); - majorRepository.save(Major.builder().name("AI 융합 전공").build()); - majorRepository.save(Major.builder().name("데이터 사이언스 전공").build()); - majorRepository.save(Major.builder().name("경영학전공").build()); - majorRepository.save(Major.builder().name("경제학전공").build()); - majorRepository.save(Major.builder().name("Global Management").build()); - majorRepository.save(Major.builder().name("국제지역학전공").build()); - majorRepository.save(Major.builder().name("영어전공").build()); - majorRepository.save(Major.builder().name("한국법전공").build()); - majorRepository.save(Major.builder().name("US & International Law").build()); - majorRepository.save(Major.builder().name("상담심리학전공").build()); - majorRepository.save(Major.builder().name("사회복지학전공").build()); - majorRepository.save(Major.builder().name("공연영상학전공").build()); - majorRepository.save(Major.builder().name("언론정보학전공").build()); - majorRepository.save(Major.builder().name("글로벌한국학전공").build()); + majorRepository.save(Major.builder().name("-").profile("https://user-images.githubusercontent.com/63008958/203987348-497d8992-98e2-47ff-9769-a7207e6961ed.png").build()); + majorRepository.save(Major.builder().name("건설공학전공").profile("https://user-images.githubusercontent.com/63008958/203986081-cc605f80-7cb3-4fc9-93ed-9712a38506c6.jpg").build()); + majorRepository.save(Major.builder().name("도시환경공학전공").profile("https://user-images.githubusercontent.com/63008958/203986080-4921f01e-8fdd-480c-b764-f1d926b070d3.jpg").build()); + majorRepository.save(Major.builder().name("기계공학전공").profile("https://user-images.githubusercontent.com/63008958/203986079-59fe24a6-d934-4dad-9b80-35a1a5306535.jpg").build()); + majorRepository.save(Major.builder().name("전자제어공학전공").profile("https://user-images.githubusercontent.com/63008958/203986077-425b14ae-37f5-480a-b00c-fdec96f09b9d.jpg").build()); + majorRepository.save(Major.builder().name("생명과학전공").profile("https://user-images.githubusercontent.com/63008958/203986074-b785eed9-1531-4c32-b153-dec59ea10982.jpg").build()); + majorRepository.save(Major.builder().name("글로벌융합전공").profile("https://user-images.githubusercontent.com/63008958/203986073-4a098ecc-5f91-4ab4-abb3-2a90149c566a.jpg").build()); + majorRepository.save(Major.builder().name("수학통계전공").profile("https://user-images.githubusercontent.com/63008958/203986071-ba9e0fb7-e246-4cfc-b1cc-788264a9086b.jpg").build()); + majorRepository.save(Major.builder().name("학생설계융합전공").profile("https://user-images.githubusercontent.com/63008958/203986068-5fd2f7d5-c894-49ed-92d7-30a63b4e88f9.jpg").build()); + majorRepository.save(Major.builder().name("시각디자인전공").profile("https://user-images.githubusercontent.com/63008958/203986065-746e6d2d-38e0-494e-b5c4-9060d5bb329e.jpg").build()); + majorRepository.save(Major.builder().name("제품디자인전공").profile("https://user-images.githubusercontent.com/63008958/203986063-d3aa8474-58c6-4e22-a23f-1a17edb40300.jpg").build()); + majorRepository.save(Major.builder().name("컴퓨터공학전공").profile("https://user-images.githubusercontent.com/63008958/203986059-4fc80f57-49b3-453f-94de-6f51b729730a.jpg").build()); + majorRepository.save(Major.builder().name("컴퓨터공학심화전공").profile("https://user-images.githubusercontent.com/63008958/203986052-b02066c1-0ff5-41ed-81e7-72bcf5284dc3.jpg").build()); + majorRepository.save(Major.builder().name("전자공학전공").profile("").build()); + majorRepository.save(Major.builder().name("전자공학심화전공").profile("").build()); + majorRepository.save(Major.builder().name("Information Technology").profile("").build()); + majorRepository.save(Major.builder().name("ICT 융합전공").profile("").build()); + majorRepository.save(Major.builder().name("AI Convergence & Entrepreneurship 전공").profile("").build()); + majorRepository.save(Major.builder().name("Global Entrepreneurship 전공").profile("").build()); + majorRepository.save(Major.builder().name("AI 융합 전공").profile("").build()); + majorRepository.save(Major.builder().name("데이터 사이언스 전공").profile("").build()); + majorRepository.save(Major.builder().name("경영학전공").profile("").build()); + majorRepository.save(Major.builder().name("경제학전공").profile("").build()); + majorRepository.save(Major.builder().name("Global Management").profile("").build()); + majorRepository.save(Major.builder().name("국제지역학전공").profile("").build()); + majorRepository.save(Major.builder().name("영어전공").profile("").build()); + majorRepository.save(Major.builder().name("한국법전공").profile("").build()); + majorRepository.save(Major.builder().name("US & International Law").profile("").build()); + majorRepository.save(Major.builder().name("상담심리학전공").profile("").build()); + majorRepository.save(Major.builder().name("사회복지학전공").profile("").build()); + majorRepository.save(Major.builder().name("공연영상학전공").profile("").build()); + majorRepository.save(Major.builder().name("언론정보학전공").profile("").build()); + majorRepository.save(Major.builder().name("글로벌한국학전공").profile("").build()); } } \ No newline at end of file From be00e67a41497467120ae2040e49dc92b3466d0a Mon Sep 17 00:00:00 2001 From: davidpiao Date: Tue, 29 Nov 2022 20:30:38 +0900 Subject: [PATCH 4/5] chore: added more major profile pics --- .../server/hispath/common/TestController.java | 26 +++++++++---------- 1 file changed, 13 insertions(+), 13 deletions(-) diff --git a/src/main/java/com/server/hispath/common/TestController.java b/src/main/java/com/server/hispath/common/TestController.java index d05d70d..6549f84 100644 --- a/src/main/java/com/server/hispath/common/TestController.java +++ b/src/main/java/com/server/hispath/common/TestController.java @@ -2016,19 +2016,19 @@ private void saveMajor() { majorRepository.save(Major.builder().name("제품디자인전공").profile("https://user-images.githubusercontent.com/63008958/203986063-d3aa8474-58c6-4e22-a23f-1a17edb40300.jpg").build()); majorRepository.save(Major.builder().name("컴퓨터공학전공").profile("https://user-images.githubusercontent.com/63008958/203986059-4fc80f57-49b3-453f-94de-6f51b729730a.jpg").build()); majorRepository.save(Major.builder().name("컴퓨터공학심화전공").profile("https://user-images.githubusercontent.com/63008958/203986052-b02066c1-0ff5-41ed-81e7-72bcf5284dc3.jpg").build()); - majorRepository.save(Major.builder().name("전자공학전공").profile("").build()); - majorRepository.save(Major.builder().name("전자공학심화전공").profile("").build()); - majorRepository.save(Major.builder().name("Information Technology").profile("").build()); - majorRepository.save(Major.builder().name("ICT 융합전공").profile("").build()); - majorRepository.save(Major.builder().name("AI Convergence & Entrepreneurship 전공").profile("").build()); - majorRepository.save(Major.builder().name("Global Entrepreneurship 전공").profile("").build()); - majorRepository.save(Major.builder().name("AI 융합 전공").profile("").build()); - majorRepository.save(Major.builder().name("데이터 사이언스 전공").profile("").build()); - majorRepository.save(Major.builder().name("경영학전공").profile("").build()); - majorRepository.save(Major.builder().name("경제학전공").profile("").build()); - majorRepository.save(Major.builder().name("Global Management").profile("").build()); - majorRepository.save(Major.builder().name("국제지역학전공").profile("").build()); - majorRepository.save(Major.builder().name("영어전공").profile("").build()); + majorRepository.save(Major.builder().name("전자공학전공").profile("https://user-images.githubusercontent.com/63008958/204516545-6c7ca818-1c99-4c1a-a4d4-569577d344d8.jpg").build()); + majorRepository.save(Major.builder().name("전자공학심화전공").profile("https://user-images.githubusercontent.com/63008958/204516569-13f7310b-b5a5-4f9d-8171-065884cbf59c.jpg").build()); + majorRepository.save(Major.builder().name("Information Technology").profile("https://user-images.githubusercontent.com/63008958/204516579-bad0d03e-d9ca-4a76-9e94-4a31fe605ce4.jpg").build()); + majorRepository.save(Major.builder().name("ICT 융합전공").profile("https://user-images.githubusercontent.com/63008958/204516638-7c5c13c2-ebb7-4d41-895b-8af61801e7b4.jpg").build()); + majorRepository.save(Major.builder().name("AI Convergence & Entrepreneurship 전공").profile("https://user-images.githubusercontent.com/63008958/204517597-e463b42b-17f3-4476-9314-fe33edb23e8e.jpg").build()); + majorRepository.save(Major.builder().name("Global Entrepreneurship 전공").profile("https://user-images.githubusercontent.com/63008958/204516633-5be00a69-d31e-4edb-ada1-9f143f9ec5ee.jpg").build()); + majorRepository.save(Major.builder().name("AI 융합 전공").profile("https://user-images.githubusercontent.com/63008958/204517614-2fd82907-7e30-488e-8df5-b34c1f5fd05f.jpg").build()); + majorRepository.save(Major.builder().name("데이터 사이언스 전공").profile("https://user-images.githubusercontent.com/63008958/204516681-cee59ca5-3e83-45b0-9f2d-77d38aa9772a.jpg").build()); + majorRepository.save(Major.builder().name("경영학전공").profile("https://user-images.githubusercontent.com/63008958/204516699-8d4ae330-79ce-4827-a9b1-4c6bb94a04dd.jpg").build()); + majorRepository.save(Major.builder().name("경제학전공").profile("https://user-images.githubusercontent.com/63008958/204516724-255d3f3d-586c-44f2-bf30-20ae74500e5e.jpg").build()); + majorRepository.save(Major.builder().name("Global Management").profile("https://user-images.githubusercontent.com/63008958/204516745-795ffbf4-3e25-410a-bb87-8957b17f974a.jpg").build()); + majorRepository.save(Major.builder().name("국제지역학전공").profile("https://user-images.githubusercontent.com/63008958/204516767-6d058e2b-98eb-4156-84f2-41adc5961487.jpg").build()); + majorRepository.save(Major.builder().name("영어전공").profile("https://user-images.githubusercontent.com/63008958/204516780-97509626-d605-4b33-871e-6c66d8b9bccb.jpg").build()); majorRepository.save(Major.builder().name("한국법전공").profile("").build()); majorRepository.save(Major.builder().name("US & International Law").profile("").build()); majorRepository.save(Major.builder().name("상담심리학전공").profile("").build()); From 26617048485dae84fcfb1a9e1937fc176efcc8d9 Mon Sep 17 00:00:00 2001 From: davidpiao Date: Tue, 29 Nov 2022 20:45:26 +0900 Subject: [PATCH 5/5] chore: major profiles added --- .../com/server/hispath/common/TestController.java | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/src/main/java/com/server/hispath/common/TestController.java b/src/main/java/com/server/hispath/common/TestController.java index 7b11928..3336420 100644 --- a/src/main/java/com/server/hispath/common/TestController.java +++ b/src/main/java/com/server/hispath/common/TestController.java @@ -2016,12 +2016,12 @@ private void saveMajor() { majorRepository.save(Major.builder().name("Global Management").profile("https://user-images.githubusercontent.com/63008958/204516745-795ffbf4-3e25-410a-bb87-8957b17f974a.jpg").build()); majorRepository.save(Major.builder().name("국제지역학전공").profile("https://user-images.githubusercontent.com/63008958/204516767-6d058e2b-98eb-4156-84f2-41adc5961487.jpg").build()); majorRepository.save(Major.builder().name("영어전공").profile("https://user-images.githubusercontent.com/63008958/204516780-97509626-d605-4b33-871e-6c66d8b9bccb.jpg").build()); - majorRepository.save(Major.builder().name("한국법전공").profile("").build()); - majorRepository.save(Major.builder().name("US & International Law").profile("").build()); - majorRepository.save(Major.builder().name("상담심리학전공").profile("").build()); - majorRepository.save(Major.builder().name("사회복지학전공").profile("").build()); - majorRepository.save(Major.builder().name("공연영상학전공").profile("").build()); - majorRepository.save(Major.builder().name("언론정보학전공").profile("").build()); - majorRepository.save(Major.builder().name("글로벌한국학전공").profile("").build()); + majorRepository.save(Major.builder().name("한국법전공").profile("https://user-images.githubusercontent.com/63008958/204519931-bd711496-c4cf-453c-9159-21bd471abdf7.jpg").build()); + majorRepository.save(Major.builder().name("US & International Law").profile("https://user-images.githubusercontent.com/63008958/204519949-fbc6196b-3b22-4893-a94c-6aaf43404db3.jpg").build()); + majorRepository.save(Major.builder().name("상담심리학전공").profile("https://user-images.githubusercontent.com/63008958/204519961-dfcc4cb7-770d-414c-b503-62daf17cb348.jpg").build()); + majorRepository.save(Major.builder().name("사회복지학전공").profile("https://user-images.githubusercontent.com/63008958/204519984-9bd89f56-8bd5-4643-9c23-92e86fc3c97e.jpg").build()); + majorRepository.save(Major.builder().name("공연영상학전공").profile("https://user-images.githubusercontent.com/63008958/204520461-e38be0f3-c3d4-42e8-b791-d57a914d90bb.jpg").build()); + majorRepository.save(Major.builder().name("언론정보학전공").profile("https://user-images.githubusercontent.com/63008958/204520001-123c3cda-ab11-4009-b139-ebb6d0b4b458.jpg").build()); + majorRepository.save(Major.builder().name("글로벌한국학전공").profile("https://user-images.githubusercontent.com/63008958/204520021-dc82a562-fab3-438c-abb2-9e1d85b27415.jpg").build()); } } \ No newline at end of file