Edit group info
This commit is contained in:
@@ -797,14 +797,14 @@ public class ActionHandler {
|
|||||||
}
|
}
|
||||||
case "5" -> {
|
case "5" -> {
|
||||||
leaveChat(chat.getId(), "channel");
|
leaveChat(chat.getId(), "channel");
|
||||||
return false; // خروج کامل از چت
|
return false;
|
||||||
}
|
}
|
||||||
case "0" -> {
|
case "0" -> {
|
||||||
return false; // بازگشت به لیست چتها
|
return false;
|
||||||
}
|
}
|
||||||
default -> System.out.println("Invalid choice.");
|
default -> System.out.println("Invalid choice.");
|
||||||
}
|
}
|
||||||
return true; // همچنان در منو باقی بمان
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@@ -1105,24 +1105,81 @@ public class ActionHandler {
|
|||||||
|
|
||||||
|
|
||||||
private void editGroupInfo(UUID groupId) {
|
private void editGroupInfo(UUID groupId) {
|
||||||
System.out.print("Enter new group name: ");
|
|
||||||
String newName = scanner.nextLine().trim();
|
|
||||||
|
|
||||||
System.out.print("Enter new group description: ");
|
|
||||||
String newDesc = scanner.nextLine().trim();
|
|
||||||
|
|
||||||
JSONObject req = new JSONObject();
|
JSONObject req = new JSONObject();
|
||||||
req.put("action", "edit_group_info");
|
req.put("action", "get_chat_info");
|
||||||
req.put("group_id", groupId.toString());
|
req.put("receiver_id", groupId.toString());
|
||||||
req.put("name", newName);
|
req.put("receiver_type", "group");
|
||||||
req.put("description", newDesc);
|
|
||||||
|
|
||||||
JSONObject res = sendWithResponse(req);
|
JSONObject res = sendWithResponse(req);
|
||||||
if (res != null)
|
if (res == null || !res.getString("status").equals("success")) {
|
||||||
System.out.println(res.getString("message"));
|
System.out.println("❌ Failed to fetch group info.");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
JSONObject data = res.getJSONObject("data");
|
||||||
|
|
||||||
|
String currentId = data.getString("id");
|
||||||
|
String currentName = data.getString("name");
|
||||||
|
String currentDesc = data.optString("description", "None");
|
||||||
|
String currentImage = data.optString("image_url", "None");
|
||||||
|
|
||||||
|
System.out.println("\n--- Current Group Info ---");
|
||||||
|
System.out.println("1. Group ID: " + currentId);
|
||||||
|
System.out.println("2. Name: " + currentName);
|
||||||
|
System.out.println("3. Description: " + currentDesc);
|
||||||
|
System.out.println("4. Image URL: " + currentImage);
|
||||||
|
System.out.println("0. Cancel");
|
||||||
|
|
||||||
|
System.out.print("Select the field you want to edit (0-4): ");
|
||||||
|
String choice = scanner.nextLine().trim();
|
||||||
|
|
||||||
|
String newGroupId = currentId;
|
||||||
|
String newName = currentName;
|
||||||
|
String newDesc = currentDesc;
|
||||||
|
String newImage = currentImage;
|
||||||
|
|
||||||
|
switch (choice) {
|
||||||
|
case "1" -> {
|
||||||
|
System.out.print("Enter new Group ID: ");
|
||||||
|
newGroupId = scanner.nextLine().trim();
|
||||||
|
}
|
||||||
|
case "2" -> {
|
||||||
|
System.out.print("Enter new Group Name: ");
|
||||||
|
newName = scanner.nextLine().trim();
|
||||||
|
}
|
||||||
|
case "3" -> {
|
||||||
|
System.out.print("Enter new Description: ");
|
||||||
|
newDesc = scanner.nextLine().trim();
|
||||||
|
}
|
||||||
|
case "4" -> {
|
||||||
|
System.out.print("Enter new Image URL: ");
|
||||||
|
newImage = scanner.nextLine().trim();
|
||||||
|
}
|
||||||
|
case "0" -> {
|
||||||
|
System.out.println("Cancelled.");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
default -> {
|
||||||
|
System.out.println("Invalid choice.");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
JSONObject editReq = new JSONObject();
|
||||||
|
editReq.put("action", "edit_group_info");
|
||||||
|
editReq.put("group_id", groupId.toString()); // internal_uuid
|
||||||
|
editReq.put("new_group_id", newGroupId);
|
||||||
|
editReq.put("name", newName);
|
||||||
|
editReq.put("description", newDesc);
|
||||||
|
editReq.put("image_url", newImage);
|
||||||
|
|
||||||
|
JSONObject editRes = sendWithResponse(editReq);
|
||||||
|
if (editRes != null)
|
||||||
|
System.out.println(editRes.getString("message"));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
private void viewChannelSubscribers(UUID channelId) {
|
private void viewChannelSubscribers(UUID channelId) {
|
||||||
JSONObject req = new JSONObject();
|
JSONObject req = new JSONObject();
|
||||||
req.put("action", "view_channel_subscribers");
|
req.put("action", "view_channel_subscribers");
|
||||||
|
|||||||
@@ -4,10 +4,7 @@ import org.json.JSONArray;
|
|||||||
import org.json.JSONObject;
|
import org.json.JSONObject;
|
||||||
import org.to.telegramfinalproject.Models.Group;
|
import org.to.telegramfinalproject.Models.Group;
|
||||||
|
|
||||||
import java.sql.Connection;
|
import java.sql.*;
|
||||||
import java.sql.PreparedStatement;
|
|
||||||
import java.sql.ResultSet;
|
|
||||||
import java.sql.SQLException;
|
|
||||||
import java.time.LocalDateTime;
|
import java.time.LocalDateTime;
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
@@ -142,6 +139,48 @@ public class GroupDatabase {
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
public static boolean updateGroupInfo(UUID internalUUID, String newGroupId, String name, String description, String imageUrl) {
|
||||||
|
String sql = "UPDATE groups SET group_id = ?, group_name = ?, description = ?, image_url = ? WHERE internal_uuid = ?";
|
||||||
|
|
||||||
|
try (Connection conn = ConnectionDb.connect(); PreparedStatement stmt = conn.prepareStatement(sql)) {
|
||||||
|
stmt.setString(1, newGroupId);
|
||||||
|
stmt.setString(2, name);
|
||||||
|
stmt.setString(3, description);
|
||||||
|
if (imageUrl == null) {
|
||||||
|
stmt.setNull(4, Types.VARCHAR);
|
||||||
|
} else {
|
||||||
|
stmt.setString(4, imageUrl);
|
||||||
|
}
|
||||||
|
stmt.setObject(5, internalUUID);
|
||||||
|
|
||||||
|
int affectedRows = stmt.executeUpdate();
|
||||||
|
return affectedRows > 0;
|
||||||
|
|
||||||
|
} catch (SQLException e) {
|
||||||
|
e.printStackTrace();
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
public static boolean isGroupIdUnique(String groupId, UUID excludeUUID) {
|
||||||
|
String sql = "SELECT COUNT(*) FROM groups WHERE group_id = ? AND internal_uuid != ?";
|
||||||
|
|
||||||
|
try (Connection conn = ConnectionDb.connect(); PreparedStatement stmt = conn.prepareStatement(sql)) {
|
||||||
|
stmt.setString(1, groupId);
|
||||||
|
stmt.setObject(2, excludeUUID);
|
||||||
|
ResultSet rs = stmt.executeQuery();
|
||||||
|
if (rs.next()) {
|
||||||
|
return rs.getInt(1) == 0;
|
||||||
|
}
|
||||||
|
} catch (SQLException e) {
|
||||||
|
e.printStackTrace();
|
||||||
|
}
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
public static void addMember(UUID groupInternalId, UUID userId) {
|
public static void addMember(UUID groupInternalId, UUID userId) {
|
||||||
String sql = "INSERT INTO group_members (group_id, user_id) VALUES (?, ?) ON CONFLICT DO NOTHING";
|
String sql = "INSERT INTO group_members (group_id, user_id) VALUES (?, ?) ON CONFLICT DO NOTHING";
|
||||||
try (Connection conn = ConnectionDb.connect(); PreparedStatement stmt = conn.prepareStatement(sql)) {
|
try (Connection conn = ConnectionDb.connect(); PreparedStatement stmt = conn.prepareStatement(sql)) {
|
||||||
|
|||||||
@@ -393,10 +393,10 @@ public class ClientHandler implements Runnable {
|
|||||||
data.put("internal_id", group.getInternal_uuid().toString());
|
data.put("internal_id", group.getInternal_uuid().toString());
|
||||||
data.put("name", group.getGroup_name());
|
data.put("name", group.getGroup_name());
|
||||||
data.put("image_url", group.getImage_url());
|
data.put("image_url", group.getImage_url());
|
||||||
|
data.put("description", group.getDescription() != null ? group.getDescription() : "");
|
||||||
data.put("type", "group");
|
data.put("type", "group");
|
||||||
data.put("id", group.getGroup_id());
|
data.put("id", group.getGroup_id());
|
||||||
|
|
||||||
// اضافه کردن owner و admin بودن
|
|
||||||
boolean isOwner = GroupDatabase.isOwner(group.getInternal_uuid(), currentUser.getInternal_uuid());
|
boolean isOwner = GroupDatabase.isOwner(group.getInternal_uuid(), currentUser.getInternal_uuid());
|
||||||
boolean isAdmin = GroupDatabase.isAdmin(group.getInternal_uuid(), currentUser.getInternal_uuid());
|
boolean isAdmin = GroupDatabase.isAdmin(group.getInternal_uuid(), currentUser.getInternal_uuid());
|
||||||
|
|
||||||
@@ -409,6 +409,7 @@ public class ClientHandler implements Runnable {
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
case "channel" -> {
|
case "channel" -> {
|
||||||
Channel channel = ChannelDatabase.findByChannelId(id);
|
Channel channel = ChannelDatabase.findByChannelId(id);
|
||||||
if (channel != null) {
|
if (channel != null) {
|
||||||
@@ -627,6 +628,44 @@ public class ClientHandler implements Runnable {
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
case "edit_group_info": {
|
||||||
|
try {
|
||||||
|
UUID groupUUID = UUID.fromString(requestJson.getString("group_id")); // internal_uuid
|
||||||
|
String newGroupId = requestJson.getString("new_group_id").trim(); // شناسه نمایشی جدید
|
||||||
|
String name = requestJson.optString("name");
|
||||||
|
String description = requestJson.optString("description", null);
|
||||||
|
String imageUrl = requestJson.has("image_url") && !requestJson.isNull("image_url")
|
||||||
|
? requestJson.getString("image_url") : null;
|
||||||
|
|
||||||
|
boolean isOwner = GroupDatabase.isOwner(groupUUID, currentUser.getInternal_uuid());
|
||||||
|
if (!isOwner && !GroupPermissionUtil.canEditGroup(groupUUID, currentUser.getInternal_uuid())) {
|
||||||
|
response = new ResponseModel("error", "You don't have permission to edit this group.");
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (isOwner && !GroupDatabase.isGroupIdUnique(newGroupId, groupUUID)) {
|
||||||
|
response = new ResponseModel("error", "Group ID is already taken by another group.");
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
boolean updated = GroupDatabase.updateGroupInfo(groupUUID, newGroupId, name, description, imageUrl);
|
||||||
|
response = updated
|
||||||
|
? new ResponseModel("success", "Group info updated successfully.")
|
||||||
|
: new ResponseModel("error", "Failed to update group info.");
|
||||||
|
|
||||||
|
//if (updated) {
|
||||||
|
//RealTimeEventDispatcher.sendGroupOrChannelUpdate(groupUUID, "group", name);
|
||||||
|
//}
|
||||||
|
|
||||||
|
} catch (Exception e) {
|
||||||
|
response = new ResponseModel("error", "Error updating group: " + e.getMessage());
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
case "view_channel_admins": {
|
case "view_channel_admins": {
|
||||||
UUID channelId = UUID.fromString(requestJson.getString("channel_id"));
|
UUID channelId = UUID.fromString(requestJson.getString("channel_id"));
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user