diff --git a/src/main/java/com/example/be/domain/Room.java b/src/main/java/com/example/be/domain/Room.java index 96d92c1..c7258cf 100644 --- a/src/main/java/com/example/be/domain/Room.java +++ b/src/main/java/com/example/be/domain/Room.java @@ -31,9 +31,9 @@ public class Room { private String maxParticipants; - private Long participantCount; + private int participantCount; - private LocalDateTime createDate; + private long createDate; //Relationships diff --git a/src/main/java/com/example/be/repository/RoomRepository.java b/src/main/java/com/example/be/repository/RoomRepository.java new file mode 100644 index 0000000..f0c6b8c --- /dev/null +++ b/src/main/java/com/example/be/repository/RoomRepository.java @@ -0,0 +1,9 @@ +package com.example.be.repository; + +import com.example.be.domain.RefreshToken; +import com.example.be.domain.Room; +import org.springframework.data.jpa.repository.JpaRepository; + +public interface RoomRepository extends JpaRepository { + Room findByTitle(String title); +} diff --git a/src/main/java/com/example/be/web/controller/OpenviduController.java b/src/main/java/com/example/be/web/controller/OpenviduController.java index 6513862..3550d62 100644 --- a/src/main/java/com/example/be/web/controller/OpenviduController.java +++ b/src/main/java/com/example/be/web/controller/OpenviduController.java @@ -1,7 +1,10 @@ package com.example.be.web.controller; +import com.example.be.domain.Room; +import com.example.be.repository.RoomRepository; import com.example.be.web.dto.OpenviduDTO; import io.livekit.server.*; +import lombok.RequiredArgsConstructor; import org.springframework.beans.factory.annotation.Value; import org.springframework.http.ResponseEntity; import org.springframework.web.bind.annotation.*; @@ -13,6 +16,7 @@ @CrossOrigin(origins = "*") @RestController @RequestMapping("/api/v1/video") +@RequiredArgsConstructor public class OpenviduController { @Value("${livekit.api.key}") @@ -21,6 +25,8 @@ public class OpenviduController { @Value("${livekit.api.secret}") private String LIVEKIT_API_SECRET; + private final RoomRepository roomRepository; + @PostMapping(value = "/token") public ResponseEntity> createToken(@RequestBody OpenviduDTO.TokenRequestDto request) { @@ -44,7 +50,29 @@ public ResponseEntity receiveWebhook(@RequestHeader("Authorization") Str WebhookReceiver webhookReceiver = new WebhookReceiver(LIVEKIT_API_KEY, LIVEKIT_API_SECRET); try { WebhookEvent event = webhookReceiver.receive(body, authHeader); + String roomName = event.getRoom().getName(); + Room room = roomRepository.findByTitle(roomName); + long createAt = event.getRoom().getCreationTime(); System.out.println("LiveKit Webhook: " + event.toString()); + + switch (event.toString()) { + case "room_started" -> { + room = Room.builder() + .title(roomName) + .createDate(createAt) + .build(); + roomRepository.save(room); + } + case "room_finished" -> roomRepository.delete(room); + case "participant_joined" -> { + room.setParticipantCount(room.getParticipantCount() + 1); + roomRepository.save(room); + } + case "participant_left" -> { + room.setParticipantCount(room.getParticipantCount() - 1); + roomRepository.save(room); + } + } } catch (Exception e) { System.err.println("Error validating webhook event: " + e.getMessage()); } diff --git a/src/main/java/com/example/be/web/controller/RoomController.java b/src/main/java/com/example/be/web/controller/RoomController.java index 35b3d5e..012cdff 100644 --- a/src/main/java/com/example/be/web/controller/RoomController.java +++ b/src/main/java/com/example/be/web/controller/RoomController.java @@ -27,16 +27,6 @@ public class RoomController { @GetMapping("/rooms") @Operation(summary = "방 목록 조회", description = "생성된 모든 방 목록을 조회합니다.") public ApiResponse getAllRooms() { -// -// AccessToken accessToken = new AccessToken(LIVEKIT_API_KEY, LIVEKIT_API_SECRET); -// -// // Grant 설정 -// RoomList roomList = new RoomList(true); -// accessToken.addGrants(roomList); -// -// String jwt = accessToken.toJwt(); -// HttpHeaders headers = new HttpHeaders(); -// headers.add("Authorization", "Bearer " + jwt); return ApiResponse.onSuccess(roomService.getAllRooms()); }