feat: user mentions

This commit is contained in:
2025-12-11 02:01:28 +02:00
parent 9762443685
commit 80c85a2cab
10 changed files with 660 additions and 68 deletions

View File

@@ -8,6 +8,7 @@ declare(strict_types=1);
namespace OCA\Forum\Controller;
use OCA\Forum\Db\ForumUserMapper;
use OCA\Forum\Service\UserService;
use OCP\AppFramework\Db\DoesNotExistException;
use OCP\AppFramework\Http;
use OCP\AppFramework\Http\Attribute\ApiRoute;
@@ -28,6 +29,7 @@ class ForumUserController extends OCSController {
string $appName,
IRequest $request,
private ForumUserMapper $forumUserMapper,
private UserService $userService,
private IUserSession $userSession,
private LoggerInterface $logger,
) {
@@ -54,6 +56,28 @@ class ForumUserController extends OCSController {
}
}
/**
* Search Nextcloud users for autocomplete
* Returns users matching the search query in the format expected by NcRichContenteditable
*
* @param string $search Search query (matches against user ID and display name)
* @param int $limit Maximum number of results to return
* @return DataResponse<Http::STATUS_OK, list<array{id: string, label: string, icon: string, source: string}>, array{}>
*
* 200: Users returned
*/
#[NoAdminRequired]
#[ApiRoute(verb: 'GET', url: '/api/users/autocomplete')]
public function autocomplete(string $search = '', int $limit = 10): DataResponse {
try {
$users = $this->userService->searchUsersForAutocomplete($search, $limit);
return new DataResponse($users);
} catch (\Exception $e) {
$this->logger->error('Error searching users for autocomplete: ' . $e->getMessage());
return new DataResponse(['error' => 'Failed to search users'], Http::STATUS_INTERNAL_SERVER_ERROR);
}
}
/**
* Get forum user by Nextcloud user ID
* Special case: use "me" to get current forum user