Fixed join channel and group bugs
This commit is contained in:
@@ -85,15 +85,16 @@ public class ActionHandler {
|
||||
}
|
||||
|
||||
|
||||
private void joinGroupOrChannel(String type, String id) {
|
||||
private void joinGroupOrChannel(String type, String uuid) {
|
||||
JSONObject req = new JSONObject();
|
||||
req.put("action", "join_" + type);
|
||||
req.put("user_id", Session.currentUser.getString("user_id"));
|
||||
req.put("id", id);
|
||||
req.put("user_id", Session.currentUser.getString("internalUUID")); // ✅ internal_uuid لازم است
|
||||
req.put("id", uuid); // ✅ این هم internal_uuid است
|
||||
send(req);
|
||||
}
|
||||
|
||||
|
||||
|
||||
private ChatEntry fetchChatInfo(String receiverId, String receiverType) {
|
||||
JSONObject req = new JSONObject();
|
||||
req.put("action", "get_chat_info");
|
||||
@@ -312,12 +313,13 @@ public class ActionHandler {
|
||||
} else {
|
||||
joinGroupOrChannel(type, uuid);
|
||||
|
||||
ChatEntry newChat = fetchChatInfo(uuid, type);
|
||||
ChatEntry newChat = fetchChatInfo(id, type);
|
||||
refreshChatList();
|
||||
openChat(newChat);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
case "message" -> {
|
||||
String receiverId = selected.getString("receiver_id");
|
||||
String receiverType = selected.getString("receiver_type");
|
||||
|
||||
@@ -252,4 +252,31 @@ public class ChannelDatabase {
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
public static Channel findByInternalUUID(UUID internalUUID) {
|
||||
String sql = "SELECT * FROM channels WHERE internal_uuid = ?";
|
||||
try (Connection conn = ConnectionDb.connect();
|
||||
PreparedStatement stmt = conn.prepareStatement(sql)) {
|
||||
|
||||
stmt.setObject(1, internalUUID);
|
||||
ResultSet rs = stmt.executeQuery();
|
||||
|
||||
if (rs.next()) {
|
||||
Channel channel = new Channel();
|
||||
channel.setInternal_uuid(UUID.fromString(rs.getString("internal_uuid")));
|
||||
channel.setChannel_id(rs.getString("channel_id"));
|
||||
channel.setChannel_name(rs.getString("channel_name"));
|
||||
channel.setImage_url(rs.getString("image_url"));
|
||||
channel.setCreator_id(UUID.fromString(rs.getString("creator_id")));
|
||||
channel.setDescription(rs.getString("description"));
|
||||
channel.setCreated_at(rs.getTimestamp("created_at").toLocalDateTime());
|
||||
return channel;
|
||||
}
|
||||
} catch (SQLException e) {
|
||||
e.printStackTrace();
|
||||
}
|
||||
return null;
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
|
||||
@@ -256,4 +256,32 @@ public class GroupDatabase {
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
public static Group findByInternalUUID(UUID internalUUID) {
|
||||
String sql = "SELECT * FROM groups WHERE internal_uuid = ?";
|
||||
try (Connection conn = ConnectionDb.connect();
|
||||
PreparedStatement stmt = conn.prepareStatement(sql)) {
|
||||
|
||||
stmt.setObject(1, internalUUID);
|
||||
ResultSet rs = stmt.executeQuery();
|
||||
|
||||
if (rs.next()) {
|
||||
Group group = new Group();
|
||||
group.setInternal_uuid(UUID.fromString(rs.getString("internal_uuid")));
|
||||
group.setGroup_id(rs.getString("group_id"));
|
||||
group.setGroup_name(rs.getString("group_name"));
|
||||
group.setImage_url(rs.getString("image_url"));
|
||||
group.setCreator_id(UUID.fromString(rs.getString("creator_id")));
|
||||
group.setDescription(rs.getString("description"));
|
||||
group.setCreated_at(rs.getTimestamp("created_at").toLocalDateTime());
|
||||
return group;
|
||||
}
|
||||
} catch (SQLException e) {
|
||||
e.printStackTrace();
|
||||
}
|
||||
return null;
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
@@ -109,9 +109,13 @@ public class JsonUtil {
|
||||
|
||||
|
||||
|
||||
|
||||
public static JSONArray groupMemberListToJson(List<GroupMember> members) {
|
||||
JSONArray array = new JSONArray();
|
||||
|
||||
if (members == null) {
|
||||
return array;
|
||||
}
|
||||
|
||||
for (GroupMember m : members) {
|
||||
JSONObject obj = new JSONObject();
|
||||
obj.put("group_id", m.getGroup_id().toString());
|
||||
@@ -120,22 +124,31 @@ public class JsonUtil {
|
||||
obj.put("role", m.getRole());
|
||||
array.put(obj);
|
||||
}
|
||||
|
||||
return array;
|
||||
}
|
||||
|
||||
public static JSONArray channelSubscribeToJson(List<ChannelSubscribe> subscribes){
|
||||
|
||||
public static JSONArray channelSubscribeToJson(List<ChannelSubscribe> subscribes) {
|
||||
JSONArray array = new JSONArray();
|
||||
for(ChannelSubscribe s :subscribes ){
|
||||
|
||||
if (subscribes == null) {
|
||||
return array;
|
||||
}
|
||||
|
||||
for (ChannelSubscribe s : subscribes) {
|
||||
JSONObject obj = new JSONObject();
|
||||
obj.put("channel_id",s.getChannel_id().toString());
|
||||
obj.put("channel_id", s.getChannel_id().toString());
|
||||
obj.put("user_id", s.getUser_id().toString());
|
||||
obj.put("Subscribed_at", s.getJoin_at().toString());
|
||||
array.put(obj);
|
||||
}
|
||||
|
||||
return array;
|
||||
}
|
||||
|
||||
|
||||
|
||||
public static JSONArray chatListToJson(List<ChatEntry> chatList) {
|
||||
JSONArray jsonArray = new JSONArray();
|
||||
|
||||
|
||||
@@ -228,10 +228,15 @@ public class ClientHandler implements Runnable {
|
||||
}
|
||||
|
||||
case "join_group": {
|
||||
UUID userUUID = new userDatabase().findByUserId(requestJson.getString("user_id")).getInternal_uuid();
|
||||
UUID groupUUID = GroupDatabase.findInternalUUIDByGroupId(requestJson.getString("id"));
|
||||
UUID userUUID = UUID.fromString(requestJson.getString("user_id")); // مستقیم internalUUID دریافت میکنیم
|
||||
Group group = GroupDatabase.findByInternalUUID(UUID.fromString(requestJson.getString("id")));
|
||||
if (group == null) {
|
||||
response = new ResponseModel("error", "Group not found.");
|
||||
break;
|
||||
}
|
||||
|
||||
boolean joined = GroupDatabase.addMemberToGroup(userUUID, groupUUID);
|
||||
|
||||
boolean joined = GroupDatabase.addMemberToGroup(userUUID, group.getInternal_uuid());
|
||||
response = joined
|
||||
? new ResponseModel("success", "Joined group.")
|
||||
: new ResponseModel("error", "Failed to join group.");
|
||||
@@ -239,10 +244,15 @@ public class ClientHandler implements Runnable {
|
||||
}
|
||||
|
||||
case "join_channel": {
|
||||
UUID userUUID = new userDatabase().findByUserId(requestJson.getString("user_id")).getInternal_uuid();
|
||||
UUID channelUUID = ChannelDatabase.findInternalUUIDByChannelId(requestJson.getString("id"));
|
||||
UUID userUUID = UUID.fromString(requestJson.getString("user_id")); // مستقیم internalUUID دریافت میکنیم
|
||||
Channel channel = ChannelDatabase.findByInternalUUID(UUID.fromString(requestJson.getString("id")));
|
||||
if (channel == null) {
|
||||
response = new ResponseModel("error", "Channel not found.");
|
||||
break;
|
||||
}
|
||||
|
||||
boolean joined = ChannelDatabase.addSubscriberToChannel(userUUID, channelUUID);
|
||||
|
||||
boolean joined = ChannelDatabase.addSubscriberToChannel(userUUID, channel.getInternal_uuid());
|
||||
response = joined
|
||||
? new ResponseModel("success", "Joined channel.")
|
||||
: new ResponseModel("error", "Failed to join channel.");
|
||||
|
||||
Reference in New Issue
Block a user