Skip to content

Commit c57eb89

Browse files
committed
feat(project): add controller
1 parent bbf5bab commit c57eb89

File tree

4 files changed

+163
-2
lines changed

4 files changed

+163
-2
lines changed
+59
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,59 @@
1+
<?php
2+
use Respect\Validation\Validator as DataValidator;
3+
4+
DataValidator::with('CustomValidations', true);
5+
/**
6+
* @api {post} /system/add-project Add project
7+
* @apiVersion 4.11.0
8+
*
9+
* @apiName Add project
10+
*
11+
* @apiGroup System
12+
*
13+
* @apiDescription This path create a new project.
14+
*
15+
* @apiPermission staff3
16+
*
17+
* @apiParam {String} name Name of the new project.
18+
*
19+
* @apiUse NO_PERMISSION
20+
*
21+
* @apiSuccess {Object} data Empty object
22+
*
23+
*/
24+
25+
class AddProjectController extends Controller {
26+
const PATH = '/add-project';
27+
const METHOD = 'POST';
28+
29+
public function validations() {
30+
return [
31+
'permission' => 'staff_3',
32+
'requestData' => [
33+
'name' => [
34+
'validation' => DataValidator::AllOf(
35+
DataValidator::notBlank()->length(LengthConfig::MIN_LENGTH_NAME, LengthConfig::MAX_LENGTH_NAME),
36+
DataValidator::ValidProjectName()
37+
),
38+
'error' => ERRORS::INVALID_NAME
39+
]
40+
]
41+
];
42+
}
43+
44+
public function handler() {
45+
$name = Controller::request('name', true);
46+
47+
$projectInstance = new Project();
48+
49+
$projectInstance->setProperties([
50+
'name' => $name ,
51+
]);
52+
$projectInstance->store();
53+
54+
Log::createLog('ADD_PROJECT', $name);
55+
56+
Response::respondSuccess();
57+
58+
}
59+
}
+57
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,57 @@
1+
<?php
2+
use Respect\Validation\Validator as DataValidator;
3+
4+
5+
/**
6+
* @api {post} /ticket/add-tag Add tag
7+
* @apiVersion 4.11.0
8+
*
9+
* @apiName Add tag
10+
*
11+
* @apiGroup Ticket
12+
*
13+
* @apiDescription This path attaches a new tag to a ticket.
14+
*
15+
* @apiPermission staff1
16+
*
17+
* @apiParam {String} userId The number of the ticket which the tag is going to be attached.
18+
* @apiParam {String} projectId The id of the tag to attach.
19+
*
20+
* @apiUse NO_PERMISSION
21+
* @apiUse INVALID_TICKET
22+
* @apiUse INVALID_TAG
23+
* @apiUse TAG_EXISTS
24+
*
25+
* @apiSuccess {Object} data Empty object
26+
*
27+
*/
28+
29+
class AddTagController extends Controller {
30+
const PATH = '/add-project';
31+
const METHOD = 'POST';
32+
33+
public function validations() {
34+
return [
35+
'permission' => 'staff_1',
36+
'requestData' => [
37+
'userId' => [
38+
'validation' => DataValidator::dataStoreId('user'),
39+
'error' => ERRORS::INVALID_USER
40+
],
41+
'projectId' => [
42+
'validation' => DataValidator::dataStoreId('project'),
43+
'error' => ERRORS::INVALID_USER
44+
]
45+
]
46+
];
47+
}
48+
49+
public function handler() {
50+
51+
$user = User::getDataStore(Controller::request('userId'));
52+
53+
$project = Project::getDataStore(Controller::request('projectId'));
54+
55+
Response::respondSuccess();
56+
}
57+
}

server/data/db_schema.sql

-2
Original file line numberDiff line numberDiff line change
@@ -152,9 +152,7 @@ DROP TABLE IF EXISTS `project`;
152152
/*!40101 SET character_set_client = utf8 */;
153153
CREATE TABLE `project` (
154154
`id` int(11) unsigned NOT NULL AUTO_INCREMENT,
155-
`owners` int(11) unsigned DEFAULT NULL,
156155
`name` varchar(191) COLLATE utf8mb4_unicode_ci DEFAULT NULL,
157-
`private` int(11) unsigned DEFAULT NULL,
158156
PRIMARY KEY (`id`)
159157
) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
160158
/*!40101 SET character_set_client = @saved_cs_client */;

server/models/Project.php

+47
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,47 @@
1+
<?php
2+
use RedBeanPHP\Facade as RedBean;
3+
4+
/**
5+
* @api {OBJECT} Project Project
6+
* @apiVersion 4.11.0
7+
* @apiGroup Data Structures
8+
* @apiParam {Number} id Id of the project.
9+
* @apiParam {String} name Name of the project.
10+
*/
11+
12+
class Project extends DataStore {
13+
const TABLE = 'project';
14+
15+
public static function getProps() {
16+
return [
17+
'name',
18+
'sharedTicketList',
19+
];
20+
}
21+
22+
public function getDefaultProps() {
23+
return [
24+
];
25+
}
26+
27+
public static function getAllProjectNames() {
28+
$projectsList = RedBean::findAll(Project::TABLE);
29+
$projectsNameList = [];
30+
31+
foreach($projectsList as $project) {
32+
$projectsNameList[] = [
33+
'id' => $project->id,
34+
'name' => $project->name
35+
];
36+
}
37+
38+
return $projectsNameList;
39+
}
40+
41+
public function toArray() {
42+
return [
43+
'id' => $this->id,
44+
'name' => $this->name,
45+
];
46+
}
47+
}

0 commit comments

Comments
 (0)