Test Failed
Push — master ( b3c371...4e1273 )
by Julien
06:25
created

Column::getColumnDefinitions()   A

Complexity

Conditions 1
Paths 1

Size

Total Lines 2
Code Lines 1

Duplication

Lines 0
Ratio 0 %

Code Coverage

Tests 0
CRAP Score 2

Importance

Changes 0
Metric Value
cc 1
eloc 1
c 0
b 0
f 0
nc 1
nop 0
dl 0
loc 2
ccs 0
cts 2
cp 0
crap 2
rs 10
1
<?php
2
/**
3
 * This file is part of the Zemit Framework.
4
 *
5
 * (c) Zemit Team <[email protected]>
6
 *
7
 * For the full copyright and license information, please view the LICENSE.txt
8
 * file that was distributed with this source code.
9
 */
10
11
declare(strict_types=1);
12
13
namespace Zemit\Models;
14
15
use Zemit\Models\Abstracts\ColumnAbstract;
16
use Zemit\Models\Enums\ColumnType;
17
use Zemit\Models\Interfaces\ColumnInterface;
18
use Phalcon\Db\Column as DbColumn;
19
20
/**
21
 * Class Column
22
 *
23
 * This class represents a Column object.
24
 * It extends the ColumnAbstract class and implements the ColumnInterface.
25
 */
26
class Column extends ColumnAbstract implements ColumnInterface
27
{
28 1
    public function initialize(): void
29
    {
30 1
        parent::initialize();
31 1
        $this->addDefaultRelationships();
32
    }
33
34
    public function validation(): bool
35
    {
36
        $validator = $this->genericValidation();
37
        $this->addDefaultValidations($validator);
38
        return $this->validate($validator);
39
    }
40
    
41
    public function getColumnDefinitions(): array {
42
        return self::getColumnDefinitionsByType($this->getType());
43
    }
44
    
45
    public static function getColumnDefinitionsByType(string $type): array {
46
        return match ($type) {
47
            // Map cases to Phalcon\Db\Column constants with default sizes
48
            ColumnType::LINK_TO_ANOTHER_RECORD,
49
            ColumnType::USER,
50
            ColumnType::CREATED_BY,
51
            ColumnType::LAST_MODIFIED_BY,
52
            ColumnType::NUMBER,
53
            ColumnType::RATING,
54
            ColumnType::COUNT => ['type' => DbColumn::TYPE_INTEGER, 'size' => 11],
55
            
56
            ColumnType::SINGLE_LINE_TEXT,
57
            ColumnType::EMAIL,
58
            ColumnType::URL,
59
            ColumnType::PHONE_NUMBER,
60
            ColumnType::BARCODE,
61
            ColumnType::BUTTON => ['type' => DbColumn::TYPE_VARCHAR, 'size' => 255],
62
            
63
            ColumnType::LONG_TEXT => ['type' => DbColumn::TYPE_TEXT, 'size' => null], // TEXT type doesn't require size
64
            ColumnType::ATTACHMENT => ['type' => DbColumn::TYPE_BLOB, 'size' => null], // BLOB type doesn't require size
65
            ColumnType::CHECKBOX => ['type' => DbColumn::TYPE_BOOLEAN, 'size' => 1],
66
            
67
            ColumnType::MULTIPLE_SELECT,
68
            ColumnType::SINGLE_SELECT => ['type' => DbColumn::TYPE_ENUM, 'size' => null], // ENUM size varies depending on values
69
            
70
            ColumnType::DATE,
71
            ColumnType::CREATED_TIME,
72
            ColumnType::LAST_MODIFIED_TIME => ['type' => DbColumn::TYPE_DATETIME, 'size' => null], // DATETIME doesn't require size
73
            
74
            ColumnType::CURRENCY,
75
            ColumnType::PERCENT,
76
            ColumnType::FORMULA,
77
            ColumnType::ROLLUP => ['type' => DbColumn::TYPE_DECIMAL, 'size' => '10,2'], // Decimal with precision
78
            
79
            ColumnType::DURATION => ['type' => DbColumn::TYPE_TIME, 'size' => null], // TIME type doesn't require size
80
            ColumnType::AUTONUMBER => ['type' => DbColumn::TYPE_BIGINTEGER, 'size' => 20],
81
            
82
            default => ['type' => DbColumn::TYPE_VARCHAR, 'size' => 255], // Default MySQL type and size if unspecified
83
        };
84
    }
85
}
86