11package site.billilge.api.backend.domain.rental.service
22
3+ import org.springframework.context.ApplicationEventPublisher
34import org.springframework.data.domain.Page
45import org.springframework.data.domain.PageRequest
56import org.springframework.data.domain.Sort
@@ -12,14 +13,16 @@ import site.billilge.api.backend.domain.item.enums.ItemType
1213import site.billilge.api.backend.domain.member.entity.Member
1314import site.billilge.api.backend.domain.member.enums.Role
1415import site.billilge.api.backend.domain.member.exception.MemberErrorCode
15- import site.billilge.api.backend.domain.notification.enums.NotificationStatus
16- import site.billilge.api.backend.domain.notification.service.NotificationService
1716import site.billilge.api.backend.domain.rental.entity.RentalHistory
17+ import site.billilge.api.backend.domain.rental.entity.RentalStatusWorkerLog
1818import site.billilge.api.backend.domain.rental.enums.RentalStatus
19+ import site.billilge.api.backend.domain.rental.event.RentalAppliedEvent
20+ import site.billilge.api.backend.domain.rental.event.RentalCancelledEvent
21+ import site.billilge.api.backend.domain.rental.event.RentalStatusChangedEvent
22+ import site.billilge.api.backend.domain.rental.event.ReturnAppliedEvent
1923import site.billilge.api.backend.domain.rental.exception.RentalErrorCode
2024import site.billilge.api.backend.domain.rental.repository.RentalRepository
2125import site.billilge.api.backend.domain.rental.repository.RentalStatusWorkerLogRepository
22- import site.billilge.api.backend.domain.rental.entity.RentalStatusWorkerLog
2326import site.billilge.api.backend.global.dto.PageableCondition
2427import site.billilge.api.backend.global.dto.SearchCondition
2528import site.billilge.api.backend.global.exception.ApiException
@@ -33,7 +36,7 @@ import java.time.ZoneId
3336class RentalService (
3437 private val rentalRepository : RentalRepository ,
3538 private val rentalStatusWorkerLogRepository : RentalStatusWorkerLogRepository ,
36- private val notificationService : NotificationService ,
39+ private val eventPublisher : ApplicationEventPublisher ,
3740 private val configValueService : ConfigValueService ,
3841) {
3942 @Transactional
@@ -62,25 +65,7 @@ class RentalService(
6265
6366 rentalRepository.save(newRental)
6467
65- notificationService.sendNotification(
66- rentUser,
67- NotificationStatus .USER_RENTAL_APPLY ,
68- listOf (item.name),
69- true
70- )
71-
72- if (! isDevMode) {
73- notificationService.sendNotificationToAdmin(
74- NotificationStatus .ADMIN_RENTAL_APPLY ,
75- listOf (
76- rentUser.name,
77- rentUser.studentId,
78- " ${String .format(" %02d" , rentAt.hour)} :${String .format(" %02d" , rentAt.minute)} " ,
79- item.name
80- ),
81- true
82- )
83- }
68+ eventPublisher.publishEvent(RentalAppliedEvent (rentUser.id!! , item.name, rentAt, isDevMode))
8469 }
8570
8671 @Transactional
@@ -135,15 +120,7 @@ class RentalService(
135120
136121 rentalHistory.updateStatus(RentalStatus .CANCEL )
137122
138- notificationService.sendNotificationToAdmin(
139- NotificationStatus .ADMIN_RENTAL_CANCEL ,
140- listOf (
141- renter.name,
142- renter.studentId,
143- rentalHistory.item.name
144- ),
145- true
146- )
123+ eventPublisher.publishEvent(RentalCancelledEvent (renter.id!! , rentalHistory.item.name))
147124 }
148125
149126 @Transactional
@@ -154,24 +131,7 @@ class RentalService(
154131
155132 rentalHistory.updateStatus(RentalStatus .RETURN_PENDING )
156133
157- notificationService.sendNotification(
158- renter,
159- NotificationStatus .USER_RETURN_APPLY ,
160- listOf (
161- rentalHistory.item.name
162- ),
163- true
164- )
165-
166- notificationService.sendNotificationToAdmin(
167- NotificationStatus .ADMIN_RETURN_APPLY ,
168- listOf (
169- renter.name,
170- renter.studentId,
171- rentalHistory.item.name
172- ),
173- true
174- )
134+ eventPublisher.publishEvent(ReturnAppliedEvent (renter.id!! , rentalHistory.item.name))
175135 }
176136
177137 fun getReturnRequiredItems (memberId : Long? ): List <RentalHistory > {
@@ -218,65 +178,25 @@ class RentalService(
218178
219179 when (rentalHistory.rentalStatus) {
220180 RentalStatus .CONFIRMED -> {
221- // 승인
222181 if (rentedCount > item.count) {
223182 throw ApiException (RentalErrorCode .ITEM_OUT_OF_STOCK )
224183 }
225-
226184 item.subtractCount(rentalHistory.rentedCount)
227185 rentalHistory.updateWorker(worker)
228-
229- notificationService.sendNotification(
230- renter,
231- NotificationStatus .USER_RENTAL_APPROVED ,
232- listOf (
233- itemName
234- ),
235- true
236- )
237- }
238-
239- RentalStatus .REJECTED -> {
240- // 대여 반려
241- notificationService.sendNotification(
242- renter,
243- NotificationStatus .USER_RENTAL_REJECTED ,
244- listOf (
245- itemName
246- ),
247- true
248- )
249- }
250-
251- RentalStatus .RETURN_CONFIRMED -> {
252- // 반납 승인
253- notificationService.sendNotification(
254- renter,
255- NotificationStatus .USER_RETURN_APPROVED ,
256- listOf (
257- itemName
258- ),
259- true
260- )
261186 }
262187
263188 RentalStatus .RETURNED -> {
264- // 반납 완료
265189 if (item.type == ItemType .CONSUMPTION ) return
266-
267190 item.addCount(rentalHistory.rentedCount)
268- notificationService.sendNotification(
269- renter,
270- NotificationStatus .USER_RETURN_COMPLETED ,
271- listOf (
272- itemName
273- )
274- )
275191 }
276192
193+ RentalStatus .REJECTED , RentalStatus .RETURN_CONFIRMED -> Unit
194+
277195 else -> return
278196 }
279197
198+ eventPublisher.publishEvent(RentalStatusChangedEvent (renter.id!! , itemName, rentalHistory.rentalStatus))
199+
280200 rentalStatusWorkerLogRepository.save(
281201 RentalStatusWorkerLog (
282202 rentalHistory = rentalHistory,
0 commit comments