Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Create ActivityArea entity and relate it to Space. #652

Merged
merged 1 commit into from
Jan 31, 2025
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
34 changes: 34 additions & 0 deletions migrations/Version20250131015424.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,34 @@
<?php

declare(strict_types=1);

namespace DoctrineMigrations;

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

final class Version20250131015424 extends AbstractMigration
{
public function getDescription(): string
{
return 'Create ActivityArea entity and its relation with Space';
}

public function up(Schema $schema): void
{
$this->addSql('CREATE TABLE activity_area (id UUID NOT NULL, name VARCHAR(20) NOT NULL, PRIMARY KEY(id))');
$this->addSql('CREATE TABLE activity_area_spaces (activity_area_id UUID NOT NULL, space_id UUID NOT NULL, PRIMARY KEY(activity_area_id, space_id))');

$this->addSql('CREATE INDEX IDX_F15AB7E8BD5D367C ON activity_area_spaces (activity_area_id)');
$this->addSql('CREATE INDEX IDX_F15AB7E823575340 ON activity_area_spaces (space_id)');

$this->addSql('ALTER TABLE activity_area_spaces ADD CONSTRAINT fk_activity_area_spaces_by_activity_area_id FOREIGN KEY (activity_area_id) REFERENCES activity_area (id) ON DELETE CASCADE');
$this->addSql('ALTER TABLE activity_area_spaces ADD CONSTRAINT fk_activity_area_spaces_by_space_id FOREIGN KEY (space_id) REFERENCES space (id) ON DELETE CASCADE');
}

public function down(Schema $schema): void
{
$this->addSql('DROP TABLE activity_area_spaces');
$this->addSql('DROP TABLE activity_area');
}
}
94 changes: 94 additions & 0 deletions src/DataFixtures/Entity/ActivityAreaFixtures.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,94 @@
<?php

declare(strict_types=1);

namespace App\DataFixtures\Entity;

use App\Entity\ActivityArea;
use Doctrine\ORM\EntityManagerInterface;
use Doctrine\Persistence\ObjectManager;
use Symfony\Component\Security\Core\Authentication\Token\Storage\TokenStorageInterface;
use Symfony\Component\Serializer\SerializerInterface;

final class ActivityAreaFixtures extends AbstractFixture
{
public const string ACTIVITY_AREA_ID_PREFIX = 'activity_area';
public const string ACTIVITY_AREA_ID_1 = 'a1b2c3d4-e5f6-7890-1234-56789abcdef0';
public const string ACTIVITY_AREA_ID_2 = 'b2c3d4e5-f678-9012-3456-789abcdef012';
public const string ACTIVITY_AREA_ID_3 = 'c3d4e5f6-7890-1234-5678-9abcdef01234';
public const string ACTIVITY_AREA_ID_4 = 'd4e5f678-9012-3456-789a-bcdef0123456';
public const string ACTIVITY_AREA_ID_5 = 'e5f67890-1234-5678-9abc-def012345678';
public const string ACTIVITY_AREA_ID_6 = 'f6789012-3456-789a-bcde-f01234567890';
public const string ACTIVITY_AREA_ID_7 = '67890123-4567-89ab-cdef-012345678901';
public const string ACTIVITY_AREA_ID_8 = '78901234-5678-9abc-def0-123456789012';
public const string ACTIVITY_AREA_ID_9 = '89012345-6789-abcd-ef01-234567890123';
public const string ACTIVITY_AREA_ID_10 = '90123456-789a-bcde-f012-345678901234';

public const array ACTIVITY_AREAS = [
[
'id' => self::ACTIVITY_AREA_ID_1,
'name' => 'Artes Visuais',
],
[
'id' => self::ACTIVITY_AREA_ID_2,
'name' => 'Música',
],
[
'id' => self::ACTIVITY_AREA_ID_3,
'name' => 'Teatro',
],
[
'id' => self::ACTIVITY_AREA_ID_4,
'name' => 'Dança',
],
[
'id' => self::ACTIVITY_AREA_ID_5,
'name' => 'Cinema',
],
[
'id' => self::ACTIVITY_AREA_ID_6,
'name' => 'Literatura',
],
[
'id' => self::ACTIVITY_AREA_ID_7,
'name' => 'Gastronomia',
],
[
'id' => self::ACTIVITY_AREA_ID_8,
'name' => 'Design',
],
[
'id' => self::ACTIVITY_AREA_ID_9,
'name' => 'Artesanato',
],
[
'id' => self::ACTIVITY_AREA_ID_10,
'name' => 'Fotografia',
],
];

public function __construct(
protected EntityManagerInterface $entityManager,
protected TokenStorageInterface $tokenStorage,
private readonly SerializerInterface $serializer,
) {
parent::__construct($entityManager, $tokenStorage);
}

public function load(ObjectManager $manager): void
{
$this->truncateTable(ActivityArea::class);
$this->createActivityAreas($manager);
}

private function createActivityAreas(ObjectManager $manager): void
{
foreach (self::ACTIVITY_AREAS as $activityAreaData) {
$activityArea = $this->serializer->denormalize($activityAreaData, ActivityArea::class);
$this->setReference(self::ACTIVITY_AREA_ID_PREFIX.$activityAreaData['id'], $activityArea);
$manager->persist($activityArea);
}

$manager->flush();
}
}
67 changes: 56 additions & 11 deletions src/DataFixtures/Entity/SpaceFixtures.php
Original file line number Diff line number Diff line change
Expand Up @@ -37,9 +37,13 @@ final class SpaceFixtures extends AbstractFixture implements DependentFixtureInt
'type' => 'Instituição Cultural',
'description' => 'A Secretaria da Cultura (SECULT) é responsável por fomentar a arte e a cultura no estado, organizando eventos e oferecendo apoio a iniciativas locais.',
'location' => 'Complexo Estação das Artes - R. Dr. João Moreira, 540 - Centro, Fortaleza - CE, 60030-000',
'areasOfActivity' => ['Teatro', 'Música', 'Artes Visuais'],
'accessibility' => ['Banheiros adaptados', 'Rampa de acesso', 'Elevador adaptado', 'Sinalização tátil'],
],
'activityAreas' => [
ActivityAreaFixtures::ACTIVITY_AREA_ID_3,
ActivityAreaFixtures::ACTIVITY_AREA_ID_2,
ActivityAreaFixtures::ACTIVITY_AREA_ID_1,
],
'createdAt' => '2024-07-10T11:30:00+00:00',
'updatedAt' => null,
'deletedAt' => null,
Expand All @@ -54,9 +58,13 @@ final class SpaceFixtures extends AbstractFixture implements DependentFixtureInt
'type' => 'Centro Cultural',
'description' => 'O Sítio das Artes é um espaço dedicado à promoção de atividades culturais e oficinas artísticas, com uma vasta programação para todas as idades.',
'location' => 'Av. das Artes, 123 – Fortaleza/CE – CEP: 60123-123',
'areasOfActivity' => ['Dança', 'Pintura', 'Escultura'],
'accessibility' => ['Banheiros adaptados', 'Rampa de acesso'],
],
'activityAreas' => [
ActivityAreaFixtures::ACTIVITY_AREA_ID_4,
ActivityAreaFixtures::ACTIVITY_AREA_ID_1,
ActivityAreaFixtures::ACTIVITY_AREA_ID_2,
],
'createdAt' => '2024-07-11T10:49:00+00:00',
'updatedAt' => null,
'deletedAt' => null,
Expand All @@ -71,9 +79,13 @@ final class SpaceFixtures extends AbstractFixture implements DependentFixtureInt
'type' => 'Galeria de Arte',
'description' => 'A Galeria Caatinga é especializada em exposições de artistas regionais, com foco na arte nordestina e obras inspiradas pela fauna e flora do sertão.',
'location' => 'Rua do Sertão, 123 – Fortaleza/CE – CEP: 60123-456',
'areasOfActivity' => ['Pintura', 'Escultura', 'Fotografia'],
'accessibility' => ['Elevador adaptado', 'Sinalização tátil', 'Banheiros acessíveis'],
],
'activityAreas' => [
ActivityAreaFixtures::ACTIVITY_AREA_ID_1,
ActivityAreaFixtures::ACTIVITY_AREA_ID_10,
ActivityAreaFixtures::ACTIVITY_AREA_ID_2,
],
'createdAt' => '2024-07-16T17:22:00+00:00',
'updatedAt' => null,
'deletedAt' => null,
Expand All @@ -88,9 +100,13 @@ final class SpaceFixtures extends AbstractFixture implements DependentFixtureInt
'type' => 'Centro de Literatura',
'description' => 'O Recanto do Cordel é um ponto de encontro para escritores e leitores de literatura de cordel, com eventos de declamação e oficinas.',
'location' => 'Rua das Letras, 456 – Fortaleza/CE – CEP: 60123-789',
'areasOfActivity' => ['Literatura de Cordel', 'Poesia', 'Contação de Histórias'],
'accessibility' => ['Banheiros adaptados', 'Rampa de acesso'],
],
'activityAreas' => [
ActivityAreaFixtures::ACTIVITY_AREA_ID_6,
ActivityAreaFixtures::ACTIVITY_AREA_ID_1,
ActivityAreaFixtures::ACTIVITY_AREA_ID_2,
],
'createdAt' => '2024-07-17T15:12:00+00:00',
'updatedAt' => null,
'deletedAt' => null,
Expand All @@ -105,9 +121,13 @@ final class SpaceFixtures extends AbstractFixture implements DependentFixtureInt
'type' => 'Centro Musical',
'description' => 'O Ritmos do Mundo promove eventos musicais de várias partes do mundo, com foco na diversidade e na fusão de estilos.',
'location' => 'Av. das Nações, 234 – Fortaleza/CE – CEP: 60123-987',
'areasOfActivity' => ['Música', 'Dança', 'Workshops musicais'],
'accessibility' => ['Rampa de acesso', 'Banheiros acessíveis', 'Sinalização em braile'],
],
'activityAreas' => [
ActivityAreaFixtures::ACTIVITY_AREA_ID_2,
ActivityAreaFixtures::ACTIVITY_AREA_ID_4,
ActivityAreaFixtures::ACTIVITY_AREA_ID_1,
],
'createdAt' => '2024-07-22T16:20:00+00:00',
'updatedAt' => null,
'deletedAt' => null,
Expand All @@ -122,9 +142,13 @@ final class SpaceFixtures extends AbstractFixture implements DependentFixtureInt
'type' => 'Museu',
'description' => 'A Casa do Sertão é um museu dedicado à história e cultura do sertão nordestino, com exposições interativas e oficinas educativas.',
'location' => 'Praça do Sertão, 567 – Fortaleza/CE – CEP: 60123-654',
'areasOfActivity' => ['História', 'Cultura Regional', 'Artesanato'],
'accessibility' => ['Elevador adaptado', 'Rampas de acesso'],
],
'activityAreas' => [
ActivityAreaFixtures::ACTIVITY_AREA_ID_1,
ActivityAreaFixtures::ACTIVITY_AREA_ID_9,
ActivityAreaFixtures::ACTIVITY_AREA_ID_2,
],
'createdAt' => '2024-08-10T11:26:00+00:00',
'updatedAt' => null,
'deletedAt' => null,
Expand All @@ -139,9 +163,13 @@ final class SpaceFixtures extends AbstractFixture implements DependentFixtureInt
'type' => 'Centro de Música',
'description' => 'A Vila do Baião é um espaço dedicado à preservação e promoção do forró e de outros ritmos nordestinos, com aulas, ensaios e apresentações.',
'location' => 'Rua do Baião, 678 – Fortaleza/CE – CEP: 60123-321',
'areasOfActivity' => ['Forró', 'Zabumba', 'Sanfona'],
'accessibility' => ['Banheiros adaptados', 'Rampa de acesso'],
],
'activityAreas' => [
ActivityAreaFixtures::ACTIVITY_AREA_ID_2,
ActivityAreaFixtures::ACTIVITY_AREA_ID_4,
ActivityAreaFixtures::ACTIVITY_AREA_ID_1,
],
'createdAt' => '2024-08-11T15:54:00+00:00',
'updatedAt' => null,
'deletedAt' => null,
Expand All @@ -156,9 +184,13 @@ final class SpaceFixtures extends AbstractFixture implements DependentFixtureInt
'type' => 'Centro Cultural',
'description' => 'O Centro Cultural Asa Branca oferece uma programação diversificada com exposições, apresentações teatrais e oficinas de arte.',
'location' => 'Av. Asa Branca, 789 – Fortaleza/CE – CEP: 60123-852',
'areasOfActivity' => ['Teatro', 'Exposições', 'Artes Visuais'],
'accessibility' => ['Elevador adaptado', 'Rampas de acesso'],
],
'activityAreas' => [
ActivityAreaFixtures::ACTIVITY_AREA_ID_3,
ActivityAreaFixtures::ACTIVITY_AREA_ID_1,
ActivityAreaFixtures::ACTIVITY_AREA_ID_2,
],
'createdAt' => '2024-08-12T14:24:00+00:00',
'updatedAt' => null,
'deletedAt' => null,
Expand All @@ -173,9 +205,13 @@ final class SpaceFixtures extends AbstractFixture implements DependentFixtureInt
'type' => 'Centro de Capoeira',
'description' => 'A Casa da Capoeira é um espaço onde são realizadas aulas, rodas de capoeira e eventos culturais ligados à arte e história da capoeira.',
'location' => 'Rua da Luta, 432 – Fortaleza/CE – CEP: 60123-432',
'areasOfActivity' => ['Capoeira', 'Cultura Afro-brasileira', 'Dança'],
'accessibility' => ['Banheiros adaptados', 'Rampas de acesso'],
],
'activityAreas' => [
ActivityAreaFixtures::ACTIVITY_AREA_ID_4,
ActivityAreaFixtures::ACTIVITY_AREA_ID_1,
ActivityAreaFixtures::ACTIVITY_AREA_ID_2,
],
'createdAt' => '2024-08-13T20:25:00+00:00',
'updatedAt' => null,
'deletedAt' => null,
Expand All @@ -190,9 +226,13 @@ final class SpaceFixtures extends AbstractFixture implements DependentFixtureInt
'type' => 'Complexo Cultural',
'description' => 'O Dragão do Mar é um dos maiores complexos culturais da região, com teatros, cinemas e galerias de arte que promovem a cultura local e internacional.',
'location' => 'Rua do Dragão, 987 – Fortaleza/CE – CEP: 60123-111',
'areasOfActivity' => ['Teatro', 'Cinema', 'Exposições'],
'accessibility' => ['Banheiros adaptados', 'Rampas de acesso', 'Elevador adaptado'],
],
'activityAreas' => [
ActivityAreaFixtures::ACTIVITY_AREA_ID_3,
ActivityAreaFixtures::ACTIVITY_AREA_ID_5,
ActivityAreaFixtures::ACTIVITY_AREA_ID_1,
],
'createdAt' => '2024-08-14T10:00:00+00:00',
'updatedAt' => null,
'deletedAt' => null,
Expand All @@ -209,9 +249,13 @@ final class SpaceFixtures extends AbstractFixture implements DependentFixtureInt
'type' => 'Instituição Cultural',
'description' => 'A Secretaria da Cultura (SECULT) é responsável por fomentar a arte e a cultura no estado, organizando eventos e oferecendo apoio a iniciativas locais.',
'location' => 'Complexo Estação das Artes - R. Dr. João Moreira, 540 - Centro, Fortaleza - CE, 60030-000',
'areasOfActivity' => ['Teatro', 'Música', 'Artes Visuais'],
'accessibility' => ['Banheiros adaptados', 'Rampa de acesso', 'Elevador adaptado', 'Sinalização tátil'],
],
'activityAreas' => [
ActivityAreaFixtures::ACTIVITY_AREA_ID_3,
ActivityAreaFixtures::ACTIVITY_AREA_ID_2,
ActivityAreaFixtures::ACTIVITY_AREA_ID_10,
],
'createdAt' => '2024-07-10T11:30:00+00:00',
'updatedAt' => '2024-07-10T12:20:00+00:00',
'deletedAt' => null,
Expand All @@ -232,6 +276,7 @@ public function getDependencies(): array
{
return [
AgentFixtures::class,
ActivityAreaFixtures::class,
];
}

Expand Down
52 changes: 52 additions & 0 deletions src/Entity/ActivityArea.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,52 @@
<?php

declare(strict_types=1);

namespace App\Entity;

use App\Repository\ActivityAreaRepository;
use Doctrine\ORM\Mapping as ORM;
use Symfony\Bridge\Doctrine\Types\UuidType;
use Symfony\Component\Serializer\Attribute\Groups;
use Symfony\Component\Uid\Uuid;

#[ORM\Entity(repositoryClass: ActivityAreaRepository::class)]
class ActivityArea
{
#[ORM\Id]
#[ORM\Column(type: UuidType::NAME)]
#[Groups(['space.get', 'space.get.item', 'activity_area.get'])]
private ?Uuid $id = null;

#[ORM\Column(length: 20)]
#[Groups(['space.get', 'space.get.item', 'activity_area.get'])]
private ?string $name = null;

public function getId(): ?Uuid
{
return $this->id;
}

public function setId(Uuid $id): void
{
$this->id = $id;
}

public function getName(): ?string
{
return $this->name;
}

public function setName(string $name): void
{
$this->name = $name;
}

public function toArray(): array
{
return [
'id' => $this->id?->toRfc4122(),
'name' => $this->name,
];
}
}
Loading