f7cloud_client/apps/mail/lib/Controller/AccountApiController.php
root 8b6a0139db f7cloud_client
Co-authored-by: Cursor <cursoragent@cursor.com>
2026-02-17 22:59:26 +00:00

71 lines
2.0 KiB
PHP

<?php
declare(strict_types=1);
/**
* SPDX-FileCopyrightText: 2025 F7cloud GmbH and F7cloud contributors
* SPDX-License-Identifier: AGPL-3.0-or-later
*/
namespace OCA\Mail\Controller;
use OCA\Mail\Account;
use OCA\Mail\Db\Alias;
use OCA\Mail\ResponseDefinitions;
use OCA\Mail\Service\AccountService;
use OCA\Mail\Service\AliasesService;
use OCP\AppFramework\Http;
use OCP\AppFramework\Http\Attribute\ApiRoute;
use OCP\AppFramework\Http\Attribute\NoAdminRequired;
use OCP\AppFramework\Http\Attribute\NoCSRFRequired;
use OCP\AppFramework\Http\DataResponse;
use OCP\AppFramework\OCSController;
use OCP\IRequest;
/**
* @psalm-import-type MailAccountListResponse from ResponseDefinitions
*/
class AccountApiController extends OCSController {
public function __construct(
string $appName,
IRequest $request,
private readonly ?string $userId,
private readonly AccountService $accountService,
private readonly AliasesService $aliasesService,
) {
parent::__construct($appName, $request);
}
/**
* List all email accounts and their aliases of the user which is currently logged-in
*
* @return DataResponse<Http::STATUS_OK, list<MailAccountListResponse>, array{}>|DataResponse<Http::STATUS_NOT_FOUND, array{}, array{}>
*
* 200: Account list
* 404: User was not logged in
*/
#[ApiRoute(verb: 'GET', url: '/account/list')]
#[NoAdminRequired]
#[NoCSRFRequired]
public function list(): DataResponse {
$userId = $this->userId;
if ($userId === null) {
return new DataResponse([], Http::STATUS_NOT_FOUND);
}
$accounts = $this->accountService->findByUserId($userId);
return new DataResponse(array_map(function (Account $account) use ($userId) {
$aliases = $this->aliasesService->findAll($account->getId(), $userId);
return [
'id' => $account->getId(),
'email' => $account->getEmail(),
'aliases' => array_map(static fn (Alias $alias) => [
'id' => $alias->getId(),
'email' => $alias->getAlias(),
'name' => $alias->getName(),
], $aliases),
];
}, $accounts));
}
}