38443-vm/api_v1_dms.php
2026-02-15 10:55:02 +00:00

68 lines
2.4 KiB
PHP

<?php
header('Content-Type: application/json');
require_once 'auth/session.php';
requireLogin();
$current_user_id = $_SESSION['user_id'];
if ($_SERVER['REQUEST_METHOD'] === 'POST') {
$target_user_id = $_POST['user_id'] ?? 0;
if ($target_user_id == $current_user_id) {
echo json_encode(['success' => false, 'error' => 'You cannot message yourself']);
exit;
}
try {
// Check if DM channel already exists between these two users
$stmt = db()->prepare("
SELECT c.id
FROM channels c
JOIN channel_members cm1 ON c.id = cm1.channel_id
JOIN channel_members cm2 ON c.id = cm2.channel_id
WHERE c.type = 'dm' AND cm1.user_id = ? AND cm2.user_id = ?
");
$stmt->execute([$current_user_id, $target_user_id]);
$existing = $stmt->fetch();
if ($existing) {
echo json_encode(['success' => true, 'channel_id' => $existing['id']]);
exit;
}
// Create new DM channel
$stmt = db()->prepare("INSERT INTO channels (server_id, name, type) VALUES (NULL, 'dm', 'dm')");
$stmt->execute();
$channel_id = db()->lastInsertId();
// Add both users to the channel
$stmt = db()->prepare("INSERT INTO channel_members (channel_id, user_id) VALUES (?, ?), (?, ?)");
$stmt->execute([$channel_id, $current_user_id, $channel_id, $target_user_id]);
echo json_encode(['success' => true, 'channel_id' => $channel_id]);
} catch (Exception $e) {
echo json_encode(['success' => false, 'error' => $e->getMessage()]);
}
exit;
}
if ($_SERVER['REQUEST_METHOD'] === 'GET') {
// Fetch all DM channels for current user
try {
$stmt = db()->prepare("
SELECT c.id, u.username as other_user, u.avatar_url, u.status, u.id as other_user_id
FROM channels c
JOIN channel_members cm1 ON c.id = cm1.channel_id
JOIN channel_members cm2 ON c.id = cm2.channel_id
JOIN users u ON cm2.user_id = u.id
WHERE c.type = 'dm' AND cm1.user_id = ? AND cm2.user_id != ?
");
$stmt->execute([$current_user_id, $current_user_id]);
$dms = $stmt->fetchAll();
echo json_encode(['success' => true, 'dms' => $dms]);
} catch (Exception $e) {
echo json_encode(['success' => false, 'error' => $e->getMessage()]);
}
}