Skip to content

Commit

Permalink
release/v1.2.1 (#251)
Browse files Browse the repository at this point in the history
* [IDLE-000] Production CI 스크립트 작성

* [IDLE-000] 센터 공고 수정 API 내 접수 방법 null 비허용

* [IDLE-000] 공고 지원자 조회 시, 삭제된 유저는 조회되지 않도록 수정

* [IDLE-363] 센터 관리자 전화 인증 요청 API

* [IDLE-363] 개발 환경 ddl-auto 옵션 임시로 create 옵션으로 변경

* [IDLE-365] 공고 크롤러 selenium 로직 수정 및 로컬 동작 확인

* [IDLE-365] 테스트를 위한 스케줄러 기준 시각 변경

* [IDLE-365] batch job enable 옵션 비활성화

* [IDLE-365] ddl-auto update로 변경

* [IDLE-365] 크롤링 공고 필드 null 비허용

* [IDLE-365] 스케줄러 시간 02시로 설정

* [IDLE-366] spring batch selenium 크롤링을 위한 빌드 스크립트 수정

* [IDLE-366] worknet 사이트가 고용 24 사이트로 통합됨에 따라, 크롤링 스크립트 수정

* [IDLE-366] 크롤러 동작 스케줄링 시간 변경

* [IDLE-366] 스프링 초기 실행 시, spring batch 자동 실행 방지 옵션 추가

* [IDLE-366] spring batch 5 버전에서 업데이트 된 변경사항 적용 및 별도의 JobLauncher 구현

* [IDLE-366] 불필요 의존성 및 옵션 제거

* [IDLE-366] 크롤링 조회 API 내 entity status 필드 추가 및 쿼리 수정

* [IDLE-358] 운영 환경 CD 구축 및 운영 환경 profile 설정 추가

* [IDLE-358] 운영 환경 docker run 실행 시 예외 처리

* [IDLE-000] 크롤링 전체 조회 DTO 생성자 추가

* [IDLE-000] 공고 전체 조회 fetchJoin() 중복 이슈 해결을 위한 subquery 분리

* [IDLE-000] AI 코드리뷰 coderabbit 도입

* [IDLE-000] 크롤링 공고 반경범위 조회 필터를 위한 where절 추가

* [IDLE-000] TimeZone 설정이 적용되지 않는 문제 해결

* [IDLE-000] TimeZone 지정 및 @EnableScheduling 설정

* [IDLE-000] TimeZone 설정 제거

* [IDLE-000] 공고 전체 조회 쿼리 롤백

* [IDLE-000] 기존 공고 내 location을 기반으로 위.경도 값을 decoding하도록 변경

* [IDLE-000] 배포 전 최종 QA

* [IDLE-000] 크롤링 공고 생성일자 필드 type 변경(timestamp -> date)

* [IDLE-000] Redis 비밀번호 설정 추가 (#171)

* [IDLE-000] Redis 비밀번호 설정 추가

* [IDLE-000] yaml 파일에 password 필드 추가

* [IDLE-000] redis local default password 설정

* [IDLE-000] compose 파일 내, 비밀번호 지정 command 설정

* [IDLE-000] Redis 볼륨 설정

* [IDLE-000] ci triggering branch 임시 변경

* [IDLE-000] ci triggering branch 롤백

* [IDLE-000] 테스트 심사 통과를 위한 전화번호 검증 로직 추가

* [IDLE-000] 테스트 심사 통과를 위한 전화번호 검증 로직 추가

* [IDLE-389] 센터 인증 요청 이벤트 발생 시, 디스코드 웹훅 알림을 전송하는 로직 작성

* [IDLE-389] 사업자 등록번호 client properties 클래스명 변경

* [IDLE-389] 코드 리뷰 반영

* [IDLE-000] 트랜잭션 전파 레벨 변경(REQUIRED -> REQUIRES_NEW)

* [IDLE-396] FCM 모듈 추가 및 firebase 의존성 설정

* readme 제목 수정

* readme 제목 수정

* [IDLE-399] FCM Device Token 관리 API

* [IDLE-399] 알림 도메인 설계

* [IDLE-000] fcm service 설정값 주입을 위한 디렉토리 구조 변경

* [IDLE-000] fcm service 설정값 주입을 위한 디렉토리 구조 변경

* [IDLE-400] 채용 공고 지원자 발생 시, 센터 관리자에게 알림을 발송한다.

* [IDLE-400] fcm 모듈 설정 추가

* [IDLE-400] 공고 지원자 발생 시, 모든 센터 관리자들에게 다중 알림을 발송한다.

* [IDLE-415] 알림 조회 처리 API

* [IDLE-417] 읽지 않은 알림 수 집계 API

* [IDLE-418] 알림 목록 조회 API

* [IDLE-418] 피드백 반영

* [IDLE-423] soft-delete가 적용된 즐겨찾기 entity에서, 즐겨찾기 해제 후 다시 설정하는 경우 발생하는 버그를 해결한다.

* [IDLE-424] 요양 보호사 공고 전체 조회 시, 삭제된 공고가 함께 보이는 문제 해결

* [IDLE-400] 채용 공고 지원자 발생 시, 센터 관리자에게 알림을 발송한다. (#183)

* [IDLE-400] 채용 공고 지원자 발생 시, 센터 관리자에게 알림을 발송한다.

* [IDLE-400] fcm 모듈 설정 추가

* [IDLE-400] 공고 지원자 발생 시, 모든 센터 관리자들에게 다중 알림을 발송한다.

* [IDLE-400] 채용 공고 지원자 발생 시, 센터 관리자에게 알림을 발송한다.

* [IDLE-400] fcm 모듈 설정 추가

* [IDLE-400] 공고 지원자 발생 시, 모든 센터 관리자들에게 다중 알림을 발송한다.

* [IDLE-415] 알림 조회 처리 API

* [IDLE-417] 읽지 않은 알림 수 집계 API

* [IDLE-418] 알림 목록 조회 API

* [IDLE-418] 피드백 반영

* [IDLE-423] soft-delete가 적용된 즐겨찾기 entity에서, 즐겨찾기 해제 후 다시 설정하는 경우 발생하는 버그를 해결한다.

* [IDLE-424] 요양 보호사 공고 전체 조회 시, 삭제된 공고가 함께 보이는 문제 해결

* [IDLE-400] 알림 명세 변경

* [IDLE-400] fcm 설정 파일 디렉토리 path 변경

* [IDLE-400] ddl 옵션 변경

* [IDLE-400] ci/cd 옵션 변경

* [IDLE-000] ci triggering branch 복구

* [IDLE-000] develop 환경에서 fcm service 설정 파일 path 수정

* [IDLE-000] fcm service json 파일명 변경

* [IDLE-000] firebase service key 설정 경로 체크를 위해, cd 스크립트를 수정합니다.

* Update README.md

* [IDLE-000] fcm service key 경로를 class path 경로로 수정 시도

* [IDLE-000] ci triggering branch 임시 변경

* [IDLE-000] firebaseApp 초기화 임시 비활성화

* [IDLE-000] firebaseApp 초기화 임시 비활성화

* [IDLE-000] firebaseApp 초기화 임시 비활성화

* [IDLE-000] file path 앞에 ./ 제외

* [IDLE-000] 절대 경로로 변경 시도

* [IDLE-000] fcm service key 생성 path 수정

* [IDLE-000] fcm service key json file 생성 스크립트 작성

* [IDLE-000] ci triggering branch develop으로 롤백

* [IDLE-000] 불필요 스크립트 제거

* [IDLE-000] firebase config의 현재 경로를 출력하도록 print문 추가 (#197)

* [IDLE-000] firebase config의 현재 경로를 출력하도록 print문 추가

* [IDLE-000] ci triggering branch 수정

* [IDLE-000] ci triggering branch 수정

* [IDLE-000] firebase app 초기화 로직 주석 처리

* [IDLE-000] firebase app 초기화 로직 주석 처리

* [IDLE-000] firebase app 초기화 로직 주석 처리

* [IDLE-000] file 대신 string으로 주입받아 초기화하는 방식으로 전환

* [IDLE-000] 일반 string 대신 base64 인코딩 된 문자열을 주입하도록 처리

* [IDLE-000] 일반 string 주입으로 rollback

* [IDLE-000] json string log 추가

* [IDLE-000] base64 문자열로 재 변경

* [IDLE-000] firebase config의 현재 경로를 출력하도록 print문 추가

* [IDLE-429] DB 형상관리를 위한 Flyway 적용

* [IDLE-429] Flyway latest version으로 설정

* [IDLE-429] 피드백 반영

* [IDLE-000] firebase config의 현재 경로를 출력하도록 print문 추가

* [IDLE-000] 알림 조회 처리 로직에 @transactional 추가

* [IDLE-000] 알림 조회 시, 생성 시각 기준이 아닌 uuid v7 id 기준으로 내림차순 정렬하도록 변경

* [IDLE-000] CI 트리거 브랜치 복구

* [IDLE-454] 테스트를 위한 크롤링 수행 시각 변경 및 로깅 추가

* [IDLE-000] 공고 범위 검색 내 중복 데이터 발생 방지

* [IDLE-000] ci 트리거 브랜치 변경

* [IDLE-000] ci 트리거 브랜치 롤백

* [IDLE-000] monitoring 모듈 추가 및 actuator, prometheus 의존성 추가

* [IDLE-456] monitoring.yml 작성

* [IDLE-456] monitoring profile 추가

* [IDLE-456] actuator dependency group name 수정

* [IDLE-000] 크롤링 주기 하루 2회로 변경

* [IDLE-000] 불필요 로그 제거

* [IDLE-000] 인증번호 SMS 내용 수정

* [IDLE-000] classPath 하위 yaml 파일 확장자 모두 .yml로 통일

* [IDLE-000] 즐겨찾기 facade service에 트랜잭션 추가 (#206)

* [IDLE-000] firebase config의 현재 경로를 출력하도록 print문 추가

* [IDLE-000] facade service에 transaction 추가

* [IDLE-461] 유저가 다중 디바이스에서 알림을 받을 수 있도록 개선한다. (#207)

* [IDLE-000] firebase config의 현재 경로를 출력하도록 print문 추가

* [IDLE-461] 한 유저가 다중 디바이스 설정이 가능하도록 한다.

* [IDLE-000] firebase config의 현재 경로를 출력하도록 print문 추가

* [IDLE-000] presentation module의 gradle 파일에 monitoring 모듈 dependency 추가

* [IDLE-000] deviceToken 서비스에서 트랜잭션 어노테이션 추가

* [IDLE-000] batch 테스트를 위해 30분마다 동작하도록 변경

* [IDLE-475] 채팅, 채팅방 도메인 설계

* [IDLE-475] 채팅 메세지 최소, 최대 길이 제한 설정

* [IDLE-000] Batch 메타데이터 테이블 스크립트 변경 및 크롤링 수행 주기 설정

* [IDLE-000] 운영 환경 CD 스크립트에서 불필요한 step 제거

* [IDLE-000] 도텐브 파일 공백 제거 스크립트 작성, 크롤링 대상일자 전날 등록된 공고로 변경

* [IDLE-000] 크롤링 기준 시각 15시로 임시 변경

* [IDLE-000] cd env 파일 생성 스크립트 변경

* [IDLE-492] 동일 유저가 여러 개의 디바이스를 사용 시, 알림이 중복해서 누적되는 현상

* [IDLE-493] flyway 스크립트 오탈자 수정

* [IDLE-493] flyway 스크립트 오탈자 수정

* [IDLE-494] 요양 보호사 및 센터 프로필에서 긴 텍스트를 입력 가능한 항목을 TEXT 컬럼으로 지정한다.

* [IDLE-495] 요양 보호사는 마감된 공고에 지원이 불가능하다.

* [IDLE-495] 공고 마감 처리 메서드명 변경 complete -> completed

* [IDLE-496] 스프링 프로파일 지정을 위한 환경변수 주입

* [IDLE-496] 로그 일부 수정

* [IDLE-000] 안드로이드 app link를 위한 asset 추가

* [IDLE-190] 센터 관리자 인증 요청 목록 조회 API

* [IDLE-000] 크롤링 주기 변경 및 테스트용 에러 로그 추가

* [IDLE-000] 크롤링 대상 사이트에 알림창(alert)이 뜨는 케이스에 대한 처리

* [IDLE-509] 크롤링 전체 조회 시, 공고가 중복 노출되는 현상 해결

* [IDLE-509] 피드백 반영

* [IDLE-509] 사용하지 않는 하위 서비스 의존성 제거

* [IDLE-000] 크롤링 진행 시각 저녁 11시로 변경

* [IDLE-000] 크롤링 공고 즐겨찾기 조회 로직 버그 수정

* [IDLE-000] 요양 보호사 및 센터 관리자 전화번호 컬럼에 unique index 추가

* [IDLE-512] 센터 관리자 인증 요청 event 변경 및 NotificationInfo 인터페이스 패키지 이동

* [IDLE-512] 센터 관리자 인증 요청 event 변경 및 NotificationInfo 인터페이스 패키지 이동

* [IDLE-513] 요양 보호사 location 필드 추가 및 기존 데이터 마이그레이션

* [IDLE-513] 센터 관리자 공고 등록 시, 주변 요양보호사에게 FCM 알림을 일괄 전송한다.

* [IDLE-513] 센터 관리자 공고 등록 시, 주변 요양보호사에게 FCM 알림을 일괄 전송한다.

* [IDLE-000] notification type enum 속성 추가

* [IDLE-000] 센터 공고 등록 알림 제목 및 프로필 url null로 수정

* [IDLE-000] Readme 업데이트

* [IDLE-504] 센터 관리자 인증 승인 및 거절 API

* [IDLE-456] prometheus, grafana 설정을 위한 monitoring.yml 설정
  • Loading branch information
wonjunYou authored Nov 22, 2024
1 parent e6201e4 commit 47122c0
Show file tree
Hide file tree
Showing 20 changed files with 476 additions and 110 deletions.
187 changes: 99 additions & 88 deletions README.md
Original file line number Diff line number Diff line change
@@ -1,107 +1,118 @@
# 케어밋(Caremeet) : 쉽고 빠른 요양 보호사 구인 구직 서비스

<img width="1920" alt="ppt_표지" src="https://github.com/user-attachments/assets/a022bac8-ad7e-4948-a796-7b1522c617dd">
<br>
<img src="https://github.com/user-attachments/assets/c99ac7d2-206e-409a-a184-6d28f06c7fe7" width=200/>
<img src="https://github.com/user-attachments/assets/8912d291-6f49-4bd1-91af-bf91927a5ceb" width=200/>
<br>
<img src="https://github.com/user-attachments/assets/cee77003-f877-445c-934a-2552f8063391" width=200/>
<img src="https://github.com/user-attachments/assets/7a9bf9e7-c30e-475f-8461-94a86f6c2e0e" width=200/>
<img src="https://github.com/user-attachments/assets/71c6d9e8-2d8f-4579-9424-956ed936b6eb" width=200/>
<br>
<img src="https://github.com/user-attachments/assets/22afdfea-6f4b-46e0-8268-d6918bc72557" width=200/>
<img src="https://github.com/user-attachments/assets/63d4dd49-c37d-43c2-a6e3-6f6cfe911f8e" width=200/>
<img src="https://github.com/user-attachments/assets/a3c1c1e9-d288-4768-ab47-eee4fe71426c" width=200/>
# 🧡 케어밋 - 쉽고 빠르게 만나는 집 근처 요양 일자리 🧡

<br><br>
<img width="900" alt="ppt_표지" src="https://github.com/user-attachments/assets/a022bac8-ad7e-4948-a796-7b1522c617dd">

<table>
<tr>
<td align="center"><img width="200" alt="1" src="https://github.com/user-attachments/assets/1453d60b-7bd4-4d47-8dde-65bc3e2e040d"></td>
<td align="center"><img width="200" alt="2" src="https://github.com/user-attachments/assets/00ba937b-2cb9-4be9-af52-d510eb312fa2"></td>
<td align="center"><img width="200" alt="3" src="https://github.com/user-attachments/assets/e0a3344f-20c0-4333-8409-5863e348533c"></td>
<td align="center"><img width="200" alt="4" src="https://github.com/user-attachments/assets/1b9a8932-7a66-42c6-a5dd-cb486b3e134c"></td>
</tr>
<tr>
<td align="center"><img width="200" alt="5" src="https://github.com/user-attachments/assets/e0bab4ac-cf67-4c0a-a040-ed4660cdef43"></td>
<td align="center"><img width="200" alt="6" src="https://github.com/user-attachments/assets/6f33b21c-0adc-4052-b087-f4172fcacf5c"></td>
<td align="center"><img width="200" alt="7" src="https://github.com/user-attachments/assets/48ea52fe-2655-4b39-a183-4fd0b34043df"></td>
<td align="center"><img width="200" alt="8" src="https://github.com/user-attachments/assets/8b27518f-9b7f-4c15-abac-2c5004e64c26"></td>
</tr>
</table>

[👉 랜딩 페이지 바로가기](https://caremeet.kr)

## ❗️ 배경
- 국내 장기요양 시장에서 아날로그 방식의 구인 구직 프로세스는 비효율적이며 센터는 요양 보호사 구인에 많은 시간과 노력을 들이지만 기존 인프라의 한계로 수급자를 놓치는 경우가 빈번함.
- 요양 보호사는 조건에 맞는 채용 공고를 찾기 어렵고, 공고 내 정보 부족으로 추가 정보를 요구하는 번거로움을 겪음.
- 이러한 문제를 해결하기 위해 시설이 고객의 요구에 맞는 요양 보호사를 빠르게 찾을 수 있도록 하여 구인 업무 부담을 줄이고, 요양 보호사는 조건에 맞는 공고를 쉽게 탐색하고 구직 제안을 받아 간편하게 일자리를 찾을 수 있도록 “케어밋” 을 기획.
<br><br>

## 🌟 주요기능
센터 관리자 측
- 구인 공고 등록 및 관리
- 구인 공고 등록 위치 기반 주변 요양 보호사 일괄 탐색
- 요양 보호사 대상 구직 제안
- 지원자 관리 기능
- 프로필 관리
- 신뢰도 높은 센터 가입 인증 절차

요양 보호사
- 위치 기반 구인 공고 조회 및 필터링 기능
- 설정한 필터에 부합하는 공고 등록 시, 알림 기능
- 공고 지원 기능
- 프로필 관리
- 구인 공고 등록 및 조회
- 공고 즐겨찾기 기능

공통 기능
- 채팅
<img width="900" alt="image" src="https://github.com/user-attachments/assets/5bdd9988-f197-4482-82df-9a45fbb9062a">

<br><br>

## 🍎 참여자
### Front-End
<img width="900" alt="image" src="https://github.com/user-attachments/assets/8ce335f2-e890-4ee0-ac7b-40a13cf20ad5">

## 🌟 Features

### 👉 요양 보호사 기능

<table>
<tr>
<td align="center"><b>인 앱공고</b></td>
<td align="center"><b>워크넷공고</b></td>
<td align="center"><b>프로필</b></td>
</tr>
<tr>
<td align="center"><img src="https://github.com/user-attachments/assets/dddade49-d61b-4c68-be1d-4e1365499158" width=200/></td>
<td align="center"><img src="https://github.com/user-attachments/assets/106cb654-44ff-4348-9f36-c8b2cb431037" width=200/></td>
<td align="center"><img src="https://github.com/user-attachments/assets/aac9bf44-5466-4f48-b115-81a18e571b73" width=200/></td>
</tr>
</table>
<table>
<tr>
<td>
<a href="https://github.com/tgyuuAn">
<img src="https://avatars.githubusercontent.com/u/116813010?v=4" width="120px" />
</a>
</td>
<td>
<a href="https://github.com/J0onYEong">
<img src="https://avatars.githubusercontent.com/u/106458638?v=4" width="120px" />
</a>
</td>
</tr>
<tr>
<td><b>안태규</b></td>
<td><b>최준영</b></td>
</tr>
<tr>
<td><b>AOS Developer</b></td>
<td><b>iOS Developer</b></td>
</tr>
<tr>
<td align="center"><b>회원탈퇴</b></td>
<td align="center"><b>카톡공유</b></td>
<td align="center"><b>딥링크/지연된 딥링크</b></td>
</tr>
<tr>
<td align="center"><img src="https://github.com/user-attachments/assets/99b990f8-6da7-4268-aee3-344b8fa97fca" width=200/></td>
<td align="center"><img src="https://github.com/user-attachments/assets/cd42347c-7197-48a6-9e88-17a66e0eb6dd" width=200/></td>
<td align="center"><img src="https://github.com/user-attachments/assets/ead52310-091f-4826-9102-1c2e8b5b0e53" width=200/></td>
</tr>
</table>
<br><br>

### Back-End
### 👉 센터 관리자 기능

<table>
<tr>
<td>
<a href="https://github.com/wonjunYou">
<img src="https://avatars.githubusercontent.com/u/59856002?v=4" width="120px" />
</a>
</td>
</tr>
<tr>
<td><b>유원준</b></td>
</tr>
<tr>
<td><b>BE Developer</b></td>
</tr>
<tr>
<td align="center"><b>회원가입 1</b></td>
<td align="center"><b>회원가입 2</b></td>
<td align="center"><b>로그인 및 인증대기</b></td>
</tr>
<tr>
<td align="center"><img src="https://github.com/user-attachments/assets/3f923e51-3edd-443b-8830-4876eda1d635" width=200/></td>
<td align="center"><img src="https://github.com/user-attachments/assets/898007c0-fac2-436c-8834-e5697b348187" width=200/></td>
<td align="center"><img src="https://github.com/user-attachments/assets/1f46c2be-debd-4112-a0f2-5550da189653" width=200/></td>
</tr>
</table>
<table>
<tr>
<td align="center"><b>신규 비밀번호 발급</b></td>
<td align="center"><b>공고 등록 1</b></td>
<td align="center"><b>공고 등록 2</b></td>
</tr>
<tr>
<td align="center"><img src="https://github.com/user-attachments/assets/9db38630-b7c4-4aa8-a0e5-aa90a2c3aa0f" width=200/></td>
<td align="center"><img src="https://github.com/user-attachments/assets/0a467a15-be3f-4e13-9291-454303893558" width=200/></td>
<td align="center"><img src="https://github.com/user-attachments/assets/f5d9003a-7027-4931-aec8-8af8641421e4" width=200/></td>
</tr>
</table>
<table>
<tr>
<td align="center"><b>지원자 확인</b></td>
</tr>
<tr>
<td align="center"><img src="https://github.com/user-attachments/assets/228bda84-1d09-40b2-b990-55725f17b148" width=200/></td>
</tr>
</table>
<br><br>

### Design
### 👉 공통 기능

<table>
<tr>
<td>
<img src="https://github.com/user-attachments/assets/8e29eb2d-436f-458c-9270-e2aaa52f24c4" width="120px" />
</a>
</td>
</tr>
<tr>
<td><b>장린</b></td>
</tr>
<tr>
<td><b>Designer</b></td>
</tr>
<tr>
<td align="center"><b>FCM</b></td>
<td align="center"><b>알림 센터</b></td>
</tr>
<tr>
<td align="center"><img src="https://github.com/user-attachments/assets/10330ca2-e33c-4957-84c8-03ae8763f63f" width=200/></td>
<td align="center"><img src="https://github.com/user-attachments/assets/4eb5cd91-706d-413c-92ca-3310df2d10e2" width=200/></td>
</tr>
</table>

<br><br>
## 🚩 Server Tech Stack(작성 중)



## 👟 Sprint
<a href="https://www.notion.so/f5756a8f29e549358f87872802293cda">
<img width="1066" alt="image" src="https://github.com/user-attachments/assets/51c8e0e2-57dc-4bed-a4c8-f9e41f084f73"></a>


[스프린트 회고 보러가기](https://www.notion.so/f5756a8f29e549358f87872802293cda)
Original file line number Diff line number Diff line change
Expand Up @@ -26,6 +26,7 @@ data class CarerApplyNotificationInfo(
val notificationDetails = mapOf(
"jobPostingId" to jobPostingId,
)

return CarerApplyNotificationInfo(
title,
body,
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,17 @@
package com.swm.idle.application.user.center.service.event

import com.swm.idle.domain.user.center.event.CenterManagerVerificationApproveEvent
import org.springframework.context.ApplicationEventPublisher
import org.springframework.stereotype.Service

@Service
class CenterManagerVerificationApproveEventPublisher(
private val eventPublisher: ApplicationEventPublisher,
) {

fun publish(centerManagerVerificationApproveEvent: CenterManagerVerificationApproveEvent) {
eventPublisher.publishEvent(centerManagerVerificationApproveEvent)
}

}

Original file line number Diff line number Diff line change
@@ -0,0 +1,17 @@
package com.swm.idle.application.user.center.service.event

import com.swm.idle.domain.user.center.event.CenterManagerVerificationRejectEvent
import org.springframework.context.ApplicationEventPublisher
import org.springframework.stereotype.Service

@Service
class CenterManagerVerificationRejectEventPublisher(
private val eventPublisher: ApplicationEventPublisher,
) {

fun publish(centerManagerVerificationRejectEvent: CenterManagerVerificationRejectEvent) {
eventPublisher.publishEvent(centerManagerVerificationRejectEvent)
}

}

Original file line number Diff line number Diff line change
@@ -1,13 +1,22 @@
package com.swm.idle.application.user.center.service.facade

import com.swm.idle.application.common.security.getUserAuthentication
import com.swm.idle.application.notification.domain.DeviceTokenService
import com.swm.idle.application.notification.domain.NotificationService
import com.swm.idle.application.user.center.service.domain.CenterManagerService
import com.swm.idle.application.user.center.service.event.CenterManagerVerificationApproveEventPublisher
import com.swm.idle.application.user.center.service.event.CenterManagerVerificationRejectEventPublisher
import com.swm.idle.application.user.center.service.event.CenterManagerVerificationRequestEventPublisher
import com.swm.idle.application.user.center.vo.CenterManagerVerificationApproveNotificationInfo
import com.swm.idle.application.user.center.vo.CenterManagerVerificationRejectNotificationInfo
import com.swm.idle.application.user.common.service.domain.DeletedUserInfoService
import com.swm.idle.application.user.common.service.domain.RefreshTokenService
import com.swm.idle.application.user.common.service.util.JwtTokenService
import com.swm.idle.domain.common.enums.EntityStatus
import com.swm.idle.domain.common.exception.PersistenceException
import com.swm.idle.domain.notification.enums.NotificationType
import com.swm.idle.domain.user.center.event.CenterManagerVerificationApproveEvent
import com.swm.idle.domain.user.center.event.CenterManagerVerificationRejectEvent
import com.swm.idle.domain.user.center.event.CenterManagerVerificationRequestEvent.Companion.createVerifyEvent
import com.swm.idle.domain.user.center.exception.CenterException
import com.swm.idle.domain.user.center.vo.BusinessRegistrationNumber
Expand All @@ -26,6 +35,7 @@ import com.swm.idle.support.transfer.user.center.JoinStatusInfoResponse
import org.springframework.stereotype.Service
import org.springframework.transaction.annotation.Propagation
import org.springframework.transaction.annotation.Transactional
import java.util.*

@Service
class CenterAuthFacadeService(
Expand All @@ -35,6 +45,10 @@ class CenterAuthFacadeService(
private val jwtTokenService: JwtTokenService,
private val refreshTokenService: RefreshTokenService,
private val centerManagerVerificationRequestEventPublisher: CenterManagerVerificationRequestEventPublisher,
private val centerManagerVerificationApproveEventPublisher: CenterManagerVerificationApproveEventPublisher,
private val centerManagerVerificationRejectEventPublisher: CenterManagerVerificationRejectEventPublisher,
private val deviceTokenService: DeviceTokenService,
private val notificationService: NotificationService,
) {

fun join(
Expand Down Expand Up @@ -152,6 +166,7 @@ class CenterAuthFacadeService(
}
}


fun getCenterManagerForPending(): CenterManagerForPendingResponse {
val centerManagers = centerManagerService.findAllByStatusPending()

Expand All @@ -162,4 +177,65 @@ class CenterAuthFacadeService(
} ?: CenterManagerForPendingResponse.of(emptyList())
}

@Transactional
fun approveVerification(centerManagerId: UUID) {
val centerManager = centerManagerService.getById(centerManagerId)

if (centerManager.isPending().not()) {
throw CenterException.IsNotPendingException()
}

centerManager.approve()

deviceTokenService.findByUserId(centerManagerId)?.let {
val notificationInfo = CenterManagerVerificationApproveNotificationInfo.of(
title = "[케어밋] 센터 관리자 인증 요청이 승인되었어요!",
body = "${centerManager.name} 관리자님! 센터 관리자 인증 요청이 최종 승인되었어요! 어서 확인해 보세요!",
receiverId = centerManager.id,
notificationType = NotificationType.CENTER_AUTHENTICATION,
)

val notification = notificationService.create(notificationInfo)


CenterManagerVerificationApproveEvent(
deviceToken = it.toString(),
notificationId = notification.id,
notificationInfo = notificationInfo
).also {
centerManagerVerificationApproveEventPublisher.publish(it)
}
}
}

@Transactional
fun rejectVerification(centerManagerId: UUID) {
val centerManager = centerManagerService.getById(centerManagerId)

if (centerManager.isPending().not()) {
throw CenterException.IsNotPendingException()
}

centerManager.reject()

deviceTokenService.findByUserId(centerManagerId)?.let {
val notificationInfo = CenterManagerVerificationRejectNotificationInfo.of(
title = "[케어밋] 센터 관리자 인증 요청이 거절되었어요.",
body = "${centerManager.name} 관리자님, 센터 관리자 인증 요청이 거절되었어요. 문의사항을 통해 연락해 주세요.",
receiverId = centerManager.id,
notificationType = NotificationType.CENTER_AUTHENTICATION,
)

val notification = notificationService.create(notificationInfo)

CenterManagerVerificationRejectEvent(
deviceToken = it.toString(),
notificationId = notification.id,
notificationInfo = notificationInfo
).also {
centerManagerVerificationRejectEventPublisher.publish(it)
}
}
}

}
Loading

0 comments on commit 47122c0

Please sign in to comment.