Skip to content

Commit ea17ece

Browse files
committed
[FIX] livekit 웹훅 수신 후 데이터베이스에 저장 로직 수정
1 parent ccfd1c6 commit ea17ece

File tree

2 files changed

+63
-38
lines changed

2 files changed

+63
-38
lines changed

src/main/java/com/example/be/domain/Room.java

Lines changed: 4 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,6 @@
1717
@NoArgsConstructor
1818
@AllArgsConstructor
1919
public class Room {
20-
2120
@Id
2221
@GeneratedValue(strategy = GenerationType.IDENTITY)
2322
private Long id;
@@ -26,18 +25,16 @@ public class Room {
2625
private String title;
2726

2827
private String password;
29-
3028
private String roomImage;
3129

32-
private String maxParticipants;
30+
@Builder.Default
31+
private String maxParticipants = "10"; // 기본값 설정
3332

34-
private int participantCount;
33+
@Builder.Default
34+
private int participantCount = 0; // 기본값 설정
3535

3636
private long createDate;
3737

38-
39-
//Relationships
4038
@OneToMany(mappedBy = "room", cascade = CascadeType.ALL, orphanRemoval = true)
4139
private List<Participant> participants;
42-
4340
}

src/main/java/com/example/be/web/controller/OpenviduController.java

Lines changed: 59 additions & 31 deletions
Original file line numberDiff line numberDiff line change
@@ -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

Comments
 (0)