From 3a497bb80e5b09d3b76d7d09be7630f0f2e1f144 Mon Sep 17 00:00:00 2001
From: Guillaume Heurtier <guillaume.heurtier@maarch.org>
Date: Fri, 14 Aug 2020 16:34:06 +0200
Subject: [PATCH] FEAT #14537 TIME 0:20 refactor registered mail sql

---
 migration/20.10/2010.sql                      | 32 ++++++++---------
 rest/index.php                                |  2 +-
 sql/structure.sql                             | 36 +++++++++----------
 .../RegisteredNumberRangeController.php       | 10 ++++--
 .../models/IssuingSiteEntitiesModel.php       |  6 ++--
 .../models/IssuingSiteModel.php               | 12 +++----
 .../models/RegisteredNumberRangeModel.php     | 12 +++----
 .../registered-mail.component.ts              |  2 +-
 8 files changed, 58 insertions(+), 54 deletions(-)

diff --git a/migration/20.10/2010.sql b/migration/20.10/2010.sql
index 89473782885..02fcc953004 100755
--- a/migration/20.10/2010.sql
+++ b/migration/20.10/2010.sql
@@ -189,8 +189,8 @@ ALTER TABLE templates ADD COLUMN subject character varying(255);
 UPDATE groupbasket SET list_event_data = '{"canUpdateDocuments":true}' WHERE list_event_data->'canUpdateDocument' = true;
 
 /* REGISTERED MAIL */
-DROP TABLE IF EXISTS issuing_sites;
-CREATE TABLE IF NOT EXISTS issuing_sites (
+DROP TABLE IF EXISTS registered_mail_issuing_sites;
+CREATE TABLE IF NOT EXISTS registered_mail_issuing_sites (
    id SERIAL NOT NULL,
    label CHARACTER VARYING(256) NOT NULL,
    post_office_label CHARACTER VARYING(256),
@@ -202,28 +202,28 @@ CREATE TABLE IF NOT EXISTS issuing_sites (
    address_postcode CHARACTER VARYING(256),
    address_town CHARACTER VARYING(256),
    address_country CHARACTER VARYING(256),
-   CONSTRAINT issuing_sites_pkey PRIMARY KEY (id)
+   CONSTRAINT registered_mail_issuing_sites_pkey PRIMARY KEY (id)
 );
-DROP TABLE IF EXISTS issuing_sites_entities;
-CREATE TABLE IF NOT EXISTS issuing_sites_entities (
+DROP TABLE IF EXISTS registered_mail_issuing_sites_entities;
+CREATE TABLE IF NOT EXISTS registered_mail_issuing_sites_entities (
    id SERIAL NOT NULL,
    site_id INTEGER NOT NULL,
    entity_id INTEGER NOT NULL,
-   CONSTRAINT issuing_sites_entities_pkey PRIMARY KEY (id),
-   CONSTRAINT issuing_sites_entities_unique_key UNIQUE (site_id, entity_id)
+   CONSTRAINT registered_mail_issuing_sites_entities_pkey PRIMARY KEY (id),
+   CONSTRAINT registered_mail_issuing_sites_entities_unique_key UNIQUE (site_id, entity_id)
 );
 
-DROP TABLE IF EXISTS registered_number_range;
-CREATE TABLE IF NOT EXISTS registered_number_range (
+DROP TABLE IF EXISTS registered_mail_number_range;
+CREATE TABLE IF NOT EXISTS registered_mail_number_range (
     id SERIAL NOT NULL,
     type CHARACTER VARYING(15) NOT NULL,
-    tracking_account_number CHARACTER VARYING(256),
-    range_start INTEGER,
-    range_end INTEGER,
-    creator INTEGER,
-    created timestamp without time zone DEFAULT CURRENT_TIMESTAMP,
-    site_id INTEGER,
-    status CHARACTER VARYING(10),
+    tracking_account_number CHARACTER VARYING(256) NOT NULL,
+    range_start INTEGER NOT NULL,
+    range_end INTEGER NOT NULL,
+    creator INTEGER NOT NULL,
+    creation_date timestamp without time zone DEFAULT CURRENT_TIMESTAMP NOT NULL,
+    site_id INTEGER NOT NULL,
+    status CHARACTER VARYING(10) NOT NULL,
     current_number INTEGER,
     CONSTRAINT registered_number_range_pkey PRIMARY KEY (id),
     CONSTRAINT registered_number_range_unique_key UNIQUE (tracking_account_number)
diff --git a/rest/index.php b/rest/index.php
index 1632bd3b452..7cb45b1cf58 100755
--- a/rest/index.php
+++ b/rest/index.php
@@ -626,7 +626,7 @@ $app->get('/registeredMail/ranges/{id}', \RegisteredMail\controllers\RegisteredN
 $app->post('/registeredMail/ranges', \RegisteredMail\controllers\RegisteredNumberRangeController::class . ':create');
 $app->put('/registeredMail/ranges/{id}', \RegisteredMail\controllers\RegisteredNumberRangeController::class . ':update');
 $app->delete('/registeredMail/ranges/{id}', \RegisteredMail\controllers\RegisteredNumberRangeController::class . ':delete');
-$app->get('/registeredMail/ranges/last/type/{type}', \RegisteredMail\controllers\RegisteredNumberRangeController::class . ':getLastNumberByType');
+$app->get('/registeredMail/ranges/type/{type}/last', \RegisteredMail\controllers\RegisteredNumberRangeController::class . ':getLastNumberByType');
 $app->get('/registeredMail/sites/type/{type}', \RegisteredMail\controllers\IssuingSiteController::class . ':getByType');
 
 $app->get('/registeredMail/countries', \RegisteredMail\controllers\RegisteredMailController::class . ':getCountries');
diff --git a/sql/structure.sql b/sql/structure.sql
index 59b710cd7b6..34694b89173 100755
--- a/sql/structure.sql
+++ b/sql/structure.sql
@@ -1407,7 +1407,7 @@ CREATE TABLE users_followed_resources
 )
 WITH (OIDS=FALSE);
 
-CREATE TABLE IF NOT EXISTS issuing_sites
+CREATE TABLE IF NOT EXISTS registered_mail_issuing_sites
 (
     id                  SERIAL                 NOT NULL,
     label               CHARACTER VARYING(256) NOT NULL,
@@ -1420,29 +1420,29 @@ CREATE TABLE IF NOT EXISTS issuing_sites
     address_postcode    CHARACTER VARYING(256),
     address_town        CHARACTER VARYING(256),
     address_country     CHARACTER VARYING(256),
-    CONSTRAINT issuing_sites_pkey PRIMARY KEY (id)
+    CONSTRAINT registered_mail_issuing_sites_pkey PRIMARY KEY (id)
 );
-CREATE TABLE IF NOT EXISTS issuing_sites_entities
+CREATE TABLE IF NOT EXISTS registered_mail_issuing_sites_entities
 (
     id        SERIAL  NOT NULL,
     site_id   INTEGER NOT NULL,
     entity_id INTEGER NOT NULL,
-    CONSTRAINT issuing_sites_entities_pkey PRIMARY KEY (id),
-    CONSTRAINT issuing_sites_entities_unique_key UNIQUE (site_id, entity_id)
+    CONSTRAINT registered_mail_issuing_sites_entities_pkey PRIMARY KEY (id),
+    CONSTRAINT registered_mail_issuing_sites_entities_unique_key UNIQUE (site_id, entity_id)
 );
-CREATE TABLE IF NOT EXISTS registered_number_range (
-   id SERIAL NOT NULL,
-   type CHARACTER VARYING(15) NOT NULL,
-   tracking_account_number CHARACTER VARYING(256),
-   range_start INTEGER,
-   range_end INTEGER,
-   creator INTEGER,
-   created timestamp without time zone DEFAULT CURRENT_TIMESTAMP,
-   site_id INTEGER,
-   status CHARACTER VARYING(10),
-   current_number INTEGER,
-   CONSTRAINT registered_number_range_pkey PRIMARY KEY (id),
-   CONSTRAINT registered_number_range_unique_key UNIQUE (tracking_account_number)
+CREATE TABLE IF NOT EXISTS registered_mail_number_range (
+    id SERIAL NOT NULL,
+    type CHARACTER VARYING(15) NOT NULL,
+    tracking_account_number CHARACTER VARYING(256) NOT NULL,
+    range_start INTEGER NOT NULL,
+    range_end INTEGER NOT NULL,
+    creator INTEGER NOT NULL,
+    creation_date timestamp without time zone DEFAULT CURRENT_TIMESTAMP NOT NULL,
+    site_id INTEGER NOT NULL,
+    status CHARACTER VARYING(10) NOT NULL,
+    current_number INTEGER,
+    CONSTRAINT registered_mail_number_range_pkey PRIMARY KEY (id),
+    CONSTRAINT registered_mail_number_range_unique_key UNIQUE (tracking_account_number)
 );
 
 CREATE TABLE IF NOT EXISTS registered_mail_resources (
diff --git a/src/app/registeredMail/controllers/RegisteredNumberRangeController.php b/src/app/registeredMail/controllers/RegisteredNumberRangeController.php
index 1ac3f845b6f..c7ff9b23b77 100644
--- a/src/app/registeredMail/controllers/RegisteredNumberRangeController.php
+++ b/src/app/registeredMail/controllers/RegisteredNumberRangeController.php
@@ -46,7 +46,7 @@ class RegisteredNumberRangeController
                 'rangeStart'            => $range['range_start'],
                 'rangeEnd'              => $range['range_end'],
                 'creator'               => $range['creator'],
-                'created'               => $range['created'],
+                'creationDate'          => $range['creation_date'],
                 'status'                => $range['status'],
                 'customerAccountNumber' => $site['account_number'],
                 'currentNumber'         => $range['current_number'],
@@ -86,7 +86,7 @@ class RegisteredNumberRangeController
             'rangeStart'            => $range['range_start'],
             'rangeEnd'              => $range['range_end'],
             'creator'               => $range['creator'],
-            'created'               => $range['created'],
+            'creationDate'          => $range['creation_date'],
             'status'                => $range['status'],
             'customerAccountNumber' => $site['account_number'],
             'currentNumber'         => $range['current_number'],
@@ -201,6 +201,9 @@ class RegisteredNumberRangeController
         if (!Validator::intVal()->notEmpty()->validate($body['siteId'])) {
             return $response->withStatus(400)->withJson(['errors' => 'Body siteId is empty or not an integer']);
         }
+        if ($body['rangeStart'] >= $body['rangeEnd']) {
+            return $response->withStatus(400)->withJson(['errors' => 'Body rangeStart cannot be larger than rangeEnd']);
+        }
 
         $site = IssuingSiteModel::getById(['id' => $body['siteId']]);
         if (empty($site)) {
@@ -329,7 +332,8 @@ class RegisteredNumberRangeController
             'select'  => ['range_end'],
             'where'   => ['type = ?', 'status in (?)'],
             'data'    => [$args['type'], ['OK', 'SPD']],
-            'orderBy' => ['range_end desc']
+            'orderBy' => ['range_end desc'],
+            'limit'   => 1
         ]);
 
         if (empty($range)) {
diff --git a/src/app/registeredMail/models/IssuingSiteEntitiesModel.php b/src/app/registeredMail/models/IssuingSiteEntitiesModel.php
index 5710274b93f..9b2ab9b71ee 100644
--- a/src/app/registeredMail/models/IssuingSiteEntitiesModel.php
+++ b/src/app/registeredMail/models/IssuingSiteEntitiesModel.php
@@ -26,7 +26,7 @@ class IssuingSiteEntitiesModel
 
         return DatabaseModel::select([
             'select'    => $args['select'],
-            'table'     => ['issuing_sites_entities'],
+            'table'     => ['registered_mail_issuing_sites_entities'],
             'where'     => empty($args['where']) ? [] : $args['where'],
             'data'      => empty($args['data']) ? [] : $args['data'],
             'order_by'  => empty($args['orderBy']) ? [] : $args['orderBy'],
@@ -41,7 +41,7 @@ class IssuingSiteEntitiesModel
         ValidatorModel::intVal($args, ['siteId', 'entityId']);
 
         DatabaseModel::insert([
-            'table'         => 'issuing_sites_entities',
+            'table'         => 'registered_mail_issuing_sites_entities',
             'columnsValues' => [
                 'site_id'   => $args['siteId'],
                 'entity_id' => $args['entityId'],
@@ -57,7 +57,7 @@ class IssuingSiteEntitiesModel
         ValidatorModel::arrayType($args, ['where', 'data']);
 
         DatabaseModel::delete([
-            'table' => 'issuing_sites_entities',
+            'table' => 'registered_mail_issuing_sites_entities',
             'where' => $args['where'],
             'data'  => $args['data']
         ]);
diff --git a/src/app/registeredMail/models/IssuingSiteModel.php b/src/app/registeredMail/models/IssuingSiteModel.php
index f5554ac9191..2b1278ea1c2 100644
--- a/src/app/registeredMail/models/IssuingSiteModel.php
+++ b/src/app/registeredMail/models/IssuingSiteModel.php
@@ -24,7 +24,7 @@ class IssuingSiteModel
 
         return DatabaseModel::select([
             'select'   => empty($args['select']) ? ['*'] : $args['select'],
-            'table'    => ['issuing_sites'],
+            'table'    => ['registered_mail_issuing_sites'],
             'where'    => empty($args['where']) ? [] : $args['where'],
             'data'     => empty($args['data']) ? [] : $args['data'],
             'order_by' => empty($args['orderBy']) ? [] : $args['orderBy'],
@@ -40,7 +40,7 @@ class IssuingSiteModel
 
         $site = DatabaseModel::select([
             'select' => empty($args['select']) ? ['*'] : $args['select'],
-            'table'  => ['issuing_sites'],
+            'table'  => ['registered_mail_issuing_sites'],
             'where'  => ['id = ?'],
             'data'   => [$args['id']]
         ]);
@@ -57,10 +57,10 @@ class IssuingSiteModel
         ValidatorModel::notEmpty($args, ['label']);
         ValidatorModel::stringType($args, ['label']);
 
-        $nextSequenceId = DatabaseModel::getNextSequenceValue(['sequenceId' => 'issuing_sites_id_seq']);
+        $nextSequenceId = DatabaseModel::getNextSequenceValue(['sequenceId' => 'registered_mail_issuing_sites_id_seq']);
 
         DatabaseModel::insert([
-            'table'         => 'issuing_sites',
+            'table'         => 'registered_mail_issuing_sites',
             'columnsValues' => [
                 'id'                  => $nextSequenceId,
                 'label'               => $args['label'],
@@ -85,7 +85,7 @@ class IssuingSiteModel
         ValidatorModel::arrayType($args, ['set', 'where', 'data']);
 
         DatabaseModel::update([
-            'table' => 'issuing_sites',
+            'table' => 'registered_mail_issuing_sites',
             'set'   => empty($args['set']) ? [] : $args['set'],
             'where' => $args['where'],
             'data'  => empty($args['data']) ? [] : $args['data']
@@ -100,7 +100,7 @@ class IssuingSiteModel
         ValidatorModel::arrayType($args, ['where', 'data']);
 
         DatabaseModel::delete([
-            'table' => 'issuing_sites',
+            'table' => 'registered_mail_issuing_sites',
             'where' => $args['where'],
             'data'  => $args['data']
         ]);
diff --git a/src/app/registeredMail/models/RegisteredNumberRangeModel.php b/src/app/registeredMail/models/RegisteredNumberRangeModel.php
index 5ab2ff28105..c237a7b289d 100644
--- a/src/app/registeredMail/models/RegisteredNumberRangeModel.php
+++ b/src/app/registeredMail/models/RegisteredNumberRangeModel.php
@@ -24,7 +24,7 @@ class RegisteredNumberRangeModel
 
         return DatabaseModel::select([
             'select'   => empty($args['select']) ? ['*'] : $args['select'],
-            'table'    => ['registered_number_range'],
+            'table'    => ['registered_mail_number_range'],
             'where'    => empty($args['where']) ? [] : $args['where'],
             'data'     => empty($args['data']) ? [] : $args['data'],
             'order_by' => empty($args['orderBy']) ? [] : $args['orderBy'],
@@ -40,7 +40,7 @@ class RegisteredNumberRangeModel
 
         $site = DatabaseModel::select([
             'select' => empty($args['select']) ? ['*'] : $args['select'],
-            'table'  => ['registered_number_range'],
+            'table'  => ['registered_mail_number_range'],
             'where'  => ['id = ?'],
             'data'   => [$args['id']]
         ]);
@@ -58,10 +58,10 @@ class RegisteredNumberRangeModel
         ValidatorModel::stringType($args, ['type', 'status']);
         ValidatorModel::intVal($args, ['rangeStart', 'rangeEnd', 'siteId', 'currentNumber']);
 
-        $nextSequenceId = DatabaseModel::getNextSequenceValue(['sequenceId' => 'registered_number_range_id_seq']);
+        $nextSequenceId = DatabaseModel::getNextSequenceValue(['sequenceId' => 'registered_mail_number_range_id_seq']);
 
         DatabaseModel::insert([
-            'table'         => 'registered_number_range',
+            'table'         => 'registered_mail_number_range',
             'columnsValues' => [
                 'id'                      => $nextSequenceId,
                 'type'                    => $args['type'],
@@ -84,7 +84,7 @@ class RegisteredNumberRangeModel
         ValidatorModel::arrayType($args, ['set', 'where', 'data']);
 
         DatabaseModel::update([
-            'table' => 'registered_number_range',
+            'table' => 'registered_mail_number_range',
             'set'   => empty($args['set']) ? [] : $args['set'],
             'where' => $args['where'],
             'data'  => empty($args['data']) ? [] : $args['data']
@@ -99,7 +99,7 @@ class RegisteredNumberRangeModel
         ValidatorModel::arrayType($args, ['where', 'data']);
 
         DatabaseModel::delete([
-            'table' => 'registered_number_range',
+            'table' => 'registered_mail_number_range',
             'where' => $args['where'],
             'data'  => $args['data']
         ]);
diff --git a/src/frontend/app/administration/registered-mail/registered-mail.component.ts b/src/frontend/app/administration/registered-mail/registered-mail.component.ts
index 0aec4797cfd..b30fd060a79 100644
--- a/src/frontend/app/administration/registered-mail/registered-mail.component.ts
+++ b/src/frontend/app/administration/registered-mail/registered-mail.component.ts
@@ -162,7 +162,7 @@ export class RegisteredMailComponent implements OnInit {
     }
 
     getMinRange() {
-        this.http.get(`../rest/registeredMail/ranges/last/type/${this.adminFormGroup.controls['registeredMailType'].value}`).pipe(
+        this.http.get(`../rest/registeredMail/ranges/type/${this.adminFormGroup.controls['registeredMailType'].value}/last`).pipe(
             tap((data: any) => {
                 if (data.lastNumber === 1) {
                     this.minRange = data.lastNumber;
-- 
GitLab