Skip to content
This repository has been archived by the owner on Sep 16, 2024. It is now read-only.

Commit

Permalink
[Feat] date region change to seoul #57 (#58)
Browse files Browse the repository at this point in the history
* feat(PlantoryApplication): 서울로 시간 변경

* feat(ReminderService): 알림 테스트를 위해 5분 단위로 알림 전송하도록 구현
  • Loading branch information
zbqmgldjfh authored Feb 4, 2024
1 parent c305f2f commit f335210
Show file tree
Hide file tree
Showing 3 changed files with 21 additions and 4 deletions.
9 changes: 9 additions & 0 deletions src/main/kotlin/gdsc/plantory/PlantoryApplication.kt
Original file line number Diff line number Diff line change
Expand Up @@ -2,10 +2,19 @@ package gdsc.plantory

import org.springframework.boot.autoconfigure.SpringBootApplication
import org.springframework.boot.runApplication
import org.springframework.scheduling.annotation.EnableScheduling
import java.util.TimeZone
import javax.annotation.PostConstruct

@EnableScheduling
@SpringBootApplication
class PlantoryApplication

fun main(args: Array<String>) {
runApplication<PlantoryApplication>(*args)

@PostConstruct
fun setTimezone() {
TimeZone.setDefault(TimeZone.getTimeZone("Asia/Seoul"))
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -8,10 +8,9 @@ import com.google.firebase.messaging.Message
import com.google.firebase.messaging.Notification
import gdsc.plantory.event.FCMChannel
import org.slf4j.LoggerFactory
import org.springframework.context.event.EventListener
import org.springframework.scheduling.annotation.Async
import org.springframework.stereotype.Component
import org.springframework.transaction.event.TransactionPhase
import org.springframework.transaction.event.TransactionalEventListener

@Component
class WaterCycleEventListener(
Expand All @@ -22,12 +21,15 @@ class WaterCycleEventListener(
private val log = LoggerFactory.getLogger(WaterCycleEventListener::class.java)
}

@TransactionalEventListener(phase = TransactionPhase.AFTER_COMMIT)
@Async
@EventListener
fun sendFcmNotification(events: WaterCycleEvents) {
log.info("send FCM notification by WaterCycleEventListener")
val messages: List<Message> = createMessages(events.plantsNeedWateredToday, FCMChannel.WATER_ALERT.name)

try {
if (messages.isEmpty()) return

firebaseMessaging.sendEach(messages)
} catch (e: FirebaseMessagingException) {
log.warn("fail send FCM message", e)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,7 @@ import gdsc.plantory.event.notification.WaterCycleEvent
import gdsc.plantory.event.notification.WaterCycleEvents
import gdsc.plantory.plant.domain.CompanionPlantRepository
import gdsc.plantory.plant.presentation.dto.CompanionPlantWaterCycleDto
import org.slf4j.LoggerFactory
import org.springframework.scheduling.annotation.Scheduled
import org.springframework.stereotype.Service
import org.springframework.transaction.annotation.Transactional
Expand All @@ -16,8 +17,13 @@ class ReminderService(
private val companionPlantRepository: CompanionPlantRepository,
) {

@Scheduled(cron = "0 0 8 * * *")
companion object {
private val log = LoggerFactory.getLogger(this.javaClass)
}

@Scheduled(cron = "0 */5 * * * *")
fun sendWaterNotification() {
log.info("물주기 알림을 전송합니다.");
val companionPlants = companionPlantRepository.findAllByNextWaterDate(LocalDate.now())
val events = WaterCycleEvents(buildWaterCycleEvents(companionPlants))
Events.raise(events)
Expand Down

0 comments on commit f335210

Please sign in to comment.