Skip to content

Commit 2dabd95

Browse files
authored
Merge pull request #345 from armanist/331-Comments-Feedback-System-for-demo-module
Creating comments system templated for demo modules
2 parents 60d7ebf + a8d1414 commit 2dabd95

31 files changed

+1038
-68
lines changed
Lines changed: 78 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,78 @@
1+
<?php
2+
3+
/**
4+
* Quantum PHP Framework
5+
*
6+
* An open source software development framework for PHP
7+
*
8+
* @package Quantum
9+
* @author Arman Ag. <arman.ag@softberg.org>
10+
* @copyright Copyright (c) 2018 Softberg LLC (https://softberg.org)
11+
* @link http://quantum.softberg.org/
12+
* @since 2.9.9
13+
*/
14+
15+
namespace {{MODULE_NAMESPACE}}\Controllers;
16+
17+
use Quantum\Service\Factories\ServiceFactory;
18+
use {{MODULE_NAMESPACE}}\Services\CommentService;
19+
use Quantum\Http\Response;
20+
use Quantum\Http\Request;
21+
22+
/**
23+
* Class CommentController
24+
* @package Modules\{{MODULE_NAME}}
25+
*/
26+
class CommentController extends BaseController
27+
{
28+
29+
/**
30+
* @var CommentService
31+
*/
32+
public $commentService;
33+
34+
public function __before()
35+
{
36+
$this->commentService = ServiceFactory::create(CommentService::class);
37+
}
38+
39+
/**
40+
* Action - create comment
41+
* @param Request $request
42+
* @param Response $response
43+
* @param string|null $lang
44+
* @param string $uuid
45+
*/
46+
public function create(Request $request, Response $response, ?string $lang, string $uuid)
47+
{
48+
$data = [
49+
'post_uuid' => $uuid,
50+
'user_uuid' => auth()->user()->uuid,
51+
'content' => trim($request->get('content')),
52+
];
53+
54+
$comment = $this->commentService->addComment($data);
55+
56+
$response->json([
57+
'status' => 'success',
58+
'message' => t('common.created_successfully'),
59+
'data' => $comment
60+
]);
61+
}
62+
63+
/**
64+
* Action - delete comment
65+
* @param Response $response
66+
* @param string|null $lang
67+
* @param string $uuid
68+
*/
69+
public function delete(Response $response, ?string $lang, string $uuid)
70+
{
71+
$this->commentService->deleteComment($uuid);
72+
73+
$response->json([
74+
'status' => 'success',
75+
'message' => t('common.deleted_successfully'),
76+
]);
77+
}
78+
}

src/Module/Templates/DemoApi/src/Controllers/PostController.php.tpl

Lines changed: 14 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -16,8 +16,8 @@ namespace {{MODULE_NAMESPACE}}\Controllers;
1616

1717
use Quantum\Service\Factories\ServiceFactory;
1818
use Quantum\Http\Constants\StatusCode;
19+
use {{MODULE_NAMESPACE}}\Services\CommentService;
1920
use {{MODULE_NAMESPACE}}\Services\PostService;
20-
use Quantum\View\RawParam;
2121
use Quantum\Http\Response;
2222
use Quantum\Http\Request;
2323

@@ -36,7 +36,7 @@ class PostController extends BaseController
3636
* Current page
3737
*/
3838
const CURRENT_PAGE = 1;
39-
39+
4040
/**
4141
* Post service
4242
* @var PostService
@@ -53,17 +53,17 @@ class PostController extends BaseController
5353

5454
/**
5555
* Action - get posts list
56-
* @param Request $request
56+
* @param Request $request
5757
* @param Response $response
5858
*/
5959
public function posts(Request $request, Response $response)
6060
{
6161
$perPage = $request->get('per_page', self::POSTS_PER_PAGE);
6262
$currentPage = $request->get('page', self::CURRENT_PAGE);
6363
$search = trim($request->get('q'));
64-
64+
6565
$paginatedPosts = $this->postService->getPosts($perPage, $currentPage, $search);
66-
66+
6767
$response->json([
6868
'status' => 'success',
6969
'data' => $this->postService->transformData($paginatedPosts->data()->all()),
@@ -95,11 +95,18 @@ class PostController extends BaseController
9595
stop();
9696
}
9797

98-
$rawData = new RawParam(current($this->postService->transformData([$post])));
98+
$postData = current($this->postService->transformData([$post]));
99+
100+
$commentService = ServiceFactory::create(CommentService::class);
101+
$comments = $commentService->getCommentsByPost($postUuid);
102+
103+
$commentsData = $commentService->transformData($comments->all());
104+
105+
$postData['comments'] = $commentsData;
99106

100107
$response->json([
101108
'status' => 'success',
102-
'data' => $rawData->getValue(),
109+
'data' => $postData,
103110
]);
104111
}
105112
}
Lines changed: 53 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,53 @@
1+
<?php
2+
3+
/**
4+
* Quantum PHP Framework
5+
*
6+
* An open source software development framework for PHP
7+
*
8+
* @package Quantum
9+
* @author Arman Ag. <arman.ag@softberg.org>
10+
* @copyright Copyright (c) 2018 Softberg LLC (https://softberg.org)
11+
* @link http://quantum.softberg.org/
12+
* @since 2.9.9
13+
*/
14+
15+
namespace {{MODULE_NAMESPACE}}\Middlewares;
16+
17+
use Quantum\Libraries\Validation\Rule;
18+
use Quantum\Http\Response;
19+
use Quantum\Http\Request;
20+
use Closure;
21+
22+
/**
23+
* Class Comment
24+
* @package Modules\{{MODULE_NAME}}
25+
*/
26+
class Comment extends BaseMiddleware
27+
{
28+
29+
/**
30+
* @param Request $request
31+
* @param Response $response
32+
* @param Closure $next
33+
*/
34+
public function apply(Request $request, Response $response, Closure $next)
35+
{
36+
$this->validateRequest($request, $response);
37+
return $next($request, $response);
38+
}
39+
40+
/**
41+
* @inheritDoc
42+
*/
43+
protected function defineValidationRules(Request $request)
44+
{
45+
$this->validator->setRules([
46+
'content' => [
47+
Rule::required(),
48+
Rule::minLen(2),
49+
Rule::maxLen(100),
50+
],
51+
]);
52+
}
53+
}
Lines changed: 71 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,71 @@
1+
<?php
2+
3+
/**
4+
* Quantum PHP Framework
5+
*
6+
* An open source software development framework for PHP
7+
*
8+
* @package Quantum
9+
* @author Arman Ag. <arman.ag@softberg.org>
10+
* @copyright Copyright (c) 2018 Softberg LLC (https://softberg.org)
11+
* @link http://quantum.softberg.org/
12+
* @since 2.9.9
13+
*/
14+
15+
namespace {{MODULE_NAMESPACE}}\Models;
16+
17+
use Quantum\Model\Traits\SoftDeletes;
18+
use Quantum\Model\QtModel;
19+
20+
/**
21+
* Class Comment
22+
* @package Modules\{{MODULE_NAME}}
23+
*/
24+
class Comment extends QtModel
25+
{
26+
27+
use SoftDeletes;
28+
29+
/**
30+
* ID column of table
31+
* @var string
32+
*/
33+
public $idColumn = 'id';
34+
35+
/**
36+
* The table name
37+
* @var string
38+
*/
39+
public $table = 'comments';
40+
41+
/**
42+
* Model relations configuration
43+
* @return array[]
44+
*/
45+
public function relations(): array
46+
{
47+
return [
48+
Post::class => [
49+
'foreign_key' => 'post_uuid',
50+
'local_key' => 'uuid',
51+
],
52+
User::class => [
53+
'foreign_key' => 'user_uuid',
54+
'local_key' => 'uuid',
55+
]
56+
];
57+
}
58+
59+
/**
60+
* Fillable properties
61+
* @var array
62+
*/
63+
public $fillable = [
64+
'uuid',
65+
'post_uuid',
66+
'user_uuid',
67+
'content',
68+
'created_at',
69+
'updated_at'
70+
];
71+
}

src/Module/Templates/DemoApi/src/Models/Post.php.tpl

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@
99
* @author Arman Ag. <arman.ag@softberg.org>
1010
* @copyright Copyright (c) 2018 Softberg LLC (https://softberg.org)
1111
* @link http://quantum.softberg.org/
12-
* @since 2.9.8
12+
* @since 2.9.9
1313
*/
1414

1515
namespace {{MODULE_NAMESPACE}}\Models;
@@ -62,6 +62,7 @@ class Post extends QtModel
6262
'title',
6363
'content',
6464
'image',
65-
'updated_at'
65+
'created_at',
66+
'updated_at',
6667
];
6768
}

src/Module/Templates/DemoApi/src/Models/User.php.tpl

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -55,5 +55,7 @@ class User extends QtModel
5555
'otp',
5656
'otp_expires',
5757
'otp_token',
58+
'created_at',
59+
'updated_at',
5860
];
5961
}

src/Module/Templates/DemoApi/src/Services/AuthService.php.tpl

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -94,6 +94,9 @@ class AuthService extends QtService implements AuthServiceInterface
9494
*/
9595
public function add(array $data): AuthUser
9696
{
97+
$data['uuid'] = $data['uuid'] ?? uuid_ordered();
98+
$data['created_at'] = date('Y-m-d H:i:s');
99+
97100
$this->createUserDirectory($data['uuid']);
98101
99102
$user = $this->model->create();
@@ -118,6 +121,8 @@ class AuthService extends QtService implements AuthServiceInterface
118121
return null;
119122
}
120123

124+
$data['updated_at'] = date('Y-m-d H:i:s');
125+
121126
$user->fillObjectProps($data);
122127
$user->save();
123128

@@ -127,7 +132,7 @@ class AuthService extends QtService implements AuthServiceInterface
127132
/**
128133
* Delete users table
129134
*/
130-
public function deleteTable()
135+
public function deleteAllUsers()
131136
{
132137
$this->model->deleteTable();
133138
}

0 commit comments

Comments
 (0)