Files
nabeh/backend/app/Controllers/GroupController.php
2026-05-22 00:12:07 +03:00

117 lines
3.5 KiB
PHP

<?php
namespace App\Controllers;
use App\Core\Request;
use App\Core\Response;
use App\Models\ContactGroup;
class GroupController extends BaseController
{
/**
* List all groups for the company
*/
public function index(Request $request, Response $response)
{
$groupModel = new ContactGroup();
// Since ContactGroup extends BaseModel we can access the DB connection
$groups = $groupModel->db->query(
"SELECT * FROM contact_groups WHERE company_id = ? ORDER BY id DESC",
[$request->company_id]
)->fetchAll();
$response->json([
'status' => 'success',
'data' => $groups
]);
}
/**
* Create a new contact group
*/
public function store(Request $request, Response $response)
{
$errors = $this->validate($request, ['name' => 'required']);
if (!empty($errors)) {
$response->status(400)->json(['status' => 'error', 'errors' => $errors]);
return;
}
$groupModel = new ContactGroup();
$id = $groupModel->create([
'company_id' => $request->company_id,
'name' => $request->getBody()['name']
]);
$response->status(201)->json([
'status' => 'success',
'message' => 'Group created',
'id' => $id
]);
}
/**
* Attach a contact to a group
*/
public function addContact(Request $request, Response $response)
{
$errors = $this->validate($request, ['group_id' => 'required', 'contact_id' => 'required']);
if (!empty($errors)) {
$response->status(400)->json(['status' => 'error', 'errors' => $errors]);
return;
}
$body = $request->getBody();
$groupModel = new ContactGroup();
// Note: For absolute security, we should verify that both the group and contact belong to the company_id
// We assume basic attachment here for Phase 4
$groupModel->attachContact($body['group_id'], $body['contact_id']);
$response->json(['status' => 'success', 'message' => 'Contact added to group']);
}
/**
* Attach multiple contacts to a group in bulk
*/
public function bulkAddContacts(Request $request, Response $response)
{
$errors = $this->validate($request, [
'group_id' => 'required',
'contact_ids' => 'required'
]);
if (!empty($errors)) {
$response->status(400)->json(['status' => 'error', 'errors' => $errors]);
return;
}
$body = $request->getBody();
$groupId = (int)$body['group_id'];
$contactIds = $body['contact_ids'];
if (!is_array($contactIds)) {
$response->status(400)->json(['status' => 'error', 'message' => 'contact_ids must be an array']);
return;
}
$groupModel = new ContactGroup();
$pdo = \App\Core\Database::getConnection();
try {
$pdo->beginTransaction();
foreach ($contactIds as $contactId) {
$groupModel->attachContact($groupId, (int)$contactId);
}
$pdo->commit();
} catch (\Exception $e) {
if ($pdo->inTransaction()) {
$pdo->rollBack();
}
$response->status(500)->json(['status' => 'error', 'message' => 'Bulk insert failed: ' . $e->getMessage()]);
return;
}
$response->json(['status' => 'success', 'message' => 'Contacts added to group in bulk']);
}
}