mirror of
https://github.com/kevinveenbirkenbach/infinito.git
synced 2025-01-08 13:51:34 +01:00
Implemented Members attribut and optimized membership
This commit is contained in:
parent
a64541a9ad
commit
cb1316a380
33
application/src/Entity/Attribut/MembersAttribut.php
Normal file
33
application/src/Entity/Attribut/MembersAttribut.php
Normal file
@ -0,0 +1,33 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
namespace App\Entity\Attribut;
|
||||||
|
|
||||||
|
use Doctrine\Common\Collections\Collection;
|
||||||
|
use App\Entity\Source\SourceInterface;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @author kevinfrantz
|
||||||
|
*/
|
||||||
|
trait MembersAttribut
|
||||||
|
{
|
||||||
|
/**
|
||||||
|
* @var Collection|SourceInterface[]
|
||||||
|
*/
|
||||||
|
protected $memberships;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @return Collection|SourceInterface[]
|
||||||
|
*/
|
||||||
|
public function getMembers(): Collection
|
||||||
|
{
|
||||||
|
return $this->memberships;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @param Collection|SourceInterface[] $members
|
||||||
|
*/
|
||||||
|
public function setMembers(Collection $members): void
|
||||||
|
{
|
||||||
|
$this->memberships = $members;
|
||||||
|
}
|
||||||
|
}
|
22
application/src/Entity/Attribut/MembersAttributInterface.php
Normal file
22
application/src/Entity/Attribut/MembersAttributInterface.php
Normal file
@ -0,0 +1,22 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
namespace App\Entity\Attribut;
|
||||||
|
|
||||||
|
use Doctrine\Common\Collections\Collection;
|
||||||
|
use App\Entity\Source\SourceInterface;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @author kevinfrantz
|
||||||
|
*/
|
||||||
|
interface MembersAttributInterface
|
||||||
|
{
|
||||||
|
/**
|
||||||
|
* @param Collection|SourceInterface[] $members
|
||||||
|
*/
|
||||||
|
public function setMembers(Collection $members): void;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @return Collection|SourceInterface[]
|
||||||
|
*/
|
||||||
|
public function getMembers(): Collection;
|
||||||
|
}
|
@ -3,7 +3,7 @@
|
|||||||
namespace App\Entity\Attribut;
|
namespace App\Entity\Attribut;
|
||||||
|
|
||||||
use Doctrine\Common\Collections\Collection;
|
use Doctrine\Common\Collections\Collection;
|
||||||
use App\Entity\Source\Complex\Collection\TreeCollectionSourceInterface;
|
use App\Entity\Source\SourceInterface;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @author kevinfrantz
|
* @author kevinfrantz
|
||||||
@ -11,12 +11,12 @@ use App\Entity\Source\Complex\Collection\TreeCollectionSourceInterface;
|
|||||||
trait MembershipsAttribut
|
trait MembershipsAttribut
|
||||||
{
|
{
|
||||||
/**
|
/**
|
||||||
* @var Collection|TreeCollectionSourceInterface[]
|
* @var Collection|SourceInterface[]
|
||||||
*/
|
*/
|
||||||
protected $memberships;
|
protected $memberships;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @return Collection|TreeCollectionSourceInterface[]
|
* @return Collection|SourceInterface[]
|
||||||
*/
|
*/
|
||||||
public function getMemberships(): Collection
|
public function getMemberships(): Collection
|
||||||
{
|
{
|
||||||
@ -24,7 +24,7 @@ trait MembershipsAttribut
|
|||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @param Collection|TreeCollectionSourceInterface[] $memberships
|
* @param Collection|SourceInterface[] $memberships
|
||||||
*/
|
*/
|
||||||
public function setMemberships(Collection $memberships): void
|
public function setMemberships(Collection $memberships): void
|
||||||
{
|
{
|
||||||
|
@ -3,7 +3,7 @@
|
|||||||
namespace App\Entity\Attribut;
|
namespace App\Entity\Attribut;
|
||||||
|
|
||||||
use Doctrine\Common\Collections\Collection;
|
use Doctrine\Common\Collections\Collection;
|
||||||
use App\Entity\Source\Complex\Collection\TreeCollectionSourceInterface;
|
use App\Entity\Source\SourceInterface;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @author kevinfrantz
|
* @author kevinfrantz
|
||||||
@ -11,12 +11,12 @@ use App\Entity\Source\Complex\Collection\TreeCollectionSourceInterface;
|
|||||||
interface MembershipsAttributInterface
|
interface MembershipsAttributInterface
|
||||||
{
|
{
|
||||||
/**
|
/**
|
||||||
* @param Collection|TreeCollectionSourceInterface[] $groups
|
* @param Collection|SourceInterface[] $groups
|
||||||
*/
|
*/
|
||||||
public function setMemberships(Collection $memberships): void;
|
public function setMemberships(Collection $memberships): void;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @return Collection|TreeCollectionSourceInterface[]
|
* @return Collection|SourceInterface[]
|
||||||
*/
|
*/
|
||||||
public function getMemberships(): Collection;
|
public function getMemberships(): Collection;
|
||||||
}
|
}
|
||||||
|
@ -1,4 +1,5 @@
|
|||||||
<?php
|
<?php
|
||||||
|
|
||||||
namespace App\Entity\Source;
|
namespace App\Entity\Source;
|
||||||
|
|
||||||
use Doctrine\ORM\Mapping as ORM;
|
use Doctrine\ORM\Mapping as ORM;
|
||||||
@ -13,15 +14,14 @@ use App\Entity\Meta\LawInterface;
|
|||||||
use App\Entity\Meta\Law;
|
use App\Entity\Meta\Law;
|
||||||
use Doctrine\Common\Collections\ArrayCollection;
|
use Doctrine\Common\Collections\ArrayCollection;
|
||||||
use App\Entity\Attribut\MembershipsAttribut;
|
use App\Entity\Attribut\MembershipsAttribut;
|
||||||
use App\Entity\Source\Complex\Collection\TreeCollectionSourceInterface;
|
|
||||||
use App\Entity\Attribut\SlugAttribut;
|
use App\Entity\Attribut\SlugAttribut;
|
||||||
use Symfony\Bridge\Doctrine\Validator\Constraints\UniqueEntity;
|
use Symfony\Bridge\Doctrine\Validator\Constraints\UniqueEntity;
|
||||||
use Symfony\Component\Validator\Constraints as Assert;
|
use Symfony\Component\Validator\Constraints as Assert;
|
||||||
|
use App\Entity\Attribut\MembersAttribut;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
*
|
|
||||||
* @author kevinfrantz
|
* @author kevinfrantz
|
||||||
*
|
*
|
||||||
* @ORM\Entity
|
* @ORM\Entity
|
||||||
* @ORM\Table(name="source")
|
* @ORM\Table(name="source")
|
||||||
* @ORM\InheritanceType("JOINED")
|
* @ORM\InheritanceType("JOINED")
|
||||||
@ -43,7 +43,7 @@ use Symfony\Component\Validator\Constraints as Assert;
|
|||||||
*/
|
*/
|
||||||
abstract class AbstractSource extends AbstractEntity implements SourceInterface
|
abstract class AbstractSource extends AbstractEntity implements SourceInterface
|
||||||
{
|
{
|
||||||
use RelationAttribut,MembershipsAttribut, LawAttribut,SlugAttribut;
|
use RelationAttribut,MembershipsAttribut, LawAttribut,SlugAttribut,MembersAttribut;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* System slugs should be writen in UPPER CASES
|
* System slugs should be writen in UPPER CASES
|
||||||
@ -57,7 +57,6 @@ abstract class AbstractSource extends AbstractEntity implements SourceInterface
|
|||||||
protected $slug;
|
protected $slug;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
*
|
|
||||||
* @var RelationInterface
|
* @var RelationInterface
|
||||||
* @ORM\OneToOne(targetEntity="App\Entity\Meta\Relation",cascade={"persist", "remove"})
|
* @ORM\OneToOne(targetEntity="App\Entity\Meta\Relation",cascade={"persist", "remove"})
|
||||||
* @ORM\JoinColumn(name="relation_id", referencedColumnName="id", onDelete="CASCADE")
|
* @ORM\JoinColumn(name="relation_id", referencedColumnName="id", onDelete="CASCADE")
|
||||||
@ -66,9 +65,10 @@ abstract class AbstractSource extends AbstractEntity implements SourceInterface
|
|||||||
protected $relation;
|
protected $relation;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Many Sources have many Source Members
|
* Many Sources have many Source Members.
|
||||||
|
*
|
||||||
* @var Collection|SourceInterface[]
|
* @var Collection|SourceInterface[]
|
||||||
* @ORM\ManyToMany(targetEntity="AbstractSource", inversedBy="members",cascade={"persist"})
|
* @ORM\ManyToMany(targetEntity="AbstractSource", inversedBy="memberships",cascade={"persist"})
|
||||||
* @ORM\JoinTable(name="source_members",
|
* @ORM\JoinTable(name="source_members",
|
||||||
* joinColumns={@ORM\JoinColumn(name="source_id", referencedColumnName="id")},
|
* joinColumns={@ORM\JoinColumn(name="source_id", referencedColumnName="id")},
|
||||||
* inverseJoinColumns={@ORM\JoinColumn(name="member_id", referencedColumnName="id")}
|
* inverseJoinColumns={@ORM\JoinColumn(name="member_id", referencedColumnName="id")}
|
||||||
@ -77,14 +77,12 @@ abstract class AbstractSource extends AbstractEntity implements SourceInterface
|
|||||||
protected $members;
|
protected $members;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
*
|
|
||||||
* @var Collection|SourceInterface[]
|
* @var Collection|SourceInterface[]
|
||||||
* @ORM\ManyToMany(targetEntity="AbstractSource",mappedBy="members",cascade={"persist"})
|
* @ORM\ManyToMany(targetEntity="AbstractSource",mappedBy="members",cascade={"persist"})
|
||||||
*/
|
*/
|
||||||
protected $memberships;
|
protected $memberships;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
*
|
|
||||||
* @ORM\OneToOne(targetEntity="App\Entity\Meta\Law",cascade={"persist", "remove"})
|
* @ORM\OneToOne(targetEntity="App\Entity\Meta\Law",cascade={"persist", "remove"})
|
||||||
* @ORM\JoinColumn(name="law_id", referencedColumnName="id")
|
* @ORM\JoinColumn(name="law_id", referencedColumnName="id")
|
||||||
*
|
*
|
||||||
@ -99,5 +97,6 @@ abstract class AbstractSource extends AbstractEntity implements SourceInterface
|
|||||||
$this->relation->setSource($this);
|
$this->relation->setSource($this);
|
||||||
$this->law = new Law();
|
$this->law = new Law();
|
||||||
$this->memberships = new ArrayCollection();
|
$this->memberships = new ArrayCollection();
|
||||||
|
$this->members = new ArrayCollection();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -18,8 +18,11 @@ abstract class AbstractCollectionSource extends AbstractSource implements Collec
|
|||||||
|
|
||||||
/**
|
/**
|
||||||
* @var Collection|SourceInterface[]
|
* @var Collection|SourceInterface[]
|
||||||
* @ORM\ManyToMany(targetEntity="App\Entity\Source\AbstractSource",inversedBy="memberships")
|
* @ORM\ManyToMany(targetEntity="App\Entity\Source\AbstractSource")
|
||||||
* @ORM\JoinTable(name="source_group_members")
|
* @ORM\JoinTable(name="collection_source",
|
||||||
|
* joinColumns={@ORM\JoinColumn(name="collection_id", referencedColumnName="id")},
|
||||||
|
* inverseJoinColumns={@ORM\JoinColumn(name="source_id", referencedColumnName="id")}
|
||||||
|
* )
|
||||||
*/
|
*/
|
||||||
protected $collection;
|
protected $collection;
|
||||||
|
|
||||||
|
@ -3,7 +3,6 @@
|
|||||||
namespace App\Entity\Source\Complex\Collection;
|
namespace App\Entity\Source\Complex\Collection;
|
||||||
|
|
||||||
use Doctrine\ORM\Mapping as ORM;
|
use Doctrine\ORM\Mapping as ORM;
|
||||||
use App\Entity\Attribut\CollectionAttribut;
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @author kevinfrantz
|
* @author kevinfrantz
|
||||||
@ -11,5 +10,4 @@ use App\Entity\Attribut\CollectionAttribut;
|
|||||||
*/
|
*/
|
||||||
class TreeCollectionSource extends AbstractCollectionSource implements TreeCollectionSourceInterface
|
class TreeCollectionSource extends AbstractCollectionSource implements TreeCollectionSourceInterface
|
||||||
{
|
{
|
||||||
use CollectionAttribut;
|
|
||||||
}
|
}
|
||||||
|
@ -8,10 +8,11 @@ use App\Entity\Attribut\LawAttributInterface;
|
|||||||
use App\Entity\Attribut\RelationAttributInterface;
|
use App\Entity\Attribut\RelationAttributInterface;
|
||||||
use App\Entity\Attribut\MembershipsAttributInterface;
|
use App\Entity\Attribut\MembershipsAttributInterface;
|
||||||
use App\Entity\Attribut\SlugAttributInterface;
|
use App\Entity\Attribut\SlugAttributInterface;
|
||||||
|
use App\Entity\Attribut\MembersAttributInterface;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @author kevinfrantz
|
* @author kevinfrantz
|
||||||
*/
|
*/
|
||||||
interface SourceInterface extends IdAttributInterface, EntityInterface, MembershipsAttributInterface, LawAttributInterface, RelationAttributInterface, SlugAttributInterface
|
interface SourceInterface extends IdAttributInterface, EntityInterface, MembershipsAttributInterface, LawAttributInterface, RelationAttributInterface, SlugAttributInterface, MembersAttributInterface
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
|
@ -0,0 +1,37 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
namespace Tests\Unit\Entity\Attribut;
|
||||||
|
|
||||||
|
use PHPUnit\Framework\TestCase;
|
||||||
|
use Doctrine\Common\Collections\ArrayCollection;
|
||||||
|
use App\Entity\Attribut\MembersAttributInterface;
|
||||||
|
use App\Entity\Source\SourceInterface;
|
||||||
|
use App\Entity\Attribut\MembersAttribut;
|
||||||
|
|
||||||
|
class MembersAttributTest extends TestCase
|
||||||
|
{
|
||||||
|
/**
|
||||||
|
* @var MembersAttributInterface
|
||||||
|
*/
|
||||||
|
protected $members;
|
||||||
|
|
||||||
|
public function setUp(): void
|
||||||
|
{
|
||||||
|
$this->members = new class() implements MembersAttributInterface {
|
||||||
|
use MembersAttribut;
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
||||||
|
public function testConstructor(): void
|
||||||
|
{
|
||||||
|
$this->expectException(\TypeError::class);
|
||||||
|
$this->members->getMembers();
|
||||||
|
}
|
||||||
|
|
||||||
|
public function testAccessors(): void
|
||||||
|
{
|
||||||
|
$membership = $this->createMock(SourceInterface::class);
|
||||||
|
$this->assertNull($this->members->setMembers(new ArrayCollection([$membership])));
|
||||||
|
$this->assertEquals($this->members->getMembers()->get(0), $membership);
|
||||||
|
}
|
||||||
|
}
|
@ -32,6 +32,7 @@ class AbstractSourceTest extends TestCase
|
|||||||
$this->assertInstanceOf(RelationInterface::class, $this->source->getRelation());
|
$this->assertInstanceOf(RelationInterface::class, $this->source->getRelation());
|
||||||
$this->assertInstanceOf(Collection::class, $this->source->getMemberships());
|
$this->assertInstanceOf(Collection::class, $this->source->getMemberships());
|
||||||
$this->assertInstanceOf(LawInterface::class, $this->source->getLaw());
|
$this->assertInstanceOf(LawInterface::class, $this->source->getLaw());
|
||||||
|
$this->assertInstanceOf(Collection::class, $this->source->getMembers());
|
||||||
}
|
}
|
||||||
|
|
||||||
public function testSlugInit(): void
|
public function testSlugInit(): void
|
||||||
|
@ -1,4 +1,5 @@
|
|||||||
<?php
|
<?php
|
||||||
|
|
||||||
namespace tests\Unit\Repository;
|
namespace tests\Unit\Repository;
|
||||||
|
|
||||||
use Symfony\Bundle\FrameworkBundle\Test\KernelTestCase;
|
use Symfony\Bundle\FrameworkBundle\Test\KernelTestCase;
|
||||||
@ -10,33 +11,27 @@ use App\Entity\Source\Complex\UserSource;
|
|||||||
|
|
||||||
class UserSourceRepositoryTest extends KernelTestCase
|
class UserSourceRepositoryTest extends KernelTestCase
|
||||||
{
|
{
|
||||||
|
|
||||||
/**
|
/**
|
||||||
*
|
|
||||||
* @var EntityManager
|
* @var EntityManager
|
||||||
*/
|
*/
|
||||||
protected $entityManager;
|
protected $entityManager;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
*
|
|
||||||
* @var UserSourceRepository
|
* @var UserSourceRepository
|
||||||
*/
|
*/
|
||||||
protected $userSourceRepository;
|
protected $userSourceRepository;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
*
|
|
||||||
* @var UserSourceInterface
|
* @var UserSourceInterface
|
||||||
*/
|
*/
|
||||||
protected $loadedUserSource;
|
protected $loadedUserSource;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
*
|
|
||||||
* @var UserInterface
|
* @var UserInterface
|
||||||
*/
|
*/
|
||||||
protected $user;
|
protected $user;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
*
|
|
||||||
* @var UserSourceInterface
|
* @var UserSourceInterface
|
||||||
*/
|
*/
|
||||||
protected $userSource;
|
protected $userSource;
|
||||||
@ -89,7 +84,6 @@ class UserSourceRepositoryTest extends KernelTestCase
|
|||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
*
|
|
||||||
* {@inheritdoc}
|
* {@inheritdoc}
|
||||||
*
|
*
|
||||||
* @see \Symfony\Bundle\FrameworkBundle\Test\KernelTestCase::tearDown()
|
* @see \Symfony\Bundle\FrameworkBundle\Test\KernelTestCase::tearDown()
|
||||||
|
Loading…
Reference in New Issue
Block a user