markitosgv/JWTRefreshTokenBundle

The generated migration drops the entire database

Anna-AP opened this issue · 3 comments

Hello,

I have a question of curiosity. I installed your bundle on my symfony 6 project and during the installation, I was quite amazed by the migration step.

When I went to check the migration before running it, I discovered that it includes a complete deletion of all the tables of my project.

I don't understand why the bundle takes care of the rest of the database instead of just its needs. I think it's dangerous, someone who runs the installation without checking could have very bad surprises 😄

Below is the migration generated by the bundle installation.

C:\Users\Utilisateur\Desktop\Projects\lbo\backend>php bin/console doctrine:migrations:diff

 Generated new migration class to "C:\Users\Utilisateur\Desktop\Projects\lbo\backend/migrations/Version20230209025825.php"

 To run just this migration for testing purposes, you can use migrations:execute --up 'DoctrineMigrations\\Version20230209025825'

 To revert the migration you can use migrations:execute --down 'DoctrineMigrations\\Version20230209025825'
declare(strict_types=1);

namespace DoctrineMigrations;

use Doctrine\DBAL\Schema\Schema;
use Doctrine\Migrations\AbstractMigration;

final class Version20230209025825 extends AbstractMigration
{
    public function getDescription(): string
    {
        return '';
    }

    public function up(Schema $schema): void
    {
        $this->addSql('CREATE TABLE refresh_tokens (id INT AUTO_INCREMENT NOT NULL, refresh_token VARCHAR(128) NOT NULL, username VARCHAR(255) NOT NULL, valid DATETIME NOT NULL, UNIQUE INDEX UNIQ_9BACE7E1C74F2195 (refresh_token), PRIMARY KEY(id)) DEFAULT CHARACTER SET utf8mb4 COLLATE `utf8mb4_unicode_ci` ENGINE = InnoDB');
        $this->addSql('DROP TABLE actualities');
        $this->addSql('DROP TABLE books');
        $this->addSql('DROP TABLE books_authors');
        $this->addSql('DROP TABLE books_languages');
        $this->addSql('DROP TABLE books_provinces');
        $this->addSql('DROP TABLE contacts');
        $this->addSql('DROP TABLE craftspeoples');
        $this->addSql('DROP TABLE deploys');
        $this->addSql('DROP TABLE faqs');
        $this->addSql('DROP TABLE faqs_categories');
        $this->addSql('DROP TABLE kingdoms');
        $this->addSql('DROP TABLE kingdoms_cities');
        $this->addSql('DROP TABLE kingdoms_provinces');
        $this->addSql('DROP TABLE lessons');
        $this->addSql('DROP TABLE lessons_categories');
        $this->addSql('DROP TABLE lessons_ways');
        $this->addSql('DROP TABLE productions');
        $this->addSql('DROP TABLE productions_ingredients');
        $this->addSql('DROP TABLE productions_recipes');
        $this->addSql('DROP TABLE products');
        $this->addSql('DROP TABLE products_categories');
        $this->addSql('DROP TABLE translates');
        $this->addSql('DROP TABLE users');
        $this->addSql('DROP TABLE users_languages');
        $this->addSql('DROP TABLE users_modules');
    }

    public function down(Schema $schema): void
    {
        $this->addSql('CREATE TABLE actualities (uuid CHAR(36) CHARACTER SET latin1 NOT NULL COLLATE `latin1_swedish_ci`, title_tr CHAR(36) CHARACTER SET latin1 NOT NULL COLLATE `latin1_swedish_ci`, content_tr CHAR(36) CHARACTER SET latin1 DEFAULT NULL COLLATE `latin1_swedish_ci`, created DATE NOT NULL, is_publish INT NOT NULL, new_publish INT NOT NULL, UNIQUE INDEX actualities_uuid_uindex (uuid), PRIMARY KEY(uuid)) DEFAULT CHARACTER SET latin1 COLLATE `latin1_swedish_ci` ENGINE = MyISAM COMMENT = \'\' ');
        $this->addSql('CREATE TABLE books (uuid CHAR(36) CHARACTER SET latin1 NOT NULL COLLATE `latin1_swedish_ci`, name_tr CHAR(36) CHARACTER SET latin1 NOT NULL COLLATE `latin1_swedish_ci`, author_uuid CHAR(36) CHARACTER SET latin1 NOT NULL COLLATE `latin1_swedish_ci`, language_uuid CHAR(36) CHARACTER SET latin1 NOT NULL COLLATE `latin1_swedish_ci`, prerequisite_tr CHAR(36) CHARACTER SET latin1 DEFAULT NULL COLLATE `latin1_swedish_ci`, utility_tr CHAR(36) CHARACTER SET latin1 DEFAULT NULL COLLATE `latin1_swedish_ci`, increase INT DEFAULT NULL, UNIQUE INDEX books_uuid_uindex (uuid), PRIMARY KEY(uuid)) DEFAULT CHARACTER SET latin1 COLLATE `latin1_swedish_ci` ENGINE = MyISAM COMMENT = \'\' ');
        $this->addSql('CREATE TABLE books_authors (uuid CHAR(36) CHARACTER SET latin1 NOT NULL COLLATE `latin1_swedish_ci`, name_tr CHAR(36) CHARACTER SET latin1 NOT NULL COLLATE `latin1_swedish_ci`, UNIQUE INDEX books_authors_uuid_uindex (uuid), PRIMARY KEY(uuid)) DEFAULT CHARACTER SET latin1 COLLATE `latin1_swedish_ci` ENGINE = MyISAM COMMENT = \'\' ');
        $this->addSql('CREATE TABLE books_languages (uuid CHAR(36) CHARACTER SET latin1 NOT NULL COLLATE `latin1_swedish_ci`, name_tr CHAR(36) CHARACTER SET latin1 NOT NULL COLLATE `latin1_swedish_ci`, UNIQUE INDEX books_languages_uuid_uindex (uuid), PRIMARY KEY(uuid)) DEFAULT CHARACTER SET latin1 COLLATE `latin1_swedish_ci` ENGINE = MyISAM COMMENT = \'\' ');
        $this->addSql('CREATE TABLE books_provinces (uuid CHAR(36) CHARACTER SET latin1 NOT NULL COLLATE `latin1_swedish_ci`, book_uuid CHAR(36) CHARACTER SET latin1 NOT NULL COLLATE `latin1_swedish_ci`, province_uuid CHAR(36) CHARACTER SET latin1 NOT NULL COLLATE `latin1_swedish_ci`, UNIQUE INDEX books_provinces_uuid_uindex (uuid), PRIMARY KEY(uuid)) DEFAULT CHARACTER SET latin1 COLLATE `latin1_swedish_ci` ENGINE = MyISAM COMMENT = \'\' ');
        $this->addSql('CREATE TABLE contacts (uuid CHAR(36) CHARACTER SET latin1 NOT NULL COLLATE `latin1_swedish_ci`, mode_response VARCHAR(5) CHARACTER SET latin1 NOT NULL COLLATE `latin1_swedish_ci`, login VARCHAR(255) CHARACTER SET latin1 DEFAULT NULL COLLATE `latin1_swedish_ci`, email VARCHAR(255) CHARACTER SET latin1 DEFAULT NULL COLLATE `latin1_swedish_ci`, subject VARCHAR(20) CHARACTER SET latin1 NOT NULL COLLATE `latin1_swedish_ci`, message LONGTEXT CHARACTER SET latin1 NOT NULL COLLATE `latin1_swedish_ci`, status INT NOT NULL, date_open DATETIME NOT NULL, date_close DATETIME DEFAULT NULL, UNIQUE INDEX contacts_uuid_uindex (uuid), PRIMARY KEY(uuid)) DEFAULT CHARACTER SET latin1 COLLATE `latin1_swedish_ci` ENGINE = MyISAM COMMENT = \'\' ');
        $this->addSql('CREATE TABLE craftspeoples (uuid CHAR(36) CHARACTER SET latin1 NOT NULL COLLATE `latin1_swedish_ci`, name_tr CHAR(36) CHARACTER SET latin1 NOT NULL COLLATE `latin1_swedish_ci`, slug VARCHAR(100) CHARACTER SET latin1 NOT NULL COLLATE `latin1_swedish_ci`, UNIQUE INDEX craftspeoples_uuid_uindex (uuid), PRIMARY KEY(uuid)) DEFAULT CHARACTER SET latin1 COLLATE `latin1_swedish_ci` ENGINE = MyISAM COMMENT = \'\' ');
        $this->addSql('CREATE TABLE deploys (uuid CHAR(36) CHARACTER SET latin1 NOT NULL COLLATE `latin1_swedish_ci`, title_tr CHAR(36) CHARACTER SET latin1 NOT NULL COLLATE `latin1_swedish_ci`, content_tr CHAR(36) CHARACTER SET latin1 DEFAULT NULL COLLATE `latin1_swedish_ci`, created DATE NOT NULL, is_publish INT NOT NULL, new_publish INT NOT NULL, UNIQUE INDEX deploys_uuid_uindex (uuid), PRIMARY KEY(uuid)) DEFAULT CHARACTER SET latin1 COLLATE `latin1_swedish_ci` ENGINE = MyISAM COMMENT = \'\' ');
        $this->addSql('CREATE TABLE faqs (uuid CHAR(36) CHARACTER SET latin1 NOT NULL COLLATE `latin1_swedish_ci`, title_tr CHAR(36) CHARACTER SET latin1 NOT NULL COLLATE `latin1_swedish_ci`, content_tr CHAR(36) CHARACTER SET latin1 DEFAULT NULL COLLATE `latin1_swedish_ci`, increase INT DEFAULT NULL, is_publish INT NOT NULL, category_uuid CHAR(36) CHARACTER SET latin1 NOT NULL COLLATE `latin1_swedish_ci`, UNIQUE INDEX faqs_uuid_uindex (uuid), PRIMARY KEY(uuid)) DEFAULT CHARACTER SET latin1 COLLATE `latin1_swedish_ci` ENGINE = MyISAM COMMENT = \'\' ');
        $this->addSql('CREATE TABLE faqs_categories (uuid CHAR(36) CHARACTER SET latin1 NOT NULL COLLATE `latin1_swedish_ci`, name_tr CHAR(36) CHARACTER SET latin1 NOT NULL COLLATE `latin1_swedish_ci`, UNIQUE INDEX faqs_categories_uuid_uindex (uuid), PRIMARY KEY(uuid)) DEFAULT CHARACTER SET latin1 COLLATE `latin1_swedish_ci` ENGINE = MyISAM COMMENT = \'\' ');
        $this->addSql('CREATE TABLE kingdoms (uuid CHAR(36) CHARACTER SET latin1 NOT NULL COLLATE `latin1_swedish_ci`, name LONGTEXT CHARACTER SET latin1 NOT NULL COLLATE `latin1_swedish_ci`, id_rk INT NOT NULL, UNIQUE INDEX kingdoms_uuid_uindex (uuid), PRIMARY KEY(uuid)) DEFAULT CHARACTER SET latin1 COLLATE `latin1_swedish_ci` ENGINE = MyISAM COMMENT = \'\' ');
        $this->addSql('CREATE TABLE kingdoms_cities (uuid CHAR(36) CHARACTER SET latin1 NOT NULL COLLATE `latin1_swedish_ci`, name LONGTEXT CHARACTER SET latin1 NOT NULL COLLATE `latin1_swedish_ci`, province_uuid CHAR(36) CHARACTER SET latin1 NOT NULL COLLATE `latin1_swedish_ci`, id_rk INT NOT NULL, UNIQUE INDEX kingdoms_cities_uuid_uindex (uuid), PRIMARY KEY(uuid)) DEFAULT CHARACTER SET latin1 COLLATE `latin1_swedish_ci` ENGINE = MyISAM COMMENT = \'\' ');
        $this->addSql('CREATE TABLE kingdoms_provinces (uuid CHAR(36) CHARACTER SET latin1 NOT NULL COLLATE `latin1_swedish_ci`, name LONGTEXT CHARACTER SET latin1 NOT NULL COLLATE `latin1_swedish_ci`, kingdom_uuid CHAR(36) CHARACTER SET latin1 NOT NULL COLLATE `latin1_swedish_ci`, id_rk INT NOT NULL, UNIQUE INDEX kingdoms_provinces_uuid_uindex (uuid), PRIMARY KEY(uuid)) DEFAULT CHARACTER SET latin1 COLLATE `latin1_swedish_ci` ENGINE = MyISAM COMMENT = \'\' ');
        $this->addSql('CREATE TABLE lessons (uuid CHAR(36) CHARACTER SET latin1 NOT NULL COLLATE `latin1_swedish_ci`, name_tr CHAR(36) CHARACTER SET latin1 NOT NULL COLLATE `latin1_swedish_ci`, prerequisite_tr CHAR(36) CHARACTER SET latin1 DEFAULT NULL COLLATE `latin1_swedish_ci`, way_uuid CHAR(36) CHARACTER SET latin1 NOT NULL COLLATE `latin1_swedish_ci`, increase INT DEFAULT NULL, UNIQUE INDEX lessons_uuid_uindex (uuid), PRIMARY KEY(uuid)) DEFAULT CHARACTER SET latin1 COLLATE `latin1_swedish_ci` ENGINE = MyISAM COMMENT = \'\' ');
        $this->addSql('CREATE TABLE lessons_categories (uuid CHAR(36) CHARACTER SET latin1 NOT NULL COLLATE `latin1_swedish_ci`, name_tr CHAR(36) CHARACTER SET latin1 NOT NULL COLLATE `latin1_swedish_ci`, increase INT DEFAULT NULL, UNIQUE INDEX lessons_categories_uuid_uindex (uuid), PRIMARY KEY(uuid)) DEFAULT CHARACTER SET latin1 COLLATE `latin1_swedish_ci` ENGINE = MyISAM COMMENT = \'\' ');
        $this->addSql('CREATE TABLE lessons_ways (uuid CHAR(36) CHARACTER SET latin1 NOT NULL COLLATE `latin1_swedish_ci`, name_tr CHAR(36) CHARACTER SET latin1 NOT NULL COLLATE `latin1_swedish_ci`, category_uuid CHAR(36) CHARACTER SET latin1 NOT NULL COLLATE `latin1_swedish_ci`, increase INT DEFAULT NULL, UNIQUE INDEX lessons_ways_uuid_uindex (uuid), PRIMARY KEY(uuid)) DEFAULT CHARACTER SET latin1 COLLATE `latin1_swedish_ci` ENGINE = MyISAM COMMENT = \'\' ');
        $this->addSql('CREATE TABLE productions (uuid CHAR(36) CHARACTER SET latin1 NOT NULL COLLATE `latin1_swedish_ci`, product_uuid CHAR(36) CHARACTER SET latin1 NOT NULL COLLATE `latin1_swedish_ci`, note_tr VARCHAR(100) CHARACTER SET latin1 DEFAULT NULL COLLATE `latin1_swedish_ci`, craftspeople_uuid CHAR(36) CHARACTER SET latin1 NOT NULL COLLATE `latin1_swedish_ci`, slug VARCHAR(100) CHARACTER SET latin1 NOT NULL COLLATE `latin1_swedish_ci`, quantity_ingredients INT NOT NULL, quantity_desynchros INT NOT NULL, is_publish INT NOT NULL, UNIQUE INDEX productions_uuid_uindex (uuid), PRIMARY KEY(uuid)) DEFAULT CHARACTER SET latin1 COLLATE `latin1_swedish_ci` ENGINE = MyISAM COMMENT = \'\' ');
        $this->addSql('CREATE TABLE productions_ingredients (uuid CHAR(36) CHARACTER SET latin1 NOT NULL COLLATE `latin1_swedish_ci`, product_uuid CHAR(36) CHARACTER SET latin1 NOT NULL COLLATE `latin1_swedish_ci`, desynchro_uuid CHAR(36) CHARACTER SET latin1 NOT NULL COLLATE `latin1_swedish_ci`, quantity INT NOT NULL, UNIQUE INDEX productions_ingredients_uuid_uindex (uuid), PRIMARY KEY(uuid)) DEFAULT CHARACTER SET latin1 COLLATE `latin1_swedish_ci` ENGINE = MyISAM COMMENT = \'\' ');
        $this->addSql('CREATE TABLE productions_recipes (uuid CHAR(36) CHARACTER SET latin1 NOT NULL COLLATE `latin1_swedish_ci`, production_uuid CHAR(36) CHARACTER SET latin1 NOT NULL COLLATE `latin1_swedish_ci`, duration INT NOT NULL, quantity_production INT NOT NULL, duration_pa INT NOT NULL, UNIQUE INDEX productions_desynchros_uuid_uindex (uuid), PRIMARY KEY(uuid)) DEFAULT CHARACTER SET latin1 COLLATE `latin1_swedish_ci` ENGINE = MyISAM COMMENT = \'\' ');
        $this->addSql('CREATE TABLE products (uuid CHAR(36) CHARACTER SET latin1 NOT NULL COLLATE `latin1_swedish_ci`, name_tr CHAR(36) CHARACTER SET latin1 NOT NULL COLLATE `latin1_swedish_ci`, plural_tr CHAR(36) CHARACTER SET latin1 NOT NULL COLLATE `latin1_swedish_ci`, slug VARCHAR(100) CHARACTER SET latin1 NOT NULL COLLATE `latin1_swedish_ci`, category_uuid CHAR(36) CHARACTER SET latin1 NOT NULL COLLATE `latin1_swedish_ci`, price_min INT NOT NULL, price_max INT NOT NULL, weight INT DEFAULT NULL, description_tr CHAR(36) CHARACTER SET latin1 DEFAULT NULL COLLATE `latin1_swedish_ci`, icon VARCHAR(255) CHARACTER SET latin1 DEFAULT NULL COLLATE `latin1_swedish_ci`, image VARCHAR(255) CHARACTER SET latin1 DEFAULT NULL COLLATE `latin1_swedish_ci`, wiki_tr CHAR(36) CHARACTER SET latin1 DEFAULT NULL COLLATE `latin1_swedish_ci`, is_publish INT NOT NULL, UNIQUE INDEX products_uuid_uindex (uuid), PRIMARY KEY(uuid)) DEFAULT CHARACTER SET latin1 COLLATE `latin1_swedish_ci` ENGINE = MyISAM COMMENT = \'\' ');
        $this->addSql('CREATE TABLE products_categories (uuid CHAR(36) CHARACTER SET latin1 NOT NULL COLLATE `latin1_swedish_ci`, name_tr CHAR(36) CHARACTER SET latin1 NOT NULL COLLATE `latin1_swedish_ci`, UNIQUE INDEX products_categories_uuid_uindex (uuid), PRIMARY KEY(uuid)) DEFAULT CHARACTER SET latin1 COLLATE `latin1_swedish_ci` ENGINE = MyISAM COMMENT = \'\' ');
        $this->addSql('CREATE TABLE translates (uuid CHAR(36) CHARACTER SET latin1 NOT NULL COLLATE `latin1_swedish_ci`, type VARCHAR(8) CHARACTER SET latin1 NOT NULL COLLATE `latin1_swedish_ci`, fr LONGTEXT CHARACTER SET latin1 NOT NULL COLLATE `latin1_swedish_ci`, fr_status INT NOT NULL, en LONGTEXT CHARACTER SET latin1 DEFAULT NULL COLLATE `latin1_swedish_ci`, en_status INT NOT NULL, it LONGTEXT CHARACTER SET latin1 DEFAULT NULL COLLATE `latin1_swedish_ci`, it_status INT NOT NULL, UNIQUE INDEX translates_uuid_uindex (uuid), PRIMARY KEY(uuid)) DEFAULT CHARACTER SET latin1 COLLATE `latin1_swedish_ci` ENGINE = MyISAM COMMENT = \'\' ');
        $this->addSql('CREATE TABLE users (uuid CHAR(36) CHARACTER SET latin1 NOT NULL COLLATE `latin1_swedish_ci`, login VARCHAR(100) CHARACTER SET latin1 NOT NULL COLLATE `latin1_swedish_ci`, password VARCHAR(255) CHARACTER SET latin1 NOT NULL COLLATE `latin1_swedish_ci`, note VARCHAR(255) CHARACTER SET latin1 DEFAULT NULL COLLATE `latin1_swedish_ci`, roles VARCHAR(20) CHARACTER SET latin1 NOT NULL COLLATE `latin1_swedish_ci`, created DATETIME NOT NULL, deleted DATETIME DEFAULT NULL, closed INT NOT NULL, UNIQUE INDEX users_uuid_uindex (uuid), UNIQUE INDEX users_login_uindex (login), PRIMARY KEY(uuid)) DEFAULT CHARACTER SET latin1 COLLATE `latin1_swedish_ci` ENGINE = MyISAM COMMENT = \'\' ');
        $this->addSql('CREATE TABLE users_languages (uuid CHAR(36) CHARACTER SET latin1 NOT NULL COLLATE `latin1_swedish_ci`, user_uuid CHAR(36) CHARACTER SET latin1 NOT NULL COLLATE `latin1_swedish_ci`, language VARCHAR(2) CHARACTER SET latin1 NOT NULL COLLATE `latin1_swedish_ci`, UNIQUE INDEX users_languages_uuid_uindex (uuid), PRIMARY KEY(uuid)) DEFAULT CHARACTER SET latin1 COLLATE `latin1_swedish_ci` ENGINE = MyISAM COMMENT = \'\' ');
        $this->addSql('CREATE TABLE users_modules (uuid CHAR(36) CHARACTER SET latin1 NOT NULL COLLATE `latin1_swedish_ci`, user_uuid CHAR(36) CHARACTER SET latin1 NOT NULL COLLATE `latin1_swedish_ci`, module VARCHAR(15) CHARACTER SET latin1 NOT NULL COLLATE `latin1_swedish_ci`, UNIQUE INDEX users_modules_uuid_uindex (uuid), PRIMARY KEY(uuid)) DEFAULT CHARACTER SET latin1 COLLATE `latin1_swedish_ci` ENGINE = MyISAM COMMENT = \'\' ');
        $this->addSql('DROP TABLE refresh_tokens');
    }
}

I think there is a clue as to why this is happening. I don't use doctrine mapping to manage my data. So it must be messing up the migration generation.

On the other hand, I think it should be fixed so that the migration generation only creates the bundle requirement without considering the rest of the db.

You should add the tables that you aren't using Doctrine to manage the mapping/schema for to your migrations configuration so that the Migrations library ignores them (see https://symfony.com/bundles/DoctrineMigrationsBundle/current/index.html#manual-tables for more on that). Otherwise, any time you run the doctrine:migrations:diff command, you're going to have the same type of issue.

None of the doctrine commands are coming from this bundle, and if it tried to do anything to manipulate them, it would just break other parts of your app.

I had the same problem and I changed the RefreshToken entity to the following which solved the problem:

use Doctrine\ORM\Mapping as ORM;
use Gesdinet\JWTRefreshTokenBundle\Entity\RefreshToken as BaseRefreshToken;
use Gesdinet\JWTRefreshTokenBundle\Entity\RefreshTokenRepository;

#[ORM\Entity(repositoryClass: RefreshTokenRepository::class)]
or
#[ORM\Entity]
#[ORM\Table(name: 'refresh_token')]
class RefreshToken extends BaseRefreshToken
{
}

Doctrine does not handle Attributes and Annotations used together in one project.
You can use the repository class or the second one, both works in my case