migrations/File/Version20200227142406_File.php line 1

  1. <?php
  2. declare(strict_types=1);
  3. namespace DoctrineMigrations\File;
  4. use App\Doctrine\Type\File\FileType;
  5. use App\Doctrine\Type\File\ParsableStatus;
  6. use App\Doctrine\Type\File\ParsableType;
  7. use App\Doctrine\Type\File\UploadableStatus;
  8. use App\Doctrine\Type\File\UploadableType;
  9. use Doctrine\DBAL\Schema\Schema;
  10. use Doctrine\Migrations\AbstractMigration;
  11. /**
  12.  * Auto-generated Migration: Please modify to your needs!
  13.  */
  14. final class Version20200227142406_File extends AbstractMigration
  15. {
  16.     public function getDescription(): string
  17.     {
  18.         return 'Create file table';
  19.     }
  20.     public function up(Schema $schema): void
  21.     {
  22.         $this->addSql(FileType::getRegistrationSQL());
  23.         $this->addSql(ParsableType::getRegistrationSQL());
  24.         $this->addSql(ParsableStatus::getRegistrationSQL());
  25.         $this->addSql(UploadableType::getRegistrationSQL());
  26.         $this->addSql(UploadableStatus::getRegistrationSQL());
  27.         $fileType FileType::getName();
  28.         $parsableType ParsableType::getName();
  29.         $parsableStatus ParsableStatus::getName();
  30.         $uploadableType UploadableType::getName(asArraytrue);
  31.         $uploadableStatus UploadableStatus::getName();
  32.         $this->addSql("CREATE TABLE public.file (
  33.             id                  SERIAL PRIMARY KEY,
  34.             slug                CHARACTER VARYING           NOT NULL,
  35.             file_type           {$fileType}                 NOT NULL,
  36.             name                CHARACTER VARYING           NOT NULL,
  37.             original_name       CHARACTER VARYING           NOT NULL,
  38.             path                CHARACTER VARYING           NOT NULL,
  39.             description         CHARACTER VARYING,
  40.             mime_type           CHARACTER VARYING           NOT NULL,
  41.             size                INTEGER                     NOT NULL,
  42.             parsable_type       {$parsableType},
  43.             parsable_status     {$parsableStatus},
  44.             uploadable_types    {$uploadableType},
  45.             uploadable_status   {$uploadableStatus},
  46.             data                JSONB,
  47.             errors              JSONB,
  48.             created_by          INTEGER                              REFERENCES public.user (id),
  49.             updated_by          INTEGER                              REFERENCES public.user (id),
  50.             created_at          TIMESTAMP(0) WITH TIME ZONE NOT NULL DEFAULT CURRENT_TIMESTAMP,
  51.             updated_at          TIMESTAMP(0) WITH TIME ZONE,
  52.             deleted_at          TIMESTAMP(0) WITH TIME ZONE,
  53.             CONSTRAINT file_slug_key UNIQUE (slug),
  54.             CONSTRAINT file_path_key UNIQUE (path)
  55.         )");
  56.         $this->addSql("COMMENT ON COLUMN public.file.data IS '(DC2Type:json_document)'");
  57.         $this->addSql("CREATE INDEX file_created_by_idx ON public.file (created_by)");
  58.         $this->addSql("CREATE INDEX file_updated_by_idx ON public.file (updated_by)");
  59.     }
  60.     public function down(Schema $schema): void
  61.     {
  62.         $this->addSql("DROP TABLE IF EXISTS public.file");
  63.         $this->addSql(UploadableStatus::getDeletionSQL());
  64.         $this->addSql(UploadableType::getDeletionSQL());
  65.         $this->addSql(ParsableStatus::getDeletionSQL());
  66.         $this->addSql(ParsableType::getDeletionSQL());
  67.         $this->addSql(FileType::getDeletionSQL());
  68.     }
  69. }