Completed
Push — master ( 8dc01e...5d6ae3 )
by Thomas
09:59
created

ApiGenerator::generatePagedMeta()   A

Complexity

Conditions 3
Paths 3

Size

Total Lines 11
Code Lines 7

Duplication

Lines 0
Ratio 0 %

Importance

Changes 0
Metric Value
dl 0
loc 11
rs 9.4285
c 0
b 0
f 0
cc 3
eloc 7
nc 3
nop 1
1
<?php
2
namespace keeko\tools\generator\api;
3
4
use keeko\tools\generator\AbstractGenerator;
5
use gossi\swagger\Swagger;
6
use keeko\tools\services\CommandService;
7
use gossi\swagger\collections\Definitions;
8
9
class ApiGenerator extends AbstractGenerator {
10
11
	private $operationGenerator;
12
13
	private $definitionGenerator;
14
15
	private $needsPaginationDefinition = false;
16
17
	private $needsResourceIdentifier = false;
18
19
	public function __construct(CommandService $service) {
20
		parent::__construct($service);
21
		$this->operationGenerator = new ApiOperationGenerator($service);
22
		$this->definitionGenerator = new ApiDefinitionGenerator($service);
23
	}
24
25
	public function generatePaths(Swagger $swagger) {
26
		$paths = $swagger->getPaths();
27
28
		foreach ($this->packageService->getModule()->getActionNames() as $name) {
29
			$this->operationGenerator->generateOperation($paths, $name);
30
		}
31
	}
32
33
	public function generateDefinitions(Swagger $swagger) {
34
		$definitions = $swagger->getDefinitions();
35
36
		foreach ($this->modelService->getModels() as $model) {
37
			$this->definitionGenerator->generate($definitions, $model);
38
			$this->needsPaginationDefinition = $this->needsPaginationDefinition || $this->definitionGenerator->needsPaginationDefinition();
39
			$this->needsResourceIdentifier = $this->needsResourceIdentifier || $this->definitionGenerator->needsResourceIdentifier();
40
		}
41
42
		// general definitions
43
		$this->generateErrorDefinition($definitions);
44
		$this->generatePaginationDefinitions($definitions);
45
		$this->generateResourceIdentifier($definitions);
46
	}
47
48
	protected function generateErrorDefinition(Definitions $definitions) {
49
		$definitions->get('Errors')->setType('array')->getItems()->setRef('#/definitions/Error');
50
51
		$error = $definitions->get('Error')->setType('object')->getProperties();
52
		$error->get('id')->setType('string');
53
		$error->get('status')->setType('string');
54
		$error->get('code')->setType('string');
55
		$error->get('title')->setType('string');
56
		$error->get('detail')->setType('string');
57
		$error->get('meta')->setType('object');
58
	}
59
60
	protected function generatePaginationDefinitions(Definitions $definitions) {
61
		if ($this->needsPaginationDefinition) {
62
			$meta = $definitions->get('PaginationMeta')->setType('object')->getProperties();
63
			$meta->get('total')->setType('integer');
64
65
			$links = $definitions->get('PaginationLinks')->setType('object')->getProperties();
66
			$names = ['first', 'next', 'previous', 'last'];
67
			foreach ($names as $name) {
68
				$links->get($name)->setType('string');
69
			}
70
		}
71
	}
72
73
	protected function generateResourceIdentifier(Definitions $definitions) {
74
		if ($this->needsResourceIdentifier) {
75
			$props = $definitions->get('ResourceIdentifier')->setType('object')->getProperties();
76
			$props->get('id')->setType('string');
77
			$props->get('type')->setType('string');
78
		}
79
	}
80
}