Skip to content

사회적 약자의 건강을 위한 약 복용 알림 서비스 - 코틀린 마이그레이션

Notifications You must be signed in to change notification settings

prgrms-be-devcourse/NBB1_2_3_Team09

Repository files navigation

💊 Pill-Buddy

Pill-Buddy는 사용자의 매일 복용해야 할 약이나 영양제를 쉽게 관리하고, 복용 시간에 맞춰 알림을 받을 수 있도록 돕는 서비스입니다. 약을 잊지 않고 제때 복용하도록 알림을 제공하며, 필요에 따라 보호자에게 복용 여부 확인까지 지원합니다.

“약 복용을 잊지 않고, 내 건강을 Pill-Buddy와 함께 지키세요!”

복용 알림으로 건강을 챙기세요 ✉️

사용자는 자신이 복용하는 약에 대해 복용 메세지 알림을 받을 수 있습니다. 15분이 지나도 사용자가 약을 복용하지 않은 경우, 보호자에게 약 복용 확인 알림 메세지가 전송됩니다.

원하는 약 정보를 간편하게 검색하세요 🔍

e약은요 공공 API를 통해 약 이름, 회사명, 품목 기준 코드로 원하는 약 정보를 검색할 수 있습니다. 약의 주요 정보와 안전한 복용법을 언제든지 쉽게 확인할 수 있어, 자신이 복용하는 약에 대한 신뢰를 높여줍니다.

건강을 함께하는 보호자와의 연결 🤝

보호자 추가 기능을 통해 사용자의 약 복용 여부를 확인하고 관리할 수 있습니다. 가족이나 보호자와 함께 복용 정보를 공유함으로써 건강 관리가 보다 체계적으로 이루어질 수 있습니다.


🛠️ 개발 환경

Backend

KotlinGradleSpringSpringSecuritySpringCloudSpringDataJpaSwaggerJWTOAuth2

Frontend

BootstrapHTML5CSS3JavaScriptThymeleaf

Testing

Junit5MockitoK6

Database

MySQLRedisH2

Tools

intellijNotionGitHub


💻 프로젝트 구조

프로젝트 구조 보기(눌러서 보기)
├── main
│   ├── kotlin
│   │   └── medinine
│   │       └── pill_buddy
│   │           ├── PillBuddyApplication.kt
│   │           │
│   │           ├── domain
│   │           │   ├── medicationApi
│   │           │   │   ├── config
│   │           │   │   │   ├── EntityToDtoMapper.kt
│   │           │   │   │   └── RestTemplateConfig.kt
│   │           │   │   ├── controller
│   │           │   │   │   ├── MedicationApiController.kt
│   │           │   │   │   └── MedicationWebController.kt
│   │           │   │   ├── dto
│   │           │   │   │   ├── JsonForm.kt
│   │           │   │   │   ├── MedicationDTO.kt
│   │           │   │   │   ├── MedicationForm.kt
│   │           │   │   │   └── MyPageImpl.kt
│   │           │   │   ├── entity
│   │           │   │   │   └── Medication.kt
│   │           │   │   ├── repository
│   │           │   │   │   └── MedicationApiRepository.kt
│   │           │   │   └── service
│   │           │   │       └── MedicationApiService.kt
│   │           │   │  
│   │           │   ├── notification
│   │           │   │   ├── controller
│   │           │   │   │   ├── NotificationController.kt
│   │           │   │   │   └── NotificationWebController.kt
│   │           │   │   ├── dto
│   │           │   │   │   ├── NotificationDTO.kt
│   │           │   │   │   └── UpdateNotificationDTO.kt
│   │           │   │   ├── entity
│   │           │   │   │   └── Notification.kt
│   │           │   │   ├── provider
│   │           │   │   │   └── SmsProvider.kt
│   │           │   │   ├── repository
│   │           │   │   │   └── NotificationRepository.kt
│   │           │   │   └── service
│   │           │   │       └── NotificationService.kt
│   │           │   │  
│   │           │   ├── record
│   │           │   │   ├── dto
│   │           │   │   │   └── RecordDTO.kt
│   │           │   │   ├── entity
│   │           │   │   │   ├── Record.kt
│   │           │   │   │   └── Taken.kt
│   │           │   │   ├── repository
│   │           │   │   │   └── RecordRepository.kt
│   │           │   │   └── service
│   │           │   │       ├── RecordService.kt
│   │           │   │       └── RecordServiceImpl.kt
│   │           │   │  
│   │           │   ├── user
│   │           │   │   ├── caregiver
│   │           │   │   │   ├── controller
│   │           │   │   │   │   └── CaregiverController.kt
│   │           │   │   │   ├── entity
│   │           │   │   │   │   └── Caregiver.kt
│   │           │   │   │   ├── repository
│   │           │   │   │   │   └── CaregiverRepository.kt
│   │           │   │   │   └── service
│   │           │   │   │       └── CaregiverService.kt
│   │           │   │   │  
│   │           │   │   ├── caretaker
│   │           │   │   │   ├── controller
│   │           │   │   │   │   └── CaretakerController.kt
│   │           │   │   │   ├── dto
│   │           │   │   │   │   └── CaretakerCaregiverDTO.kt
│   │           │   │   │   ├── entity
│   │           │   │   │   │   ├── Caretaker.kt
│   │           │   │   │   │   └── CaretakerCaregiver.kt
│   │           │   │   │   ├── repository
│   │           │   │   │   │   ├── CaretakerCaregiverRepository.kt
│   │           │   │   │   │   └── CaretakerRepository.kt
│   │           │   │   │   └── service
│   │           │   │   │       ├── CaretakerService.kt
│   │           │   │   │       └── CaretakerServiceImpl.kt
│   │           │   │   │  
│   │           │   │   ├── controller
│   │           │   │   │   ├── AuthController.kt
│   │           │   │   │   └── UserController.kt
│   │           │   │   ├── dto
│   │           │   │   │   ├── JoinDto.kt
│   │           │   │   │   ├── LoginDto.kt
│   │           │   │   │   ├── UserDto.kt
│   │           │   │   │   ├── UserPasswordUpdateDto.kt
│   │           │   │   │   ├── UserType.kt
│   │           │   │   │   └── UserUpdateDto.kt
│   │           │   │   ├── entity
│   │           │   │   │   ├── Role.kt
│   │           │   │   │   └── User.kt
│   │           │   │   │── service
│   │           │   │   │   ├── AuthService.kt
│   │           │   │   │   ├── CustomUserDetails.kt
│   │           │   │   │   ├── MyUserDetailService.kt
│   │           │   │   │   └── UserService.kt
│   │           │   │   │
│   │           │   │   ├── oauth
│   │           │   │   │   ├── constant
│   │           │   │   │   │   ├── KakaoProperty.kt
│   │           │   │   │   │   └── NaverProperty.kt
│   │           │   │   │   ├── controller
│   │           │   │   │   │   └── OAuthController.kt
│   │           │   │   │   ├── dto
│   │           │   │   │   │   ├── KakaoUserResponse.kt
│   │           │   │   │   │   ├── NaverUserResponse.kt
│   │           │   │   │   │   ├── OAuthProfile.kt
│   │           │   │   │   │   └── OAuthTokenResponse.kt
│   │           │   │   │   └── service
│   │           │   │   │       ├── OAuthClient.kt
│   │           │   │   │       ├── SocialLoginService.kt
│   │           │   │   │       ├── UserReader.kt
│   │           │   │   │       ├── kakao
│   │           │   │   │       │   ├── KakaoAuthClient.kt
│   │           │   │   │       │   ├── KakaoClient.kt
│   │           │   │   │       │   └── KakaoProfileClient.kt
│   │           │   │   │       └── naver
│   │           │   │   │           ├── NaverAuthClient.kt
│   │           │   │   │           ├── NaverClient.kt
│   │           │   │   │           └── NaverProfileClient.kt
│   │           │   │   │
│   │           │   │   └── profile
│   │           │   │       ├── controller
│   │           │   │       │   └── ProfileController.kt
│   │           │   │       ├── dto
│   │           │   │       │   └── ProfileUploadDto.kt
│   │           │   │       ├── entity
│   │           │   │       │   └── Image.kt
│   │           │   │       ├── repository
│   │           │   │       │   └── ImageRepository.kt
│   │           │   │       └── service
│   │           │   │           ├── ProfileService.kt
│   │           │   │           └── uploader
│   │           │   │               ├── CaregiverProfileUploader.kt
│   │           │   │               ├── CaretakerProfileUploader.kt
│   │           │   │               └── ProfileUploader.kt
│   │           │   │   │  
│   │           │   │   │  
│   │           │   └── userMedication
│   │           │       ├── controller
│   │           │       │   └── UserMedicationController.kt
│   │           │       ├── dto
│   │           │       │   └── UserMedicationDTO.kt
│   │           │       ├── entity
│   │           │       │   ├── Frequency.kt
│   │           │       │   ├── MedicationType.kt
│   │           │       │   └── UserMedication.kt
│   │           │       ├── repository
│   │           │       │   └── UserMedicationRepository.kt
│   │           │       └── service
│   │           │           ├── UserMedicationService.kt
│   │           │           └── UserMedicationServiceImpl.kt
│   │           └── global
│   │               ├── advice
│   │               │   └── GlobalExceptionHandler.kt
│   │               ├── config
│   │               │   ├── FeignConfig.kt
│   │               │   ├── RedisCacheConfig.kt
│   │               │   ├── RedisConfig.kt
│   │               │   ├── SecurityConfig.kt
│   │               │   └── SwaggerConfig.kt
│   │               ├── entity
│   │               │   └── BaseTimeEntity.kt
│   │               ├── exception
│   │               │   ├── ErrorCode.kt
│   │               │   ├── ErrorResponse.kt
│   │               │   └── PillBuddyCustomException.kt
│   │               ├── jwt
│   │               │   ├── JwtAccessDeniedHandler.kt
│   │               │   ├── JwtAuthenticationEntryPoint.kt
│   │               │   ├── JwtAuthenticationFilter.kt
│   │               │   ├── JwtToken.kt
│   │               │   └── JwtTokenProvider.kt
│   │               ├── redis
│   │               │   └── RedisUtils.kt
│   │               └── util
│   │                   └── UploadUtils.kt
│   │  
│   └── resources
│       ├── application-db.yml
│       ├── application.yml
│       ├── static
│       │   ├── LoginForm.html
│       │   ├── afterLogin.html
│       │   ├── css
│       │   │   └── styles.css
│       │   ├── index.html
│       │   └── js
│       │       └── scripts.js
│       └── templates
│           ├── create_notification.html
│           ├── medication
│           │   ├── medication.html
│           │   ├── medicationList.html
│           │   └── search.html
│           ├── notifications.html
│           └── update_notification.html
└── test
├── kotlin
│   └── medinine
│       └── pill_buddy
│           ├── PillBuddyApplicationTests.kt
│           ├── domain
│           │   ├── medicationApi
│           │   │   ├── controller
│           │   │   │   └── MedicationApiControllerTest.kt
│           │   │   └── service
│           │   │       └── MedicationApiServiceTest.kt
│           │   ├── notification
│           │   │   ├── controller
│           │   │   │   └── NotificationControllerTest.kt
│           │   │   ├── repository
│           │   │   │   └── NotificationRepositoryTest.kt
│           │   │   └── service
│           │   │       └── NotificationServiceTest.kt
│           │   ├── user
│           │   │   ├── caregiver
│           │   │   │   ├── controller
│           │   │   │   │   └── CaregiverControllerTest.kt
│           │   │   │   ├── repository
│           │   │   │   │   └── CaregiverRepositoryTest.kt
│           │   │   │   └── service
│           │   │   │       └── CaregiverServiceTest.kt
│           │   │   ├── caretaker
│           │   │   │   ├── controller
│           │   │   │   │   └── CaretakerControllerTest.kt
│           │   │   │   └── service
│           │   │   │       └── CaretakerServiceImplTest.kt
│           │   │   ├── controller
│           │   │   │   ├── AuthControllerTest.kt
│           │   │   │   └── UserControllerTest.kt
│           │   │   ├── oauth
│           │   │   │   └── service
│           │   │   │       └── KakaoOAuthServiceTest.kt
│           │   │   ├── profile
│           │   │   │   └── service
│           │   │   │       ├── ProfileServiceTest.kt
│           │   │   │       └── uploader
│           │   │   │           ├── CaregiverProfileUploaderTest.kt
│           │   │   │           └── CaretakerProfileUploaderTest.kt
│           │   │   └── service
│           │   │       ├── AuthServiceTest.kt
│           │   │       ├── MyUserDetailServiceTest.kt
│           │   │       └── UserServiceTest.kt
│           │   └── userMedication
│           │       ├── controller
│           │       │   └── UserMedicationControllerTest.kt
│           │       └── service
│           │           └── UserMedicationServiceImplTest.kt
│           └── global
│               └── jwt
│                   └── JwtTokenProviderTest.kt
└── resources
└── application.yml

📑 개발 문서

🔗 ER Diagram

ER Diagram

⭐️ Class Diagram

Class Diagram

👨🏻‍💻 Sequence Diagram
🔐 로그인

로그인 Sequence Diagram

📲 소셜 로그인

소셜 로그인 Sequence Diagram

♻️ 토큰 재발급

토큰 재발급 Sequence Diagram

💌 알림 전송

알림 전송 Sequence Diagram

💊 약 정보 검색

약 정보 검색 Sequence Diagram


👬 팀 소개

Backend Backend Backend Backend Backend
진우 홍제 성겸 현우 소희
이진우 (팀장) 안홍제 김성겸 신현우 양소희
프로젝트 총괄 관리
팀원 간 소통 조율
보호자 기능 구현
Github 관리
회원 관리 기능 구현
JWT 인증 로직 구현
소셜 로그인 구현
프로젝트 기획
사용자 기능 구현
Redis 쿼리 성능 개선
약 정보 검색 기능 구현
(e약은요 API)
Thymeleaf 화면 구현
알림 기능 구현
(coolsms API)
Thymeleaf 화면 구현

▶️ 시연 영상

알림 관리

알림-추가-시연 알림-수정-시연

약 정보 검색

약-정보-검색-시연

About

사회적 약자의 건강을 위한 약 복용 알림 서비스 - 코틀린 마이그레이션

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published