Optimized draft for MemberRelation

This commit is contained in:
Kevin Frantz
2018-11-26 21:41:06 +01:00
parent ce8f53780a
commit b23f507da8
16 changed files with 296 additions and 46 deletions

View File

@@ -0,0 +1,50 @@
<?php
namespace App\Domain\MemberManagement;
use App\Entity\Meta\Relation\Member\MemberRelationInterface;
final class MemberManager implements MemberManagerInterface
{
/**
* @var MemberRelationInterface
*/
private $memberRelation;
public function __construct(MemberRelationInterface $memberRelation)
{
$this->memberRelation = $memberRelation;
}
public function addMember(MemberRelationInterface $member): void
{
if (!$this->memberRelation->getMembers()->contains($member)) {
$this->memberRelation->getMembers()[] = $member;
(new self($member))->addMembership($this->memberRelation);
}
}
public function removeMember(MemberRelationInterface $member): void
{
if ($this->memberRelation->getMembers()->contains($member)) {
$this->memberRelation->getMembers()->removeElement($member);
(new self($member))->removeMembership($this->memberRelation);
}
}
public function addMembership(MemberRelationInterface $membership): void
{
if (!$this->memberRelation->getMemberships()->contains($membership)) {
$this->memberRelation->getMemberships()[] = $membership;
(new self($membership))->addMember($this->memberRelation);
}
}
public function removeMembership(MemberRelationInterface $membership): void
{
if ($this->memberRelation->getMemberships()->contains($membership)) {
$this->memberRelation->getMemberships()->removeElement($membership);
(new self($membership))->removeMember($this->memberRelation);
}
}
}

View File

@@ -0,0 +1,28 @@
<?php
namespace App\Domain\MemberManagement;
use App\Entity\Meta\Relation\Member\MemberRelationInterface;
interface MemberManagerInterface
{
/**
* @param MemberRelationInterface $member
*/
public function addMember(MemberRelationInterface $member): void;
/**
* @param MemberRelationInterface $member
*/
public function removeMember(MemberRelationInterface $member): void;
/**
* @param MemberRelationInterface $membership
*/
public function addMembership(MemberRelationInterface $membership): void;
/**
* @param MemberRelationInterface $membership
*/
public function removeMembership(MemberRelationInterface $membership): void;
}