<?php
namespace App\Controller\Backend;
use App\Entity\User;
use Doctrine\ORM\QueryBuilder;
use Symfony\Component\HttpFoundation\Request;
use Symfony\Component\HttpFoundation\Response;
use FOS\RestBundle\Controller\Annotations as Rest;
use FOS\RestBundle\View\View;
use App\Annotation\PermissionAdmin;
use App\Service\UserService;
use App\Annotation\Log;
use App\Service\CommonService;
/**
* @Rest\Route("/api/user")
*/
class UserController extends BaseController
{
/**
* @Rest\Get("/list")
* @PermissionAdmin
* @return View
*/
public function getList(Request $request): View
{
$extraFilter = function ($queryBuilder) {
/** @var QueryBuilder $queryBuilder */
$queryBuilder
->join('User.subRoles', 'subRoles')
->andWhere('subRoles.id not in (:listRolesNotAdmin) AND subRoles.id <> :superAdminRole')
->setParameter('listRolesNotAdmin', User::getListRoleIdsThatNotAdmin())
->setParameter('superAdminRole', User::ROLE_ADMINISTRATOR_SUPER);
};
return View::create(
$this->currentRepo->getList($request, 'App\DTO\User\UserListOutput', $extraFilter),
Response::HTTP_OK
);
}
/**
* @Rest\Get("/{id}")
* @PermissionAdmin
* @return View
*/
public function getOne($id): View
{
return View::create($this->currentService->getOneById($id), Response::HTTP_OK);
}
/**
* @Rest\Post("")
* @PermissionAdmin
* @Log
* @return View
*/
public function add(Request $request, UserService $userService): View
{
return View::create($this->currentService->addUserAdministratorFunctional($request), Response::HTTP_OK);
}
/**
* @Rest\Post("/update")
* @PermissionAdmin
* @Log
* @return View
*/
public function update(Request $request): View
{
return View::create($this->currentService->updateUserAdministratorFunctional($request), Response::HTTP_OK);
}
/**
* @Rest\Post("/update-status")
* @PermissionAdmin
* @Log
* @return View
*/
public function updateStatus(Request $request): View
{
return View::create($this->currentService->updateStatusUser($request), Response::HTTP_OK);
}
/**
* @Rest\Delete("/{id}")
* @PermissionAdmin
* @Log
* @return View
*/
public function delete(int $id): View
{
return View::create(['result' => $this->currentService->delete($id)], Response::HTTP_OK);
}
}