@@ -108,13 +108,15 @@ final class LostItemDataViewController: UIViewController {
108108 let changeLostItemStateUseCase = DefaultChangeLostItemStateUseCase ( repository: lostItemRepository)
109109 let createChatRoomUseCase = DefaultCreateChatRoomUseCase ( chatRepository: chatRepository)
110110 let deleteLostItemUseCase = DefaultDeleteLostItemUseCase ( repository: lostItemRepository)
111+ let logAnalyticsEventUseCase = DefaultLogAnalyticsEventUseCase ( repository: GA4AnalyticsRepository ( service: GA4AnalyticsService ( ) ) )
111112 let viewModel = LostItemDataViewModel (
112113 checkLoginUseCase: checkLoginUseCase,
113114 fetchLostItemDataUseCase: fetchLostItemDataUseCase,
114115 fetchLostItemListUseCase: fetchLostItemListUseCase,
115116 changeLostItemStateUseCase: changeLostItemStateUseCase,
116117 deleteLostItemUseCase: deleteLostItemUseCase,
117118 createChatRoomUseCase: createChatRoomUseCase,
119+ logAnalyticsEventUseCase: logAnalyticsEventUseCase,
118120 id: id)
119121 let viewController = LostItemDataViewController ( viewModel: viewModel)
120122 viewController. delegate = self
@@ -135,22 +137,29 @@ final class LostItemDataViewController: UIViewController {
135137 } . store ( in: & subscription)
136138
137139 buttonsView. deleteButtonTappedPublisher. sink { [ weak self] in
138- self ? . showDeleteModal ( )
140+ guard let self, let type = viewModel. type else { return }
141+ inputSubject. send ( . logEvent( EventParameter . EventLabel. Campus. findUserDelete, EventParameter . EventCategory. click, " \( type. description) 물 " ) )
142+ showDeleteModal ( )
139143 } . store ( in: & subscription)
140144
141145 buttonsView. editButtonTappedPublisher. sink { [ weak self] in
142146 self ? . navigateToEdit ( )
143147 } . store ( in: & subscription)
144148
145149 buttonsView. changeStateButtonTappedPublisher. sink { [ weak self] in
146- self ? . showChangeStateModal ( )
150+ guard let self, let type = viewModel. type else { return }
151+ inputSubject. send ( . logEvent( EventParameter . EventLabel. Campus. lostItemStateChange, . click, " \( type. description) 물 " ) )
152+ self . showChangeStateModal ( )
147153 } . store ( in: & subscription)
148154
149155 buttonsView. chatButtonTappedPublisher. sink { [ weak self] in
150- self ? . inputSubject. send ( . checkLogIn( . chat) )
156+ guard let self, let type = viewModel. type else { return }
157+ inputSubject. send ( . logEvent( EventParameter . EventLabel. Campus. itemMessageSend, . click, " \( type. description) 물 쪽지 보내기 " ) )
158+ inputSubject. send ( . checkLogIn( . chat) )
151159 } . store ( in: & subscription)
152160
153161 buttonsView. reportButtonTappedPublisher. sink { [ weak self] in
162+ self ? . inputSubject. send ( . logEvent( EventParameter . EventLabel. Campus. itemPostReport, . click, " 신고하기 " ) )
154163 self ? . inputSubject. send ( . checkLogIn( . report) )
155164 } . store ( in: & subscription)
156165
@@ -212,7 +221,12 @@ extension LostItemDataViewController {
212221 let lostItemRepository = DefaultLostItemRepository ( service: DefaultLostItemService ( ) )
213222 let checkLoginUseCase = DefaultCheckLoginUseCase ( userRepository: userRepository)
214223 let fetchLostItemItemUseCase = DefaultFetchLostItemListUseCase ( repository: lostItemRepository)
215- let viewModel = LostItemListViewModel ( checkLoginUseCase: checkLoginUseCase, fetchLostItemListUseCase: fetchLostItemItemUseCase)
224+ let logAnalyticsEventUseCase = DefaultLogAnalyticsEventUseCase ( repository: GA4AnalyticsRepository ( service: GA4AnalyticsService ( ) ) )
225+ let viewModel = LostItemListViewModel (
226+ checkLoginUseCase: checkLoginUseCase,
227+ fetchLostItemListUseCase: fetchLostItemItemUseCase,
228+ logAnalyticsEventUseCase: logAnalyticsEventUseCase
229+ )
216230 let lostItemListViewController = LostItemListViewController ( viewModel: viewModel)
217231 navigationController? . setViewControllers ( [ homeViewController, lostItemListViewController] , animated: true )
218232 }
@@ -221,6 +235,7 @@ extension LostItemDataViewController {
221235 private func showDeleteModal( ) {
222236 let onRightButtonTapped : ( ) -> Void = { [ weak self] in
223237 self ? . inputSubject. send ( . deleteData)
238+ self ? . inputSubject. send ( . logEvent( EventParameter . EventLabel. Campus. findUserDeleteConfirm, EventParameter . EventCategory. click, " 확인 " ) )
224239 }
225240 let modalViewController = ModalViewControllerB ( onRightButtonTapped: onRightButtonTapped, width: 301 , height: 162 , title: " 삭제 시 되돌릴 수 없습니다. \n 게시글을 삭제하시겠습니까? " , titleColor: . appColor( . neutral600) , rightButtonText: " 확인 " )
226241 modalViewController. modalPresentationStyle = . overFullScreen
@@ -243,8 +258,9 @@ extension LostItemDataViewController {
243258
244259 private func showChangeStateModal( ) {
245260 let onRightButtonTapped : ( ) -> Void = { [ weak self] in
246- guard let self else { return }
261+ guard let self, let type = viewModel . type else { return }
247262 inputSubject. send ( . changeState( viewModel. id) )
263+ inputSubject. send ( . logEvent( EventParameter . EventLabel. Campus. lostItemFound, . click, " \( type. description) 물 " ) )
248264 }
249265 let modalViewController = ModalViewControllerB ( onRightButtonTapped: onRightButtonTapped, width: 301 , height: 162 , title: " 상태 변경 시 되돌릴 수 없습니다. \n 찾음으로 변경하시겠습니까? " , titleColor: . appColor( . neutral600) , rightButtonText: " 확인 " )
250266 modalViewController. modalTransitionStyle = . crossDissolve
@@ -253,6 +269,9 @@ extension LostItemDataViewController {
253269 }
254270
255271 private func navigateToChat( _ createChatRoomResponse: CreateChatRoomResponse ) {
272+ guard let type = viewModel. type else { return }
273+ inputSubject. send ( . logEvent( EventParameter . EventLabel. Campus. itemMessageSend, . click, " \( type. description) 물 쪽지 보내기 " ) )
274+
256275 let chatViewModel = ChatViewModel (
257276 articleId: createChatRoomResponse. articleId,
258277 chatRoomId: createChatRoomResponse. chatRoomId,
@@ -263,7 +282,12 @@ extension LostItemDataViewController {
263282 }
264283
265284 private func showLoginToChatModal( ) {
285+ let onLeftButtonTapped : ( ) -> Void = { [ weak self] in
286+ self ? . inputSubject. send ( . logEvent( EventParameter . EventLabel. Campus. lostItemMessageLoginRequest, . click, " 닫기 " ) )
287+ }
266288 let onRightButtonTapped : ( ) -> Void = { [ weak self] in
289+ self ? . inputSubject. send ( . logEvent( EventParameter . EventLabel. Campus. lostItemMessageLoginRequest, . click, " 로그인하기 " ) )
290+
267291 let repository = GA4AnalyticsRepository ( service: GA4AnalyticsService ( ) )
268292 let userRepository = DefaultUserRepository ( service: DefaultUserService ( ) )
269293 let logAnalyticsEventUseCase = DefaultLogAnalyticsEventUseCase ( repository: repository)
@@ -272,7 +296,7 @@ extension LostItemDataViewController {
272296 let viewController = LoginViewController ( viewModel: viewModel)
273297 self ? . navigationController? . pushViewController ( viewController, animated: true )
274298 }
275- let modalViewController = ModalViewControllerB ( onRightButtonTapped: onRightButtonTapped, width: 301 , height: 208 , paddingBetweenLabels: 16 , title: " 쪽지를 보내려면 \n 로그인이 필요해요. " , subTitle: " 로그인 후 대화를 시작하세요! " , titleColor: . appColor( . neutral600) , subTitleColor: . appColor( . gray) )
299+ let modalViewController = ModalViewControllerB ( onLeftButtonTapped : onLeftButtonTapped , onRightButtonTapped: onRightButtonTapped, width: 301 , height: 208 , paddingBetweenLabels: 16 , title: " 쪽지를 보내려면 \n 로그인이 필요해요. " , subTitle: " 로그인 후 대화를 시작하세요! " , titleColor: . appColor( . neutral600) , subTitleColor: . appColor( . gray) )
276300 modalViewController. modalTransitionStyle = . crossDissolve
277301 modalViewController. modalPresentationStyle = . overFullScreen
278302 navigationController? . present ( modalViewController, animated: true )
0 commit comments