diff --git a/migrations/Version20231001104548.php b/migrations/Version20231001104548.php new file mode 100644 index 0000000..9e4247d --- /dev/null +++ b/migrations/Version20231001104548.php @@ -0,0 +1,62 @@ +addSql('CREATE SEQUENCE artist_id_seq INCREMENT BY 1 MINVALUE 1 START 1'); + $this->addSql('CREATE SEQUENCE release_id_seq INCREMENT BY 1 MINVALUE 1 START 1'); + $this->addSql('CREATE TABLE artist (id INT NOT NULL, name VARCHAR(255) NOT NULL, PRIMARY KEY(id))'); + $this->addSql('CREATE TABLE release (id INT NOT NULL, title VARCHAR(255) NOT NULL, PRIMARY KEY(id))'); + $this->addSql('CREATE TABLE release_artist (release_id INT NOT NULL, artist_id INT NOT NULL, PRIMARY KEY(release_id, artist_id))'); + $this->addSql('CREATE INDEX IDX_CFBBEC6AB12A727D ON release_artist (release_id)'); + $this->addSql('CREATE INDEX IDX_CFBBEC6AB7970CF8 ON release_artist (artist_id)'); + $this->addSql('CREATE TABLE messenger_messages (id BIGSERIAL NOT NULL, body TEXT NOT NULL, headers TEXT NOT NULL, queue_name VARCHAR(190) NOT NULL, created_at TIMESTAMP(0) WITHOUT TIME ZONE NOT NULL, available_at TIMESTAMP(0) WITHOUT TIME ZONE NOT NULL, delivered_at TIMESTAMP(0) WITHOUT TIME ZONE DEFAULT NULL, PRIMARY KEY(id))'); + $this->addSql('CREATE INDEX IDX_75EA56E0FB7336F0 ON messenger_messages (queue_name)'); + $this->addSql('CREATE INDEX IDX_75EA56E0E3BD61CE ON messenger_messages (available_at)'); + $this->addSql('CREATE INDEX IDX_75EA56E016BA31DB ON messenger_messages (delivered_at)'); + $this->addSql('COMMENT ON COLUMN messenger_messages.created_at IS \'(DC2Type:datetime_immutable)\''); + $this->addSql('COMMENT ON COLUMN messenger_messages.available_at IS \'(DC2Type:datetime_immutable)\''); + $this->addSql('COMMENT ON COLUMN messenger_messages.delivered_at IS \'(DC2Type:datetime_immutable)\''); + $this->addSql('CREATE OR REPLACE FUNCTION notify_messenger_messages() RETURNS TRIGGER AS $$ + BEGIN + PERFORM pg_notify(\'messenger_messages\', NEW.queue_name::text); + RETURN NEW; + END; + $$ LANGUAGE plpgsql;'); + $this->addSql('DROP TRIGGER IF EXISTS notify_trigger ON messenger_messages;'); + $this->addSql('CREATE TRIGGER notify_trigger AFTER INSERT OR UPDATE ON messenger_messages FOR EACH ROW EXECUTE PROCEDURE notify_messenger_messages();'); + $this->addSql('ALTER TABLE release_artist ADD CONSTRAINT FK_CFBBEC6AB12A727D FOREIGN KEY (release_id) REFERENCES release (id) ON DELETE CASCADE NOT DEFERRABLE INITIALLY IMMEDIATE'); + $this->addSql('ALTER TABLE release_artist ADD CONSTRAINT FK_CFBBEC6AB7970CF8 FOREIGN KEY (artist_id) REFERENCES artist (id) ON DELETE CASCADE NOT DEFERRABLE INITIALLY IMMEDIATE'); + } + + public function down(Schema $schema): void + { + // this down() migration is auto-generated, please modify it to your needs + $this->addSql('CREATE SCHEMA public'); + $this->addSql('DROP SEQUENCE artist_id_seq CASCADE'); + $this->addSql('DROP SEQUENCE release_id_seq CASCADE'); + $this->addSql('ALTER TABLE release_artist DROP CONSTRAINT FK_CFBBEC6AB12A727D'); + $this->addSql('ALTER TABLE release_artist DROP CONSTRAINT FK_CFBBEC6AB7970CF8'); + $this->addSql('DROP TABLE artist'); + $this->addSql('DROP TABLE release'); + $this->addSql('DROP TABLE release_artist'); + $this->addSql('DROP TABLE messenger_messages'); + } +} diff --git a/src/Entity/Artist.php b/src/Entity/Artist.php new file mode 100644 index 0000000..e2adadf --- /dev/null +++ b/src/Entity/Artist.php @@ -0,0 +1,72 @@ +releases = new ArrayCollection(); + } + + public function getId(): ?int + { + return $this->id; + } + + public function getName(): ?string + { + return $this->name; + } + + public function setName(string $name): static + { + $this->name = $name; + + return $this; + } + + /** + * @return Collection + */ + public function getReleases(): Collection + { + return $this->releases; + } + + public function addRelease(Release $release): static + { + if (!$this->releases->contains($release)) { + $this->releases->add($release); + $release->addArtist($this); + } + + return $this; + } + + public function removeRelease(Release $release): static + { + if ($this->releases->removeElement($release)) { + $release->removeArtist($this); + } + + return $this; + } +} diff --git a/src/Entity/Release.php b/src/Entity/Release.php new file mode 100644 index 0000000..a43f664 --- /dev/null +++ b/src/Entity/Release.php @@ -0,0 +1,69 @@ +artists = new ArrayCollection(); + } + + public function getId(): ?int + { + return $this->id; + } + + public function getTitle(): ?string + { + return $this->title; + } + + public function setTitle(string $title): static + { + $this->title = $title; + + return $this; + } + + /** + * @return Collection + */ + public function getArtists(): Collection + { + return $this->artists; + } + + public function addArtist(Artist $artist): static + { + if (!$this->artists->contains($artist)) { + $this->artists->add($artist); + } + + return $this; + } + + public function removeArtist(Artist $artist): static + { + $this->artists->removeElement($artist); + + return $this; + } +} diff --git a/src/Repository/ArtistRepository.php b/src/Repository/ArtistRepository.php new file mode 100644 index 0000000..c5d8e2e --- /dev/null +++ b/src/Repository/ArtistRepository.php @@ -0,0 +1,23 @@ + + * + * @method Artist|null find($id, $lockMode = null, $lockVersion = null) + * @method Artist|null findOneBy(array $criteria, array $orderBy = null) + * @method Artist[] findAll() + * @method Artist[] findBy(array $criteria, array $orderBy = null, $limit = null, $offset = null) + */ +class ArtistRepository extends ServiceEntityRepository +{ + public function __construct(ManagerRegistry $registry) + { + parent::__construct($registry, Artist::class); + } +} diff --git a/src/Repository/ReleaseRepository.php b/src/Repository/ReleaseRepository.php new file mode 100644 index 0000000..b9aa47e --- /dev/null +++ b/src/Repository/ReleaseRepository.php @@ -0,0 +1,23 @@ + + * + * @method Release|null find($id, $lockMode = null, $lockVersion = null) + * @method Release|null findOneBy(array $criteria, array $orderBy = null) + * @method Release[] findAll() + * @method Release[] findBy(array $criteria, array $orderBy = null, $limit = null, $offset = null) + */ +class ReleaseRepository extends ServiceEntityRepository +{ + public function __construct(ManagerRegistry $registry) + { + parent::__construct($registry, Release::class); + } +} diff --git a/templates/base.html.twig b/templates/base.html.twig index 67598ac..d5440d9 100644 --- a/templates/base.html.twig +++ b/templates/base.html.twig @@ -2,11 +2,10 @@ - {% block title %}Welcome!{% endblock %} - + + {% block title %}Flumzi{% endblock %} {% block stylesheets %} {% endblock %} - {% block javascripts %} {% endblock %}