diff --git a/src/App/Traits/AppTrait.php b/src/App/Traits/AppTrait.php index 973090c79..fda0ae75b 100644 --- a/src/App/Traits/AppTrait.php +++ b/src/App/Traits/AppTrait.php @@ -77,6 +77,7 @@ protected function loadComponentHelperFunctions(): void 'Environment', 'Config', 'Router', + 'Service', 'Model', 'Hook', 'Http', diff --git a/src/Libraries/Auth/Auth.php b/src/Libraries/Auth/Auth.php index 799695808..2d92afc99 100644 --- a/src/Libraries/Auth/Auth.php +++ b/src/Libraries/Auth/Auth.php @@ -9,7 +9,7 @@ * @author Arman Ag. * @copyright Copyright (c) 2018 Softberg LLC (https://softberg.org) * @link http://quantum.softberg.org/ - * @since 2.9.7 + * @since 2.9.9 */ namespace Quantum\Libraries\Auth; @@ -21,7 +21,7 @@ /** * Class Auth * @package Quantum\Libraries\Auth - * @method mixed signin(string $username, string $password) + * @method mixed signin(string $username, string $password, bool $remember = false) * @method bool signout() * @method bool check() * @method User user() diff --git a/src/Libraries/Database/Adapters/Sleekdb/SleekDbal.php b/src/Libraries/Database/Adapters/Sleekdb/SleekDbal.php index 4f0464fab..43f5dbaea 100644 --- a/src/Libraries/Database/Adapters/Sleekdb/SleekDbal.php +++ b/src/Libraries/Database/Adapters/Sleekdb/SleekDbal.php @@ -42,16 +42,6 @@ class SleekDbal implements DbalInterface use Reducer; use Join; - /** - * Join type join to - */ - const JOINTO = 'joinTo'; - - /** - * Join type join through - */ - const JOINTHROUGH = 'joinThrough'; - /** * @var bool */ diff --git a/src/Model/QtModel.php b/src/Model/QtModel.php index 724885a31..e5417331e 100644 --- a/src/Model/QtModel.php +++ b/src/Model/QtModel.php @@ -43,7 +43,6 @@ * @method bool delete() * @method bool deleteMany() * @method static joinTo(QtModel $model, bool $switch = true) - * @method static joinThrough(QtModel $model, bool $switch = true) * @method static isNull(string $column) * @method static isNotNull(string $column) */ @@ -115,6 +114,7 @@ public function relations(): array /** * @return ModelCollection + * @throws BaseException */ public function get(): ModelCollection { diff --git a/src/Module/Templates/DemoApi/src/Controllers/AccountController.php.tpl b/src/Module/Templates/DemoApi/src/Controllers/AccountController.php.tpl index e21f5999b..fe92f35df 100644 --- a/src/Module/Templates/DemoApi/src/Controllers/AccountController.php.tpl +++ b/src/Module/Templates/DemoApi/src/Controllers/AccountController.php.tpl @@ -15,7 +15,6 @@ namespace {{MODULE_NAMESPACE}}\Controllers; use Quantum\Libraries\Auth\Exceptions\AuthException; -use Quantum\Service\Factories\ServiceFactory; use {{MODULE_NAMESPACE}}\Services\AuthService; use Quantum\Libraries\Hasher\Hasher; use Quantum\Http\Response; @@ -38,7 +37,7 @@ class AccountController extends BaseController */ public function __before() { - $this->authService = ServiceFactory::create(AuthService::class); + $this->authService = service(AuthService::class); } /** diff --git a/src/Module/Templates/DemoApi/src/Controllers/AuthController.php.tpl b/src/Module/Templates/DemoApi/src/Controllers/AuthController.php.tpl index 87ddadf99..a2a4cff1c 100644 --- a/src/Module/Templates/DemoApi/src/Controllers/AuthController.php.tpl +++ b/src/Module/Templates/DemoApi/src/Controllers/AuthController.php.tpl @@ -16,9 +16,9 @@ namespace {{MODULE_NAMESPACE}}\Controllers; use Quantum\Libraries\Auth\Exceptions\AuthException; use Quantum\Http\Enums\StatusCode; +use {{MODULE_NAMESPACE}}\Enums\Role; use Quantum\Http\Response; use Quantum\Http\Request; -use {{MODULE_NAMESPACE}}\Enums\Role; /** * Class AuthController diff --git a/src/Module/Templates/DemoApi/src/Controllers/CommentController.php.tpl b/src/Module/Templates/DemoApi/src/Controllers/CommentController.php.tpl index 4652b5adf..ec0af3c56 100644 --- a/src/Module/Templates/DemoApi/src/Controllers/CommentController.php.tpl +++ b/src/Module/Templates/DemoApi/src/Controllers/CommentController.php.tpl @@ -14,8 +14,10 @@ namespace {{MODULE_NAMESPACE}}\Controllers; -use Quantum\Service\Factories\ServiceFactory; +use Quantum\Service\Exceptions\ServiceException; +use Quantum\App\Exceptions\BaseException; use {{MODULE_NAMESPACE}}\Services\CommentService; +use Quantum\Di\Exceptions\DiException; use Quantum\Http\Response; use Quantum\Http\Request; @@ -31,9 +33,15 @@ class CommentController extends BaseController */ public $commentService; + /** + * @throws ReflectionException + * @throws BaseException + * @throws DiException + * @throws ServiceException + */ public function __before() { - $this->commentService = ServiceFactory::create(CommentService::class); + $this->commentService = service(CommentService::class); } /** @@ -45,13 +53,11 @@ class CommentController extends BaseController */ public function create(Request $request, Response $response, ?string $lang, string $uuid) { - $data = [ + $comment = $this->commentService->addComment([ 'post_uuid' => $uuid, 'user_uuid' => auth()->user()->uuid, 'content' => trim($request->get('content')), - ]; - - $comment = $this->commentService->addComment($data); + ]); $response->json([ 'status' => 'success', diff --git a/src/Module/Templates/DemoApi/src/Controllers/PostController.php.tpl b/src/Module/Templates/DemoApi/src/Controllers/PostController.php.tpl index 7aec6fb56..1607bc591 100644 --- a/src/Module/Templates/DemoApi/src/Controllers/PostController.php.tpl +++ b/src/Module/Templates/DemoApi/src/Controllers/PostController.php.tpl @@ -14,7 +14,9 @@ namespace {{MODULE_NAMESPACE}}\Controllers; -use Quantum\Service\Factories\ServiceFactory; +use Quantum\Service\Exceptions\ServiceException; +use Quantum\App\Exceptions\BaseException; +use Quantum\Di\Exceptions\DiException; use Quantum\Http\Enums\StatusCode; use {{MODULE_NAMESPACE}}\Services\CommentService; use {{MODULE_NAMESPACE}}\Services\PostService; @@ -44,11 +46,14 @@ class PostController extends BaseController public $postService; /** - * Works before an action + * @throws ReflectionException + * @throws BaseException + * @throws DiException + * @throws ServiceException */ public function __before() { - $this->postService = ServiceFactory::create(PostService::class); + $this->postService = service(PostService::class); } /** @@ -97,7 +102,8 @@ class PostController extends BaseController $postData = current($this->postService->transformData([$post])); - $commentService = ServiceFactory::create(CommentService::class); + $commentService = service(CommentService::class); + $comments = $commentService->getCommentsByPost($postUuid); $commentsData = $commentService->transformData($comments->all()); diff --git a/src/Module/Templates/DemoApi/src/Controllers/PostManagementController.php.tpl b/src/Module/Templates/DemoApi/src/Controllers/PostManagementController.php.tpl index 4bf2d708f..d642d2ffc 100644 --- a/src/Module/Templates/DemoApi/src/Controllers/PostManagementController.php.tpl +++ b/src/Module/Templates/DemoApi/src/Controllers/PostManagementController.php.tpl @@ -14,8 +14,10 @@ namespace {{MODULE_NAMESPACE}}\Controllers; -use Quantum\Service\Factories\ServiceFactory; +use Quantum\Service\Exceptions\ServiceException; +use Quantum\App\Exceptions\BaseException; use {{MODULE_NAMESPACE}}\Services\PostService; +use Quantum\Di\Exceptions\DiException; use Quantum\Http\Response; use Quantum\Http\Request; @@ -35,9 +37,16 @@ class PostManagementController extends BaseController /** * Works before an action */ + + /** + * @throws ReflectionException + * @throws BaseException + * @throws DiException + * @throws ServiceException + */ public function __before() { - $this->postService = ServiceFactory::create(PostService::class); + $this->postService = service(PostService::class); } /** diff --git a/src/Module/Templates/DemoApi/src/Middlewares/CommentOwner.php.tpl b/src/Module/Templates/DemoApi/src/Middlewares/CommentOwner.php.tpl index 83732aa89..4a6362d5d 100644 --- a/src/Module/Templates/DemoApi/src/Middlewares/CommentOwner.php.tpl +++ b/src/Module/Templates/DemoApi/src/Middlewares/CommentOwner.php.tpl @@ -14,7 +14,6 @@ namespace {{MODULE_NAMESPACE}}\Middlewares; -use Quantum\Service\Factories\ServiceFactory; use {{MODULE_NAMESPACE}}\Services\CommentService; use Quantum\Libraries\Validation\Rule; use Quantum\Http\Response; @@ -66,7 +65,7 @@ class CommentOwner extends BaseMiddleware private function registerCustomRules(): void { $this->validator->addRule('commentOwner', function ($commentUuid) { - $comment = ServiceFactory::get(CommentService::class)->getComment($commentUuid); + $comment = service(CommentService::class)->getComment($commentUuid); return !$comment->isEmpty() && $comment->user_uuid === auth()->user()->uuid; }); } diff --git a/src/Module/Templates/DemoApi/src/Middlewares/Password.php.tpl b/src/Module/Templates/DemoApi/src/Middlewares/Password.php.tpl index 535da0534..f2680a2d2 100644 --- a/src/Module/Templates/DemoApi/src/Middlewares/Password.php.tpl +++ b/src/Module/Templates/DemoApi/src/Middlewares/Password.php.tpl @@ -9,12 +9,11 @@ * @author Arman Ag. * @copyright Copyright (c) 2018 Softberg LLC (https://softberg.org) * @link http://quantum.softberg.org/ - * @since 2.9.8 + * @since 2.9.9 */ namespace {{MODULE_NAMESPACE}}\Middlewares; -use Quantum\Model\Factories\ModelFactory; use Quantum\Libraries\Validation\Rule; use Quantum\Libraries\Hasher\Hasher; use {{MODULE_NAMESPACE}}\Models\User; @@ -73,7 +72,7 @@ class Password extends BaseMiddleware private function registerCustomRules(Request $request) { $this->validator->addRule('passwordCheck', function () use ($request) { - $user = ModelFactory::get(User::class)->findOneBy('uuid', auth()->user()->uuid); + $user = model(User::class)->findOneBy('uuid', auth()->user()->uuid); return $user && (new Hasher())->check($request->get('current_password'), $user->password); }); } diff --git a/src/Module/Templates/DemoApi/src/Middlewares/PostOwner.php.tpl b/src/Module/Templates/DemoApi/src/Middlewares/PostOwner.php.tpl index ee08d22d4..46a944106 100644 --- a/src/Module/Templates/DemoApi/src/Middlewares/PostOwner.php.tpl +++ b/src/Module/Templates/DemoApi/src/Middlewares/PostOwner.php.tpl @@ -14,7 +14,6 @@ namespace {{MODULE_NAMESPACE}}\Middlewares; -use Quantum\Service\Factories\ServiceFactory; use Quantum\Libraries\Validation\Rule; use {{MODULE_NAMESPACE}}\Services\PostService; use Quantum\Http\Response; @@ -66,7 +65,7 @@ class PostOwner extends BaseMiddleware private function registerCustomRules(): void { $this->validator->addRule('postOwner', function ($postUuid) { - $post = ServiceFactory::get(PostService::class)->getPost($postUuid); + $post = service(PostService::class)->getPost($postUuid); return !$post->isEmpty() && $post->user_uuid === auth()->user()->uuid; }); } diff --git a/src/Module/Templates/DemoApi/src/Models/Comment.php.tpl b/src/Module/Templates/DemoApi/src/Models/Comment.php.tpl index 29224fb22..f1fedad39 100644 --- a/src/Module/Templates/DemoApi/src/Models/Comment.php.tpl +++ b/src/Module/Templates/DemoApi/src/Models/Comment.php.tpl @@ -14,6 +14,7 @@ namespace {{MODULE_NAMESPACE}}\Models; +use Quantum\Libraries\Database\Enums\Relation; use Quantum\Model\Traits\SoftDeletes; use Quantum\Model\QtModel; @@ -38,6 +39,19 @@ class Comment extends QtModel */ public $table = 'comments'; + /** + * Fillable properties + * @var array + */ + public $fillable = [ + 'uuid', + 'post_uuid', + 'user_uuid', + 'content', + 'created_at', + 'updated_at' + ]; + /** * Model relations configuration * @return array[] @@ -45,27 +59,11 @@ class Comment extends QtModel public function relations(): array { return [ - Post::class => [ - 'foreign_key' => 'post_uuid', - 'local_key' => 'uuid', - ], User::class => [ + 'type' => Relation::BELONGS_TO, 'foreign_key' => 'user_uuid', 'local_key' => 'uuid', ] ]; } - - /** - * Fillable properties - * @var array - */ - public $fillable = [ - 'uuid', - 'post_uuid', - 'user_uuid', - 'content', - 'created_at', - 'updated_at' - ]; } diff --git a/src/Module/Templates/DemoApi/src/Models/Post.php.tpl b/src/Module/Templates/DemoApi/src/Models/Post.php.tpl index e71cf3808..1dc729260 100644 --- a/src/Module/Templates/DemoApi/src/Models/Post.php.tpl +++ b/src/Module/Templates/DemoApi/src/Models/Post.php.tpl @@ -14,6 +14,7 @@ namespace {{MODULE_NAMESPACE}}\Models; +use Quantum\Libraries\Database\Enums\Relation; use Quantum\Model\Traits\SoftDeletes; use Quantum\Model\QtModel; @@ -38,20 +39,6 @@ class Post extends QtModel */ public $table = 'posts'; - /** - * Model relations configuration - * @return array[] - */ - public function relations(): array - { - return [ - User::class => [ - 'foreign_key' => 'user_uuid', - 'local_key' => 'uuid', - ] - ]; - } - /** * Fillable properties * @var array @@ -65,4 +52,19 @@ class Post extends QtModel 'created_at', 'updated_at', ]; + + /** + * Model relations configuration + * @return array[] + */ + public function relations(): array + { + return [ + User::class => [ + 'type' => Relation::BELONGS_TO, + 'foreign_key' => 'user_uuid', + 'local_key' => 'uuid', + ] + ]; + } } \ No newline at end of file diff --git a/src/Module/Templates/DemoApi/src/Services/AuthService.php.tpl b/src/Module/Templates/DemoApi/src/Services/AuthService.php.tpl index 457955e85..2e9d53fd8 100644 --- a/src/Module/Templates/DemoApi/src/Services/AuthService.php.tpl +++ b/src/Module/Templates/DemoApi/src/Services/AuthService.php.tpl @@ -19,11 +19,10 @@ use Quantum\Config\Exceptions\ConfigException; use Quantum\Model\Exceptions\ModelException; use Quantum\Libraries\Auth\User as AuthUser; use Quantum\App\Exceptions\BaseException; -use Quantum\Model\Factories\ModelFactory; -use {{MODULE_NAMESPACE}}\Models\User; use Quantum\Di\Exceptions\DiException; use Quantum\Model\ModelCollection; use Quantum\Service\QtService; +use {{MODULE_NAMESPACE}}\Models\User; use Quantum\Model\QtModel; use ReflectionException; @@ -40,11 +39,12 @@ class AuthService extends QtService implements AuthServiceInterface private $model; /** + * @throws BaseException * @throws ModelException */ public function __construct() { - $this->model = ModelFactory::get(User::class); + $this->model = model(User::class); } /** diff --git a/src/Module/Templates/DemoApi/src/Services/CommentService.php.tpl b/src/Module/Templates/DemoApi/src/Services/CommentService.php.tpl index 5ba00f622..0f8fade95 100644 --- a/src/Module/Templates/DemoApi/src/Services/CommentService.php.tpl +++ b/src/Module/Templates/DemoApi/src/Services/CommentService.php.tpl @@ -15,10 +15,7 @@ namespace {{MODULE_NAMESPACE}}\Services; use {{MODULE_NAMESPACE}}\Transformers\CommentTransformer; -use Quantum\Model\Exceptions\ModelException; -use Quantum\Model\Factories\ModelFactory; -use Quantum\Model\ModelCollection; -use Quantum\Paginator\Paginator; +use Quantum\App\Exceptions\BaseException;use Quantum\Model\Exceptions\ModelException; use Quantum\Service\QtService; use {{MODULE_NAMESPACE}}\Models\Comment; use {{MODULE_NAMESPACE}}\Models\User; @@ -41,26 +38,27 @@ class CommentService extends QtService private $transformer; /** - * CommentService constructor. * @param CommentTransformer $transformer * @throws ModelException + * @throws BaseException */ public function __construct(CommentTransformer $transformer) { - $this->model = ModelFactory::get(Comment::class); + $this->model = model(Comment::class); $this->transformer = $transformer; } /** * Get comments by post * @param string $postUuid - * @return ModelCollection|Paginator + * @return mixed + * @throws BaseException * @throws ModelException */ public function getCommentsByPost(string $postUuid) { return $this->model - ->joinThrough(ModelFactory::get(User::class)) + ->joinTo(model(User::class)) ->criteria('post_uuid', '=', $postUuid) ->select( 'comments.uuid', diff --git a/src/Module/Templates/DemoApi/src/Services/PostService.php.tpl b/src/Module/Templates/DemoApi/src/Services/PostService.php.tpl index 0f164f678..e7f431bbe 100644 --- a/src/Module/Templates/DemoApi/src/Services/PostService.php.tpl +++ b/src/Module/Templates/DemoApi/src/Services/PostService.php.tpl @@ -22,13 +22,11 @@ use {{MODULE_NAMESPACE}}\Transformers\PostTransformer; use Quantum\Model\Exceptions\ModelException; use Quantum\Libraries\Storage\UploadedFile; use Quantum\App\Exceptions\BaseException; -use Quantum\Model\Factories\ModelFactory; use {{MODULE_NAMESPACE}}\Models\User; use {{MODULE_NAMESPACE}}\Models\Post; use Quantum\Di\Exceptions\DiException; use Quantum\Model\ModelCollection; use Gumlet\ImageResizeException; -use Quantum\Paginator\Paginator; use Quantum\Service\QtService; use Quantum\Model\QtModel; use ReflectionException; @@ -52,11 +50,12 @@ class PostService extends QtService /** * @param PostTransformer $transformer + * @throws BaseException * @throws ModelException */ public function __construct(PostTransformer $transformer) { - $this->model = ModelFactory::get(Post::class); + $this->model = model(Post::class); $this->transformer = $transformer; } @@ -66,13 +65,14 @@ class PostService extends QtService * @param int|null $perPage * @param int|null $currentPage * @param string|null $search - * @return Paginator|ModelCollection + * @return mixed + * @throws BaseException * @throws ModelException */ public function getPosts(?int $perPage = null, ?int $currentPage = null, ?string $search = null) { $query = $this->model - ->joinThrough(ModelFactory::get(User::class)) + ->joinTo(model(User::class)) ->select( 'posts.uuid', 'title', @@ -103,12 +103,13 @@ class PostService extends QtService * Get post * @param string $uuid * @return Post + * @throws BaseException * @throws ModelException */ public function getPost(string $uuid): Post { return $this->model - ->joinThrough(ModelFactory::get(User::class)) + ->joinTo(model(User::class)) ->criteria('uuid', '=', $uuid) ->select( 'posts.uuid', @@ -128,12 +129,13 @@ class PostService extends QtService * Get my posts * @param string $userUuid * @return ModelCollection|null + * @throws BaseException * @throws ModelException */ public function getMyPosts(string $userUuid): ?ModelCollection { return $this->model - ->joinThrough(ModelFactory::get(User::class)) + ->joinTo(model(User::class)) ->criteria('user_uuid', '=', $userUuid) ->select( 'posts.uuid', @@ -152,6 +154,7 @@ class PostService extends QtService * Add post * @param array $data * @return Post + * @throws BaseException * @throws ModelException */ public function addPost(array $data): Post @@ -171,6 +174,7 @@ class PostService extends QtService * @param string $uuid * @param array $data * @return Post + * @throws BaseException * @throws ModelException */ public function updatePost(string $uuid, array $data): Post diff --git a/src/Module/Templates/DemoWeb/src/Controllers/AccountController.php.tpl b/src/Module/Templates/DemoWeb/src/Controllers/AccountController.php.tpl index 26e3cf812..d81f2cb07 100644 --- a/src/Module/Templates/DemoWeb/src/Controllers/AccountController.php.tpl +++ b/src/Module/Templates/DemoWeb/src/Controllers/AccountController.php.tpl @@ -14,7 +14,6 @@ namespace {{MODULE_NAMESPACE}}\Controllers; -use Quantum\Service\Factories\ServiceFactory; use {{MODULE_NAMESPACE}}\Services\AuthService; use Quantum\Libraries\Hasher\Hasher; use Quantum\Http\Response; @@ -42,8 +41,7 @@ class AccountController extends BaseController */ public function __before() { - $this->authService = ServiceFactory::create(AuthService::class); - + $this->authService = service(AuthService::class); parent::__before(); } diff --git a/src/Module/Templates/DemoWeb/src/Controllers/AuthController.php.tpl b/src/Module/Templates/DemoWeb/src/Controllers/AuthController.php.tpl index 18c9190fe..aaa7546ee 100644 --- a/src/Module/Templates/DemoWeb/src/Controllers/AuthController.php.tpl +++ b/src/Module/Templates/DemoWeb/src/Controllers/AuthController.php.tpl @@ -15,9 +15,9 @@ namespace {{MODULE_NAMESPACE}}\Controllers; use Quantum\Libraries\Auth\Exceptions\AuthException; +use {{MODULE_NAMESPACE}}\Enums\Role; use Quantum\Http\Response; use Quantum\Http\Request; -use {{MODULE_NAMESPACE}}\Enums\Role; /** * Class AuthController diff --git a/src/Module/Templates/DemoWeb/src/Controllers/CommentController.php.tpl b/src/Module/Templates/DemoWeb/src/Controllers/CommentController.php.tpl index edd1ea1f9..6246aff24 100644 --- a/src/Module/Templates/DemoWeb/src/Controllers/CommentController.php.tpl +++ b/src/Module/Templates/DemoWeb/src/Controllers/CommentController.php.tpl @@ -14,7 +14,6 @@ namespace {{MODULE_NAMESPACE}}\Controllers; -use Quantum\Service\Factories\ServiceFactory; use {{MODULE_NAMESPACE}}\Services\CommentService; use Quantum\Http\Request; @@ -32,7 +31,7 @@ class CommentController extends BaseController public function __before() { - $this->commentService = ServiceFactory::create(CommentService::class); + $this->commentService = service(CommentService::class); parent::__before(); } @@ -44,18 +43,11 @@ class CommentController extends BaseController */ public function create(Request $request, ?string $lang, string $uuid) { - $data = [ + $this->commentService->addComment([ 'post_uuid' => $uuid, 'user_uuid' => auth()->user()->uuid, 'content' => trim($request->get('content')), - ]; - - if (!$data['content']) { - session()->setFlash('error', t('common.comment_required')); - redirect(get_referrer()); - } - - $this->commentService->addComment($data); + ]); session()->setFlash('success', t('common.comment_added')); redirect(get_referrer()); diff --git a/src/Module/Templates/DemoWeb/src/Controllers/PostController.php.tpl b/src/Module/Templates/DemoWeb/src/Controllers/PostController.php.tpl index d2b580a32..ba27ac009 100644 --- a/src/Module/Templates/DemoWeb/src/Controllers/PostController.php.tpl +++ b/src/Module/Templates/DemoWeb/src/Controllers/PostController.php.tpl @@ -14,10 +14,9 @@ namespace {{MODULE_NAMESPACE}}\Controllers; -use Quantum\Service\Factories\ServiceFactory; use {{MODULE_NAMESPACE}}\Services\CommentService; -use Quantum\Http\Enums\StatusCode; use {{MODULE_NAMESPACE}}\Services\PostService; +use Quantum\Http\Enums\StatusCode; use Quantum\View\RawParam; use Quantum\Http\Response; use Quantum\Http\Request; @@ -52,7 +51,7 @@ class PostController extends BaseController public function __before() { - $this->postService = ServiceFactory::create(PostService::class); + $this->postService = service(PostService::class); parent::__before(); } @@ -96,7 +95,8 @@ class PostController extends BaseController stop(); } - $commentService = ServiceFactory::create(CommentService::class); + $commentService = service(CommentService::class); + $comments = $commentService->getCommentsByPost($postUuid); $comments = $commentService->transformData($comments->all()); diff --git a/src/Module/Templates/DemoWeb/src/Controllers/PostManagementController.php.tpl b/src/Module/Templates/DemoWeb/src/Controllers/PostManagementController.php.tpl index 81e10757c..d6290d601 100644 --- a/src/Module/Templates/DemoWeb/src/Controllers/PostManagementController.php.tpl +++ b/src/Module/Templates/DemoWeb/src/Controllers/PostManagementController.php.tpl @@ -14,7 +14,6 @@ namespace {{MODULE_NAMESPACE}}\Controllers; -use Quantum\Service\Factories\ServiceFactory; use {{MODULE_NAMESPACE}}\Services\PostService; use Quantum\Http\Response; use Quantum\Http\Request; @@ -39,8 +38,7 @@ class PostManagementController extends BaseController public function __before() { - $this->postService = ServiceFactory::create(PostService::class); - + $this->postService = service(PostService::class); parent::__before(); } diff --git a/src/Module/Templates/DemoWeb/src/Middlewares/CommentOwner.php.tpl b/src/Module/Templates/DemoWeb/src/Middlewares/CommentOwner.php.tpl index 83732aa89..4a6362d5d 100644 --- a/src/Module/Templates/DemoWeb/src/Middlewares/CommentOwner.php.tpl +++ b/src/Module/Templates/DemoWeb/src/Middlewares/CommentOwner.php.tpl @@ -14,7 +14,6 @@ namespace {{MODULE_NAMESPACE}}\Middlewares; -use Quantum\Service\Factories\ServiceFactory; use {{MODULE_NAMESPACE}}\Services\CommentService; use Quantum\Libraries\Validation\Rule; use Quantum\Http\Response; @@ -66,7 +65,7 @@ class CommentOwner extends BaseMiddleware private function registerCustomRules(): void { $this->validator->addRule('commentOwner', function ($commentUuid) { - $comment = ServiceFactory::get(CommentService::class)->getComment($commentUuid); + $comment = service(CommentService::class)->getComment($commentUuid); return !$comment->isEmpty() && $comment->user_uuid === auth()->user()->uuid; }); } diff --git a/src/Module/Templates/DemoWeb/src/Middlewares/Password.php.tpl b/src/Module/Templates/DemoWeb/src/Middlewares/Password.php.tpl index 64b3f501f..9d0e8b6a8 100644 --- a/src/Module/Templates/DemoWeb/src/Middlewares/Password.php.tpl +++ b/src/Module/Templates/DemoWeb/src/Middlewares/Password.php.tpl @@ -9,12 +9,11 @@ * @author Arman Ag. * @copyright Copyright (c) 2018 Softberg LLC (https://softberg.org) * @link http://quantum.softberg.org/ - * @since 2.9.8 + * @since 2.9.9 */ namespace {{MODULE_NAMESPACE}}\Middlewares; -use Quantum\Model\Factories\ModelFactory; use Quantum\Libraries\Validation\Rule; use Quantum\Libraries\Hasher\Hasher; use {{MODULE_NAMESPACE}}\Models\User; @@ -82,7 +81,7 @@ class Password extends BaseMiddleware private function registerCustomRules(Request $request) { $this->validator->addRule('passwordCheck', function () use ($request) { - $user = ModelFactory::get(User::class)->findOneBy('uuid', auth()->user()->uuid); + $user = model(User::class)->findOneBy('uuid', auth()->user()->uuid); return $user && (new Hasher())->check($request->get('current_password'), $user->password); }); } diff --git a/src/Module/Templates/DemoWeb/src/Middlewares/PostOwner.php.tpl b/src/Module/Templates/DemoWeb/src/Middlewares/PostOwner.php.tpl index 92be4b520..43ad36aa6 100644 --- a/src/Module/Templates/DemoWeb/src/Middlewares/PostOwner.php.tpl +++ b/src/Module/Templates/DemoWeb/src/Middlewares/PostOwner.php.tpl @@ -14,7 +14,6 @@ namespace {{MODULE_NAMESPACE}}\Middlewares; -use Quantum\Service\Factories\ServiceFactory; use Quantum\Libraries\Validation\Rule; use Quantum\Http\Enums\StatusCode; use {{MODULE_NAMESPACE}}\Services\PostService; @@ -77,7 +76,7 @@ class PostOwner extends BaseMiddleware private function registerCustomRules() { $this->validator->addRule('postOwner', function ($postUuid) { - $post = ServiceFactory::get(PostService::class)->getPost($postUuid); + $post = service(PostService::class)->getPost($postUuid); return !$post->isEmpty() && $post->user_uuid === auth()->user()->uuid; }); } diff --git a/src/Module/Templates/DemoWeb/src/Models/Comment.php.tpl b/src/Module/Templates/DemoWeb/src/Models/Comment.php.tpl index 7b7326c37..c35d1bcb7 100644 --- a/src/Module/Templates/DemoWeb/src/Models/Comment.php.tpl +++ b/src/Module/Templates/DemoWeb/src/Models/Comment.php.tpl @@ -14,6 +14,7 @@ namespace {{MODULE_NAMESPACE}}\Models; +use Quantum\Libraries\Database\Enums\Relation; use Quantum\Model\Traits\SoftDeletes; use Quantum\Model\QtModel; @@ -38,6 +39,19 @@ class Comment extends QtModel */ public $table = 'comments'; + /** + * Fillable properties + * @var array + */ + public $fillable = [ + 'uuid', + 'post_uuid', + 'user_uuid', + 'content', + 'created_at', + 'updated_at', + ]; + /** * Model relations configuration * @return array[] @@ -45,27 +59,11 @@ class Comment extends QtModel public function relations(): array { return [ - Post::class => [ - 'foreign_key' => 'post_uuid', - 'local_key' => 'uuid', - ], User::class => [ + 'type' => Relation::BELONGS_TO, 'foreign_key' => 'user_uuid', 'local_key' => 'uuid', ] ]; } - - /** - * Fillable properties - * @var array - */ - public $fillable = [ - 'uuid', - 'post_uuid', - 'user_uuid', - 'content', - 'created_at', - 'updated_at', - ]; } diff --git a/src/Module/Templates/DemoWeb/src/Models/Post.php.tpl b/src/Module/Templates/DemoWeb/src/Models/Post.php.tpl index a80354f19..99720d99b 100644 --- a/src/Module/Templates/DemoWeb/src/Models/Post.php.tpl +++ b/src/Module/Templates/DemoWeb/src/Models/Post.php.tpl @@ -9,11 +9,12 @@ * @author Arman Ag. * @copyright Copyright (c) 2018 Softberg LLC (https://softberg.org) * @link http://quantum.softberg.org/ - * @since 2.9.8 + * @since 2.9.9 */ namespace {{MODULE_NAMESPACE}}\Models; +use Quantum\Libraries\Database\Enums\Relation; use Quantum\Model\Traits\SoftDeletes; use Quantum\Model\QtModel; @@ -38,20 +39,6 @@ class Post extends QtModel */ public $table = 'posts'; - /** - * Model relations configuration - * @return array[] - */ - public function relations(): array - { - return [ - User::class => [ - 'foreign_key' => 'user_uuid', - 'local_key' => 'uuid', - ] - ]; - } - /** * Fillable properties * @var array @@ -65,4 +52,19 @@ class Post extends QtModel 'created_at', 'updated_at' ]; + + /** + * Model relations configuration + * @return array[] + */ + public function relations(): array + { + return [ + User::class => [ + 'type' => Relation::BELONGS_TO, + 'foreign_key' => 'user_uuid', + 'local_key' => 'uuid', + ] + ]; + } } \ No newline at end of file diff --git a/src/Module/Templates/DemoWeb/src/Services/AuthService.php.tpl b/src/Module/Templates/DemoWeb/src/Services/AuthService.php.tpl index 457955e85..2e9d53fd8 100644 --- a/src/Module/Templates/DemoWeb/src/Services/AuthService.php.tpl +++ b/src/Module/Templates/DemoWeb/src/Services/AuthService.php.tpl @@ -19,11 +19,10 @@ use Quantum\Config\Exceptions\ConfigException; use Quantum\Model\Exceptions\ModelException; use Quantum\Libraries\Auth\User as AuthUser; use Quantum\App\Exceptions\BaseException; -use Quantum\Model\Factories\ModelFactory; -use {{MODULE_NAMESPACE}}\Models\User; use Quantum\Di\Exceptions\DiException; use Quantum\Model\ModelCollection; use Quantum\Service\QtService; +use {{MODULE_NAMESPACE}}\Models\User; use Quantum\Model\QtModel; use ReflectionException; @@ -40,11 +39,12 @@ class AuthService extends QtService implements AuthServiceInterface private $model; /** + * @throws BaseException * @throws ModelException */ public function __construct() { - $this->model = ModelFactory::get(User::class); + $this->model = model(User::class); } /** diff --git a/src/Module/Templates/DemoWeb/src/Services/CommentService.php.tpl b/src/Module/Templates/DemoWeb/src/Services/CommentService.php.tpl index 5ba00f622..219d47368 100644 --- a/src/Module/Templates/DemoWeb/src/Services/CommentService.php.tpl +++ b/src/Module/Templates/DemoWeb/src/Services/CommentService.php.tpl @@ -16,9 +16,7 @@ namespace {{MODULE_NAMESPACE}}\Services; use {{MODULE_NAMESPACE}}\Transformers\CommentTransformer; use Quantum\Model\Exceptions\ModelException; -use Quantum\Model\Factories\ModelFactory; -use Quantum\Model\ModelCollection; -use Quantum\Paginator\Paginator; +use Quantum\App\Exceptions\BaseException; use Quantum\Service\QtService; use {{MODULE_NAMESPACE}}\Models\Comment; use {{MODULE_NAMESPACE}}\Models\User; @@ -41,26 +39,27 @@ class CommentService extends QtService private $transformer; /** - * CommentService constructor. * @param CommentTransformer $transformer * @throws ModelException + * @throws BaseException */ public function __construct(CommentTransformer $transformer) { - $this->model = ModelFactory::get(Comment::class); + $this->model = model(Comment::class); $this->transformer = $transformer; } /** * Get comments by post * @param string $postUuid - * @return ModelCollection|Paginator + * @return mixed + * @throws BaseException * @throws ModelException */ public function getCommentsByPost(string $postUuid) { return $this->model - ->joinThrough(ModelFactory::get(User::class)) + ->joinTo(model(User::class)) ->criteria('post_uuid', '=', $postUuid) ->select( 'comments.uuid', diff --git a/src/Module/Templates/DemoWeb/src/Services/PostService.php.tpl b/src/Module/Templates/DemoWeb/src/Services/PostService.php.tpl index c02ab50c3..f1c27ec5b 100644 --- a/src/Module/Templates/DemoWeb/src/Services/PostService.php.tpl +++ b/src/Module/Templates/DemoWeb/src/Services/PostService.php.tpl @@ -52,11 +52,12 @@ class PostService extends QtService /** * @param PostTransformer $transformer + * @throws BaseException * @throws ModelException */ public function __construct(PostTransformer $transformer) { - $this->model = ModelFactory::get(Post::class); + $this->model = model(Post::class); $this->transformer = $transformer; } @@ -65,13 +66,14 @@ class PostService extends QtService * @param int|null $perPage * @param int|null $currentPage * @param string|null $search - * @return Paginator|ModelCollection + * @return mixed + * @throws BaseException * @throws ModelException */ public function getPosts(?int $perPage = null, ?int $currentPage = null, ?string $search = null) { $query = $this->model - ->joinThrough(ModelFactory::get(User::class)) + ->joinTo(model(User::class)) ->select( 'posts.uuid', 'title', @@ -102,12 +104,13 @@ class PostService extends QtService * Get post * @param string $uuid * @return Post + * @throws BaseException * @throws ModelException */ public function getPost(string $uuid): Post { return $this->model - ->joinThrough(ModelFactory::get(User::class)) + ->joinTo(model(User::class)) ->criteria('uuid', '=', $uuid) ->select( 'posts.uuid', @@ -127,12 +130,13 @@ class PostService extends QtService * Get my posts * @param string $userUuid * @return ModelCollection|null + * @throws BaseException * @throws ModelException */ public function getMyPosts(string $userUuid): ?ModelCollection { return $this->model - ->joinThrough(ModelFactory::get(User::class)) + ->joinTo(model(User::class)) ->criteria('user_uuid', '=', $userUuid) ->select( 'posts.uuid', @@ -151,6 +155,7 @@ class PostService extends QtService * Add post * @param array $data * @return Post + * @throws BaseException * @throws ModelException */ public function addPost(array $data): Post @@ -170,6 +175,7 @@ class PostService extends QtService * @param string $uuid * @param array $data * @return Post + * @throws BaseException * @throws ModelException */ public function updatePost(string $uuid, array $data): Post diff --git a/src/Service/Helpers/service.php b/src/Service/Helpers/service.php new file mode 100644 index 000000000..26f9ef4ba --- /dev/null +++ b/src/Service/Helpers/service.php @@ -0,0 +1,34 @@ + + * @copyright Copyright (c) 2018 Softberg LLC (https://softberg.org) + * @link http://quantum.softberg.org/ + * @since 2.9.9 + */ + +use Quantum\Service\Exceptions\ServiceException; +use Quantum\Service\Factories\ServiceFactory; +use Quantum\App\Exceptions\BaseException; +use Quantum\Di\Exceptions\DiException; +use Quantum\Service\QtService; + +/** + * Gets or creates service instance + * @param string $serviceClass + * @param bool $singleton + * @return QtService + * @throws ReflectionException + * @throws BaseException + * @throws DiException + * @throws ServiceException + */ +function service(string $serviceClass, bool $singleton = false): QtService +{ + return $singleton ? ServiceFactory::get($serviceClass) : ServiceFactory::create($serviceClass); +} diff --git a/tests/Unit/Model/Helpers/ModelHelperFunctionsTest.php b/tests/Unit/Model/Helpers/ModelHelperFunctionsTest.php index 3e6cddf82..1e571871e 100644 --- a/tests/Unit/Model/Helpers/ModelHelperFunctionsTest.php +++ b/tests/Unit/Model/Helpers/ModelHelperFunctionsTest.php @@ -11,12 +11,6 @@ class ModelHelperFunctionsTest extends AppTestCase { - - public function setUp(): void - { - parent::setUp(); - } - public function testModelReturnsQtModelInstance() { $model = model(TestUserModel::class); diff --git a/tests/Unit/Service/Helpers/ServiceHelperFunctionTest.php b/tests/Unit/Service/Helpers/ServiceHelperFunctionTest.php new file mode 100644 index 000000000..5ea3b22d0 --- /dev/null +++ b/tests/Unit/Service/Helpers/ServiceHelperFunctionTest.php @@ -0,0 +1,27 @@ +assertInstanceOf(TokenService::class, $service); + + $this->assertInstanceOf(QtService::class, $service); + } + + public function testModelThrowsOnInvalidClass() + { + $this->expectException(ServiceException::class); + + service('NonExistentServiceClass'); + } +} \ No newline at end of file