Skip to content

Commit

Permalink
Added migration status events.
Browse files Browse the repository at this point in the history
  • Loading branch information
Christopher Lorke committed Oct 14, 2018
1 parent 4d20000 commit 0024d5c
Show file tree
Hide file tree
Showing 6 changed files with 128 additions and 20 deletions.
17 changes: 15 additions & 2 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -64,16 +64,29 @@ The package is registered through the package discovery of laravel and Composer.
- deleteByQuery
- updateByQuery

### Start migration
### Commands

#### Start migration
Orchestra migrations
>php artisan triadev:elasticsearch:migrate:start VERSIONS
Example:
>php artisan triadev:elasticsearch:migrate:start migration1,migration2,migration3
### Show migrations
#### Show migrations
>php artisan triadev:elasticsearch:migration:show
### Events
[Documentation: Laravel Events](https://laravel.com/docs/5.7/events)

Namespace: Triadev\EsMigration\Business\Events

| Event | Status |
|:-------------:|:-----:|
| MigrationRunning | Migration is running |
| MigrationError | Migration is failed |
| MigrationDone | Migration is done |

## Roadmap
- create/delete templates
- shrink index
Expand Down
22 changes: 21 additions & 1 deletion src/Business/Events/MigrationDone.php
Original file line number Diff line number Diff line change
@@ -1,10 +1,30 @@
<?php
namespace Triadev\EsMigration\Business\Events;

use Illuminate\Queue\SerializesModels;
use Triadev\EsMigration\Models\Entity\ElasticsearchMigration;

class MigrationDone
{
public function __construct()
use SerializesModels;

/** @var ElasticsearchMigration */
private $migration;

/**
* MigrationDone constructor.
* @param ElasticsearchMigration $migration
*/
public function __construct(ElasticsearchMigration $migration)
{
$this->migration = $migration;
}

/**
* @return ElasticsearchMigration
*/
public function getMigration(): ElasticsearchMigration
{
return $this->migration;
}
}
22 changes: 21 additions & 1 deletion src/Business/Events/MigrationError.php
Original file line number Diff line number Diff line change
@@ -1,10 +1,30 @@
<?php
namespace Triadev\EsMigration\Business\Events;

use Illuminate\Queue\SerializesModels;
use Triadev\EsMigration\Models\Entity\ElasticsearchMigration;

class MigrationError
{
public function __construct()
use SerializesModels;

/** @var ElasticsearchMigration */
private $migration;

/**
* MigrationError constructor.
* @param ElasticsearchMigration $migration
*/
public function __construct(ElasticsearchMigration $migration)
{
$this->migration = $migration;
}

/**
* @return ElasticsearchMigration
*/
public function getMigration(): ElasticsearchMigration
{
return $this->migration;
}
}
22 changes: 21 additions & 1 deletion src/Business/Events/MigrationRunning.php
Original file line number Diff line number Diff line change
@@ -1,10 +1,30 @@
<?php
namespace Triadev\EsMigration\Business\Events;

use Illuminate\Queue\SerializesModels;
use Triadev\EsMigration\Models\Entity\ElasticsearchMigration;

class MigrationRunning
{
public function __construct()
use SerializesModels;

/** @var ElasticsearchMigration */
private $migration;

/**
* MigrationRunning constructor.
* @param ElasticsearchMigration $migration
*/
public function __construct(ElasticsearchMigration $migration)
{
$this->migration = $migration;
}

/**
* @return ElasticsearchMigration
*/
public function getMigration(): ElasticsearchMigration
{
return $this->migration;
}
}
27 changes: 27 additions & 0 deletions src/Business/Repository/ElasticsearchMigration.php
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,9 @@
namespace Triadev\EsMigration\Business\Repository;

use Illuminate\Database\Eloquent\Collection;
use Triadev\EsMigration\Business\Events\MigrationDone;
use Triadev\EsMigration\Business\Events\MigrationError;
use Triadev\EsMigration\Business\Events\MigrationRunning;
use Triadev\EsMigration\Contract\Repository\ElasticsearchMigrationContract;

class ElasticsearchMigration implements ElasticsearchMigrationContract
Expand All @@ -26,6 +29,8 @@ public function createOrUpdate(

$dbMigration->saveOrFail();

$this->dispatchStatus($dbMigration);

return $dbMigration;
}

Expand Down Expand Up @@ -72,4 +77,26 @@ private function isStatusValid(int $status) : bool

return false;
}

private function dispatchStatus(\Triadev\EsMigration\Models\Entity\ElasticsearchMigration $migration)
{
switch ($migration->status) {
case self::ELASTICSEARCH_MIGRATION_STATUS_RUNNING:
$event = new MigrationRunning($migration);
break;
case self::ELASTICSEARCH_MIGRATION_STATUS_DONE:
$event = new MigrationDone($migration);
break;
case self::ELASTICSEARCH_MIGRATION_STATUS_ERROR:
$event = new MigrationError($migration);
break;
default:
$event = null;
break;
}

if ($event) {
event($event);
}
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,9 @@
namespace Tests\Integration\Business\Repository;

use Tests\TestCase;
use Triadev\EsMigration\Business\Events\MigrationDone;
use Triadev\EsMigration\Business\Events\MigrationError;
use Triadev\EsMigration\Business\Events\MigrationRunning;
use Triadev\EsMigration\Contract\Repository\ElasticsearchMigrationContract;
use Triadev\EsMigration\Contract\Repository\ElasticsearchMigrationsContract;
use Triadev\EsMigration\Models\Entity\ElasticsearchMigration;
Expand Down Expand Up @@ -42,26 +45,31 @@ public function it_creates_a_migration()
*/
public function it_updates_a_migration()
{
$this->repository->createOrUpdate('1.0.0');
$this->expectsEvents([
MigrationRunning::class,
MigrationError::class,
MigrationDone::class
]);

$this->assertEquals(
ElasticsearchMigrationContract::ELASTICSEARCH_MIGRATION_STATUS_WAIT,
$this->repository->find('1.0.0')->status
);
// WAIT
$this->repository->createOrUpdate('1.0.0');
$this->assertEquals(ElasticsearchMigrationContract::ELASTICSEARCH_MIGRATION_STATUS_WAIT, $this->repository->find('1.0.0')->status);

// ERROR
$this->repository->createOrUpdate('1.0.0', ElasticsearchMigrationContract::ELASTICSEARCH_MIGRATION_STATUS_ERROR);
$this->assertEquals(ElasticsearchMigrationContract::ELASTICSEARCH_MIGRATION_STATUS_ERROR, $this->repository->find('1.0.0')->status);

// RUNNING
$this->repository->createOrUpdate('1.0.0', ElasticsearchMigrationContract::ELASTICSEARCH_MIGRATION_STATUS_RUNNING);
$this->assertEquals(ElasticsearchMigrationContract::ELASTICSEARCH_MIGRATION_STATUS_RUNNING, $this->repository->find('1.0.0')->status);

// DONE
$this->repository->createOrUpdate('1.0.0', ElasticsearchMigrationContract::ELASTICSEARCH_MIGRATION_STATUS_DONE);
$this->assertEquals(ElasticsearchMigrationContract::ELASTICSEARCH_MIGRATION_STATUS_DONE, $this->repository->find('1.0.0')->status);

$this->assertEquals(
ElasticsearchMigrationContract::ELASTICSEARCH_MIGRATION_STATUS_DONE,
$this->repository->find('1.0.0')->status
);

// DONE => invalid status id
$this->repository->createOrUpdate('1.0.0', 999);

$this->assertEquals(
ElasticsearchMigrationContract::ELASTICSEARCH_MIGRATION_STATUS_DONE,
$this->repository->find('1.0.0')->status
);
$this->assertEquals(ElasticsearchMigrationContract::ELASTICSEARCH_MIGRATION_STATUS_DONE, $this->repository->find('1.0.0')->status);
}

/**
Expand Down

0 comments on commit 0024d5c

Please sign in to comment.