From 8ff262456bc79d7b0980d78cbb8450af04c0a3e8 Mon Sep 17 00:00:00 2001 From: Yuri Kuznetsov Date: Fri, 9 Jul 2021 10:48:05 +0300 Subject: [PATCH] record id generator --- .../Espo/Core/Binding/DefaultBinding.php | 7 +++- .../Espo/Core/ORM/Repositories/RDB.php | 18 ++++++--- .../Espo/Core/Repositories/Database.php | 10 +++-- .../Utils/Id/DefaultRecordIdGenerator.php | 40 +++++++++++++++++++ .../Espo/Core/Utils/Id/RecordIdGenerator.php | 35 ++++++++++++++++ 5 files changed, 100 insertions(+), 10 deletions(-) create mode 100644 application/Espo/Core/Utils/Id/DefaultRecordIdGenerator.php create mode 100644 application/Espo/Core/Utils/Id/RecordIdGenerator.php diff --git a/application/Espo/Core/Binding/DefaultBinding.php b/application/Espo/Core/Binding/DefaultBinding.php index 0d2cd92459..026d039518 100644 --- a/application/Espo/Core/Binding/DefaultBinding.php +++ b/application/Espo/Core/Binding/DefaultBinding.php @@ -208,9 +208,14 @@ class DefaultBinding implements BindingProcessor 'Espo\\Core\\WebSocket\\ZeroMQSubscriber' ); - $binder->bindImplementation( + $binder->bindImplementation( 'Espo\\Core\\Acl\\Table\\TableFactory', 'Espo\\Core\\Acl\\Table\\DefaultTableFactory' ); + + $binder->bindImplementation( + 'Espo\\Core\\Utils\\Id\\RecordIdGenerator', + 'Espo\\Core\\Utils\\Id\\DefaultRecordIdGenerator' + ); } } diff --git a/application/Espo/Core/ORM/Repositories/RDB.php b/application/Espo/Core/ORM/Repositories/RDB.php index 31a8251267..4041d9df9f 100644 --- a/application/Espo/Core/ORM/Repositories/RDB.php +++ b/application/Espo/Core/ORM/Repositories/RDB.php @@ -32,16 +32,13 @@ namespace Espo\Core\ORM\Repositories; use Espo\ORM\EntityManager; use Espo\ORM\EntityFactory; -use Espo\ORM\Entity; - use Espo\Core\Interfaces\Injectable; use Espo\Core\{ Utils\Metadata, - Utils\Config, - Utils\FieldManagerUtil, HookManager, ApplicationState, + Utils\Id\RecordIdGenerator, }; /** @deprecated */ @@ -98,9 +95,18 @@ class RDB extends \Espo\Core\Repositories\Database implements Injectable EntityFactory $entityFactory, Metadata $metadata, HookManager $hookManager, - ApplicationState $applicationState + ApplicationState $applicationState, + RecordIdGenerator $recordIdGenerator ) { - parent::__construct($entityType, $entityManager, $entityFactory, $metadata, $hookManager, $applicationState); + parent::__construct( + $entityType, + $entityManager, + $entityFactory, + $metadata, + $hookManager, + $applicationState, + $recordIdGenerator + ); $this->init(); } diff --git a/application/Espo/Core/Repositories/Database.php b/application/Espo/Core/Repositories/Database.php index 6b27f5196c..9fd252c56b 100644 --- a/application/Espo/Core/Repositories/Database.php +++ b/application/Espo/Core/Repositories/Database.php @@ -42,10 +42,10 @@ use Espo\Core\ORM\{ use Espo\Core\{ Utils\Metadata, - Utils\Util, HookManager, ApplicationState, Utils\DateTime as DateTimeUtil, + Utils\Id\RecordIdGenerator, }; class Database extends RDBRepository @@ -72,17 +72,21 @@ class Database extends RDBRepository protected $applicationState; + protected $recordIdGenerator; + public function __construct( string $entityType, EntityManager $entityManager, EntityFactory $entityFactory, Metadata $metadata, HookManager $hookManager, - ApplicationState $applicationState + ApplicationState $applicationState, + RecordIdGenerator $recordIdGenerator ) { $this->metadata = $metadata; $this->hookManager = $hookManager; $this->applicationState = $applicationState; + $this->recordIdGenerator = $recordIdGenerator; $hookMediator = null; @@ -115,7 +119,7 @@ class Database extends RDBRepository !$entity->has('id') && !$entity->getAttributeParam('id', 'autoincrement') ) { - $entity->set('id', Util::generateId()); + $entity->set('id', $this->recordIdGenerator->generate()); } if (empty($options['skipAll'])) { diff --git a/application/Espo/Core/Utils/Id/DefaultRecordIdGenerator.php b/application/Espo/Core/Utils/Id/DefaultRecordIdGenerator.php new file mode 100644 index 0000000000..51735d9340 --- /dev/null +++ b/application/Espo/Core/Utils/Id/DefaultRecordIdGenerator.php @@ -0,0 +1,40 @@ +