@@ -45,37 +45,65 @@ public ResponseEntity<Map<String, String>> createToken(@RequestBody OpenviduDTO.
4545 return ResponseEntity .ok (Map .of ("token" , token .toJwt ()));
4646 }
4747
48- @ PostMapping (value = "/livekit/webhook" , consumes = "application/webhook+json" )
49- public ResponseEntity <String > receiveWebhook (@ RequestHeader ("Authorization" ) String authHeader , @ RequestBody String body ) {
50- WebhookReceiver webhookReceiver = new WebhookReceiver (LIVEKIT_API_KEY , LIVEKIT_API_SECRET );
51- try {
52- WebhookEvent event = webhookReceiver .receive (body , authHeader );
53- String roomName = event .getRoom ().getName ();
54- Room room = roomRepository .findByTitle (roomName );
55- long createAt = event .getRoom ().getCreationTime ();
56- System .out .println ("LiveKit Webhook: " + event .toString ());
57-
58- switch (event .toString ()) {
59- case "room_started" -> {
60- room = Room .builder ()
61- .title (roomName )
62- .createDate (createAt )
63- .build ();
64- roomRepository .save (room );
65- }
66- case "room_finished" -> roomRepository .delete (room );
67- case "participant_joined" -> {
68- room .setParticipantCount (room .getParticipantCount () + 1 );
69- roomRepository .save (room );
70- }
71- case "participant_left" -> {
72- room .setParticipantCount (room .getParticipantCount () - 1 );
73- roomRepository .save (room );
48+ @ PostMapping (value = "/livekit/webhook" , consumes = "application/webhook+json" )
49+ public ResponseEntity <String > receiveWebhook (@ RequestHeader ("Authorization" ) String authHeader , @ RequestBody String body ) {
50+ WebhookReceiver webhookReceiver = new WebhookReceiver (LIVEKIT_API_KEY , LIVEKIT_API_SECRET );
51+ try {
52+ WebhookEvent event = webhookReceiver .receive (body , authHeader );
53+ String roomName = event .getRoom ().getName ();
54+ long createAt = event .getRoom ().getCreationTime ();
55+
56+ System .out .println ("LiveKit Webhook Event: " + event .getEvent ());
57+ System .out .println ("Room Name: " + roomName );
58+
59+ // 이벤트 타입에 따른 처리 - event.getEvent() 사용
60+ String eventType = event .getEvent ();
61+
62+ switch (eventType ) {
63+ case "room_started" -> {
64+ // 기존 방이 있는지 확인 후 생성
65+ Room existingRoom = roomRepository .findByTitle (roomName );
66+ if (existingRoom == null ) {
67+ Room newRoom = Room .builder ()
68+ .title (roomName )
69+ .createDate (createAt )
70+ .participantCount (0 )
71+ .maxParticipants ("10" ) // 기본값 설정
72+ .build ();
73+ roomRepository .save (newRoom );
74+ System .out .println ("Room created: " + roomName );
75+ }
76+ }
77+ case "room_finished" -> {
78+ Room room = roomRepository .findByTitle (roomName );
79+ if (room != null ) {
80+ roomRepository .delete (room );
81+ System .out .println ("Room deleted: " + roomName );
82+ }
83+ }
84+ case "participant_joined" -> {
85+ Room room = roomRepository .findByTitle (roomName );
86+ if (room != null ) {
87+ room .setParticipantCount (room .getParticipantCount () + 1 );
88+ roomRepository .save (room );
89+ System .out .println ("Participant joined. Current count: " + room .getParticipantCount ());
90+ }
91+ }
92+ case "participant_left" -> {
93+ Room room = roomRepository .findByTitle (roomName );
94+ if (room != null && room .getParticipantCount () > 0 ) {
95+ room .setParticipantCount (room .getParticipantCount () - 1 );
96+ roomRepository .save (room );
97+ System .out .println ("Participant left. Current count: " + room .getParticipantCount ());
98+ }
99+ }
74100 }
101+ } catch (Exception e ) {
102+ System .err .println ("Error validating webhook event: " + e .getMessage ());
103+ e .printStackTrace ();
104+ return ResponseEntity .badRequest ().body ("Invalid webhook" );
75105 }
76- } catch ( Exception e ) {
77- System . err . println ( "Error validating webhook event: " + e . getMessage () );
106+
107+ return ResponseEntity . ok ( "ok" );
78108 }
79- return ResponseEntity .ok ("ok" );
80- }
81- }
109+ }
0 commit comments