Files
server/core/lib/Controllers/UserSettingsController.php
Sebastian Krupinski 3a2739fdd8
All checks were successful
JS Unit Tests / test (pull_request) Successful in 15s
Build Test / build (pull_request) Successful in 19s
PHP Unit Tests / test (pull_request) Successful in 50s
fix: user settings
Signed-off-by: Sebastian Krupinski <krupinski01@gmail.com>
2026-03-04 20:35:00 -05:00

72 lines
1.9 KiB
PHP

<?php
namespace KTXC\Controllers;
use KTXC\Http\Request\Request;
use KTXC\Http\Response\JsonResponse;
use KTXC\Service\UserAccountsService;
use KTXC\SessionIdentity;
use KTXC\SessionTenant;
use KTXF\Controller\ControllerAbstract;
use KTXF\Routing\Attributes\AuthenticatedRoute;
class UserSettingsController extends ControllerAbstract
{
public function __construct(
private readonly SessionTenant $tenantIdentity,
private readonly SessionIdentity $userIdentity,
private readonly UserAccountsService $userService
) {}
/**
* Retrieve user settings, with optional filtering
* If no specific settings are requested, all settings are returned
*
* @return JsonResponse Settings data as key-value pairs
*/
#[AuthenticatedRoute(
'/user/settings',
name: 'user.settings.read',
methods: ['GET'],
permissions: ['user.settings.read']
)]
public function read(bool $flatten = false): JsonResponse
{
$settings = $this->userService->fetchSettings(flatten: $flatten);
return new JsonResponse($settings, JsonResponse::HTTP_OK);
}
/**
* Update user settings
*
* @param array $data Key-value pairs of settings to update
*
* @example request body:
* {
* "data": {
* "theme": "dark",
* "language": "en",
* "notifications": true
* }
* }
*
* @return JsonResponse Updated settings data
*/
#[AuthenticatedRoute(
'/user/settings',
name: 'user.settings.write',
methods: ['POST', 'PUT', 'PATCH'],
permissions: ['user.settings.write']
)]
public function write(array $data): JsonResponse
{
$this->userService->storeSettings($data);
// Return updated settings
$settings = $this->userService->fetchSettings(array_keys($data));
return new JsonResponse($settings, JsonResponse::HTTP_OK);
}
}