diff --git a/backend/src/main/java/com/alttd/altitudeweb/controllers/event/EventController.java b/backend/src/main/java/com/alttd/altitudeweb/controllers/event/EventController.java index 6b4057c..4976882 100644 --- a/backend/src/main/java/com/alttd/altitudeweb/controllers/event/EventController.java +++ b/backend/src/main/java/com/alttd/altitudeweb/controllers/event/EventController.java @@ -1,10 +1,13 @@ package com.alttd.altitudeweb.controllers.event; import com.alttd.altitudeweb.controllers.chat.ChatMessageMapper; +import com.alttd.altitudeweb.database.Databases; +import com.alttd.altitudeweb.database.chat.ChatLogMapper; import com.alttd.altitudeweb.model.PermissionClaimDto; import com.alttd.altitudeweb.services.chat.ChatService; import com.alttd.altitudeweb.services.chat.event_publisher.EventPublisher; import com.alttd.altitudeweb.services.chat.event_publisher.EventUser; +import com.alttd.altitudeweb.setup.Connection; import jakarta.servlet.http.HttpServletResponse; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; @@ -21,7 +24,9 @@ import org.springframework.web.servlet.mvc.method.annotation.SseEmitter; import java.time.Duration; import java.time.Instant; import java.util.List; +import java.util.Optional; import java.util.UUID; +import java.util.concurrent.CompletableFuture; import java.util.stream.Collectors; @RequiredArgsConstructor @@ -62,7 +67,29 @@ public class EventController { .map(ChatMessageMapper::toJson) .collect(Collectors.joining(",", "[", "]")); - return eventPublisher.subscribe(new EventUser(subject, authorities), json); + Integer partyId = getPartyId(subject); + return eventPublisher.subscribe(new EventUser(subject, authorities, partyId), json); + } + + private Integer getPartyId(UUID subject) { + CompletableFuture partyIdFuture = new CompletableFuture<>(); + + Connection.getConnection(Databases.CHAT) + .runQuery(sqlSession -> { + log.debug("Loading party id for uuid {}", subject); + try { + Integer partyId = sqlSession.getMapper(ChatLogMapper.class) + .getPartyId(subject.toString()) + .orElse(null); + + partyIdFuture.complete(partyId); + } catch (Exception e) { + log.error("Failed to load party id", e); + partyIdFuture.complete(null); + } + }); + + return partyIdFuture.join(); } private static boolean doesNotHavePermission(List authorities) { diff --git a/backend/src/main/java/com/alttd/altitudeweb/services/chat/ChatService.java b/backend/src/main/java/com/alttd/altitudeweb/services/chat/ChatService.java index 51a397b..a8dcb9f 100644 --- a/backend/src/main/java/com/alttd/altitudeweb/services/chat/ChatService.java +++ b/backend/src/main/java/com/alttd/altitudeweb/services/chat/ChatService.java @@ -113,9 +113,11 @@ public class ChatService { return switch (chatMessage.getType()) { case PUBLIC, GLOBAL -> true; case PARTY -> { - // TODO [Stijn] [2026-07-19]: Check if user is in party - // if (isInParty(eventUser, chatMessage.getChannel())) return true; - yield false; + Integer partyId = eventUser.partyId(); + if (partyId == null) { + yield false; + } + yield chatMessage.getChannel().equals(String.valueOf(partyId)); } case MSG -> { if (eventUser.uuid().equals(chatMessage.getUuid())) { diff --git a/backend/src/main/java/com/alttd/altitudeweb/services/chat/event_publisher/EventUser.java b/backend/src/main/java/com/alttd/altitudeweb/services/chat/event_publisher/EventUser.java index c713063..0062dc1 100644 --- a/backend/src/main/java/com/alttd/altitudeweb/services/chat/event_publisher/EventUser.java +++ b/backend/src/main/java/com/alttd/altitudeweb/services/chat/event_publisher/EventUser.java @@ -6,7 +6,7 @@ import java.util.List; import java.util.Objects; import java.util.UUID; -public record EventUser(UUID uuid, List authorities) { +public record EventUser(UUID uuid, List authorities, Integer partyId) { public boolean hasPermission(PermissionClaimDto permission) { return authorities.contains(permission.getValue()); diff --git a/database/src/main/java/com/alttd/altitudeweb/database/chat/ChatLogMapper.java b/database/src/main/java/com/alttd/altitudeweb/database/chat/ChatLogMapper.java index 634ca33..e4b49e7 100644 --- a/database/src/main/java/com/alttd/altitudeweb/database/chat/ChatLogMapper.java +++ b/database/src/main/java/com/alttd/altitudeweb/database/chat/ChatLogMapper.java @@ -4,6 +4,7 @@ import org.apache.ibatis.annotations.Param; import org.apache.ibatis.annotations.Select; import java.util.List; +import java.util.Optional; public interface ChatLogMapper { @@ -15,4 +16,10 @@ public interface ChatLogMapper { """) List getChatLogs(@Param("since") long since); + @Select(""" + SELECT party_id FROM chat_users + WHERE uuid = #{uuid} + """) + Optional getPartyId(@Param("uuid") String uuid); + }