Skip to content

Commit

Permalink
feat: add workingGroup CRUD
Browse files Browse the repository at this point in the history
  • Loading branch information
r0mdau committed Mar 15, 2020
1 parent 586f332 commit 5eff472
Show file tree
Hide file tree
Showing 16 changed files with 538 additions and 2 deletions.
3 changes: 2 additions & 1 deletion etc/database.sql
Original file line number Diff line number Diff line change
Expand Up @@ -2,4 +2,5 @@ CREATE TABLE user (id INT AUTO_INCREMENT NOT NULL, name VARCHAR(255) NOT NULL, e
CREATE TABLE company (id INT AUTO_INCREMENT NOT NULL, name VARCHAR(255) NOT NULL, PRIMARY KEY(id)) DEFAULT CHARACTER SET utf8 COLLATE `utf8_unicode_ci` ENGINE = InnoDB;
ALTER TABLE user ADD company_id INT DEFAULT NULL;
ALTER TABLE user ADD CONSTRAINT FK_8D93D649979B1AD6 FOREIGN KEY (company_id) REFERENCES company (id) ON DELETE NO ACTION;
CREATE INDEX IDX_8D93D649979B1AD6 ON user (company_id);
CREATE INDEX IDX_8D93D649979B1AD6 ON user (company_id);
CREATE TABLE working_group (id INT AUTO_INCREMENT NOT NULL, name VARCHAR(255) NOT NULL, PRIMARY KEY(id)) DEFAULT CHARACTER SET utf8 COLLATE `utf8_unicode_ci` ENGINE = InnoDB;
117 changes: 117 additions & 0 deletions src/Application/ApplicationWorkingGroup.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,117 @@
<?php

namespace Fradoos\Application;

use Fradoos\Domain\Helper\HelperParameter;
use Fradoos\Domain\Presentation\Presentations;
use Fradoos\Domain\Repository\Repositories;
use Fradoos\Domain\WorkingGroup;

/**
* Class ApplicationWorkingGroup
* @package Fradoos\Application
*/
class ApplicationWorkingGroup extends HttpResources
{
/**
* @return ApplicationWorkingGroup
*/
public static function instance()
{
return new ApplicationWorkingGroup();
}

/**
* @SWG\Delete(
* path="/workingGroup/{id}", summary="Delete a workingGroup by id", description="",
* @SWG\Parameter(name="id", in="path", required=true, type="integer", description="WorkingGroup id"),
* @SWG\Response(response=204, description="")
* )
*/
public function delete($req, $res, $args)
{
Repositories::instance()->forWorkingGroup()->delete($args["id"]);

return $this->response($res, static::STATUS_NO_CONTENT);
}

/**
* @SWG\Get(
* path="/workingGroup/{id}", summary="Get a workingGroup by id", description="",
* @SWG\Parameter(name="id", in="path", required=true, type="integer", description="WorkingGroup id"),
* @SWG\Response(response=200, description="")
* )
*/
public function get($req, $res, $args)
{
$workingGroup = Repositories::instance()->forWorkingGroup()->get($args["id"]);

return $this->response(
$res, static::STATUS_OK,
Presentations::instance()->forWorkingGroup()->inJsonWith(
$workingGroup,
HelperParameter::getFields($req->getParam("fields"))
)
);
}

/**
* @SWG\Get(
* path="/workingGroup", summary="Get all workingGroups", description="",
* @SWG\Response(response=200, description="")
* )
*/
public function getAll($req, $res, $args)
{
$workingGroups = Repositories::instance()->forWorkingGroup()->getAll();

$presentation = Presentations::instance()->forWorkingGroup()->allInJsonWith(
$workingGroups,
HelperParameter::getFields($req->getParam("fields"))
);

return $this->response($res, static::STATUS_OK, $presentation);
}

/**
* @SWG\Post(
* path="/workingGroup", summary="Create a workingGroup", description="",
* @SWG\Parameter(name="name", in="formData", required=true, type="string", description="Name"),
* @SWG\Response(response=201, description="")
* )
*/
public function post($req, $res, $args)
{
$workingGroup = new WorkingGroup($req->getParam("name"));
Repositories::instance()->forWorkingGroup()->add($workingGroup);

return $this->response(
$res, static::STATUS_CREATED,
Presentations::instance()->forWorkingGroup()->inJson($workingGroup)
);
}

/**
* @SWG\Put(
* path="/workingGroup/{id}", summary="Replace a workingGroup by id", description="",
* @SWG\Parameter(name="id", in="path", required=true, type="integer", description="WorkingGroup id"),
* @SWG\Parameter(name="name", in="formData", required=true, type="string", description="Name"),
* @SWG\Response(response=201, description="")
* )
*/
public function put($req, $res, $args)
{
$presentation = "";
$status = static::STATUS_NOT_FOUND;

$workingGroup = Repositories::instance()->forWorkingGroup()->get($args["id"]);
if (!is_null($workingGroup)) {
$workingGroup->setName($req->getParam("name"));
Repositories::instance()->forWorkingGroup()->edit($workingGroup);
$presentation = Presentations::instance()->forWorkingGroup()->inJson($workingGroup);
$status = static::STATUS_CREATED;
}

return $this->response($res, $status, $presentation);
}
}
28 changes: 28 additions & 0 deletions src/Application/Presentation/JsonPresentationWorkingGroup.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,28 @@
<?php

namespace Fradoos\Application\Presentation;

use Fradoos\Domain\Presentation\IPresentation;
use Fradoos\Domain\WorkingGroup;

class JsonPresentationWorkingGroup extends SimpleJsonPresentation implements IPresentation
{
public static $name = 'name';

public function __construct()
{
parent::__construct();

$this->mappings[JsonPresentationWorkingGroup::$name] = function (WorkingGroup $object) {
return $object->getName();
};
}

public function allDefaultProperties()
{
return [
SimpleJsonPresentation::$id,
JsonPresentationWorkingGroup::$name,
];
}
}
8 changes: 8 additions & 0 deletions src/Application/Presentation/JsonPresentations.php
Original file line number Diff line number Diff line change
Expand Up @@ -21,4 +21,12 @@ public function forCompany()
{
return new JsonPresentationCompany();
}

/**
* @return JsonPresentationWorkingGroup
*/
public function forWorkingGroup()
{
return new JsonPresentationWorkingGroup();
}
}
2 changes: 2 additions & 0 deletions src/Domain/Presentation/Presentations.php
Original file line number Diff line number Diff line change
Expand Up @@ -34,4 +34,6 @@ public static function instance()
* @return mixed
*/
abstract public function forUser();
abstract public function forCompany();
abstract public function forWorkingGroup();
}
18 changes: 18 additions & 0 deletions src/Domain/Repository/IRepositoryWorkingGroup.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,18 @@
<?php

namespace Fradoos\Domain\Repository;

interface IRepositoryWorkingGroup
{
public function add($user);

public function delete($id);

public function edit($user);

public function get($id);

public function getAll();

public function getByName($name);
}
2 changes: 2 additions & 0 deletions src/Domain/Repository/Repositories.php
Original file line number Diff line number Diff line change
Expand Up @@ -23,6 +23,8 @@ abstract public function forUser();

abstract public function forCompany();

abstract public function forWorkingGroup();

abstract public function beginTransaction();

abstract public function rollback();
Expand Down
48 changes: 48 additions & 0 deletions src/Domain/WorkingGroup.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,48 @@
<?php

namespace Fradoos\Domain;

use Fradoos\Domain\Helper\HelperParameter;

/**
* Class WorkingGroup
* @package Fradoos\Domain
*/
class WorkingGroup extends Entity
{
/**
* @var $name string
*/
private $name;

/**
* WorkingGroup constructor.
* @param $name
* @param $email
* @throws Error\ErrorParameter
*/
public function __construct($name)
{
$this->setName($name);
}

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

/**
* @param $name
* @throws Error\ErrorParameter
*/
public function setName(string $name)
{
HelperParameter::checkNotEmpty($name, "The workingGroup name is mandatory.");
if ($this->name != $name) {
$this->name = $name;
}
}
}
14 changes: 14 additions & 0 deletions src/Infrastructure/Repository/Doctrine/DoctrineRepositories.php
Original file line number Diff line number Diff line change
Expand Up @@ -35,16 +35,30 @@ public static function createEntityManager($configurationConnexion)
return EntityManager::create($configurationConnexion, $configuration);
}

/**
* @return DoctrineRepositoryUser
*/
public function forUser()
{
return new DoctrineRepositoryUser($this->entityManager);
}

/**
* @return DoctrineRepositoryCompany
*/
public function forCompany()
{
return new DoctrineRepositoryCompany($this->entityManager);
}

/**
* @return DoctrineRepositoryWorkingGroup
*/
public function forWorkingGroup()
{
return new DoctrineRepositoryWorkingGroup($this->entityManager);
}

public function getEntityManager()
{
return $this->entityManager;
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,20 @@
<?php

namespace Fradoos\Infrastructure\Repository\Doctrine;

use Fradoos\Domain\WorkingGroup;
use Fradoos\Domain\Helper\HelperParameter;
use Fradoos\Domain\Repository\IRepositoryWorkingGroup;

class DoctrineRepositoryWorkingGroup extends SimpleDoctrineRepository implements IRepositoryWorkingGroup
{
protected static $entity = WorkingGroup::class;

public function getByName($name)
{
HelperParameter::checkNotEmpty($name, "Impossible to get working group with empty name.");
return $this->entityManager
->getRepository(WorkingGroup::class)
->findBy(['name' => $name]);
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
<?php

use Doctrine\ORM\Mapping\Builder\ClassMetadataBuilder;

$builder = new ClassMetadataBuilder($metadata);
$builder->setTable("working_group");
$builder->addField("name", "string", ["length" => 255, "nullable" => false]);
8 changes: 7 additions & 1 deletion src/routes.php
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
<?php

use Fradoos\Application\{ApplicationCompany, ApplicationUser, Swagger};
use Fradoos\Application\{ApplicationCompany, ApplicationUser, ApplicationWorkingGroup, Swagger};

$id = "{id:\d+}";

Expand All @@ -19,3 +19,9 @@
$app->get("/user/$id", function ($req, $res, $args) {return ApplicationUser::instance()->get($req, $res, $args);});
$app->put("/user/$id", function ($req, $res, $args) {return ApplicationUser::instance()->put($req, $res, $args);});
$app->delete("/user/$id", function ($req, $res, $args) {return ApplicationUser::instance()->delete($req, $res, $args);});

$app->get("/workingGroup", function ($req, $res, $args) {return ApplicationWorkingGroup::instance()->getAll($req, $res, $args);});
$app->post("/workingGroup", function ($req, $res, $args) {return ApplicationWorkingGroup::instance()->post($req, $res, $args);});
$app->get("/workingGroup/$id", function ($req, $res, $args) {return ApplicationWorkingGroup::instance()->get($req, $res, $args);});
$app->put("/workingGroup/$id", function ($req, $res, $args) {return ApplicationWorkingGroup::instance()->put($req, $res, $args);});
$app->delete("/workingGroup/$id", function ($req, $res, $args) {return ApplicationWorkingGroup::instance()->delete($req, $res, $args);});

0 comments on commit 5eff472

Please sign in to comment.