Merge pull request #75 from goteo/feat/project-categories
[feat] Project categories
This commit is contained in:
@@ -8,6 +8,7 @@ use ApiPlatform\Metadata as API;
|
||||
use App\ApiResource\Accounting\AccountingApiResource;
|
||||
use App\ApiResource\LocalizedApiResourceTrait;
|
||||
use App\ApiResource\User\UserApiResource;
|
||||
use App\Entity\Project\Category;
|
||||
use App\Entity\Project\Project;
|
||||
use App\Entity\Project\ProjectStatus;
|
||||
use App\Entity\Project\ProjectVideo;
|
||||
@@ -31,8 +32,8 @@ use Symfony\Component\Validator\Constraints as Assert;
|
||||
#[API\GetCollection()]
|
||||
#[API\Post(security: 'is_granted("ROLE_USER")')]
|
||||
#[API\Get()]
|
||||
#[API\Patch(security: 'is_granted("PROJECT_EDIT", object)')]
|
||||
#[API\Delete(security: 'is_granted("PROJECT_EDIT", object)')]
|
||||
#[API\Patch(security: 'is_granted("PROJECT_EDIT", previous_object)')]
|
||||
#[API\Delete(security: 'is_granted("PROJECT_EDIT", previous_object)')]
|
||||
class ProjectApiResource
|
||||
{
|
||||
use LocalizedApiResourceTrait;
|
||||
@@ -66,6 +67,13 @@ class ProjectApiResource
|
||||
#[Assert\NotBlank()]
|
||||
public string $subtitle;
|
||||
|
||||
/**
|
||||
* One of the available categories.
|
||||
*/
|
||||
#[Assert\NotBlank()]
|
||||
#[API\ApiFilter(filterClass: SearchFilter::class, strategy: 'exact')]
|
||||
public Category $category;
|
||||
|
||||
/**
|
||||
* ISO 3166 data about the Project's territory of interest.
|
||||
*/
|
||||
@@ -99,7 +107,7 @@ class ProjectApiResource
|
||||
* The status of a Project represents how far it is in it's life-cycle.
|
||||
*/
|
||||
#[API\ApiFilter(filterClass: SearchFilter::class, strategy: 'exact')]
|
||||
#[API\ApiProperty(securityPostDenormalize: 'is_granted("PROJECT_EDIT")')]
|
||||
#[API\ApiProperty(securityPostDenormalize: 'is_granted("PROJECT_EDIT", previous_object)')]
|
||||
public ProjectStatus $status = ProjectStatus::InEditing;
|
||||
|
||||
/**
|
||||
|
||||
@@ -2,6 +2,7 @@
|
||||
|
||||
namespace App\Benzina;
|
||||
|
||||
use App\Entity\Project\Category;
|
||||
use App\Entity\Project\Project;
|
||||
use App\Entity\Project\ProjectStatus;
|
||||
use App\Entity\Project\ProjectTerritory;
|
||||
@@ -57,6 +58,7 @@ class ProjectsPump implements PumpInterface
|
||||
$project->setTranslatableLocale($record['lang']);
|
||||
$project->setTitle($record['name']);
|
||||
$project->setSubtitle($record['subtitle']);
|
||||
$project->setCategory($this->getProjectCategory($record));
|
||||
$project->setTerritory($this->getProjectTerritory($record));
|
||||
$project->setDescription($record['description']);
|
||||
$project->setVideo($this->getProjectVideo($record));
|
||||
@@ -87,8 +89,6 @@ class ProjectsPump implements PumpInterface
|
||||
return ProjectStatus::InEditing;
|
||||
case 2:
|
||||
return ProjectStatus::InReview;
|
||||
case 0:
|
||||
return ProjectStatus::Rejected;
|
||||
case 3:
|
||||
return ProjectStatus::InCampaign;
|
||||
case 6:
|
||||
@@ -97,6 +97,41 @@ class ProjectsPump implements PumpInterface
|
||||
return ProjectStatus::InFunding;
|
||||
case 5:
|
||||
return ProjectStatus::Fulfilled;
|
||||
case 0:
|
||||
default:
|
||||
return ProjectStatus::Rejected;
|
||||
}
|
||||
}
|
||||
|
||||
private function getProjectCategory(array $record): Category
|
||||
{
|
||||
switch ($record['social_commitment']) {
|
||||
case 1:
|
||||
return Category::Solidary;
|
||||
case 2:
|
||||
return Category::LibreSoftware;
|
||||
case 3:
|
||||
case 16:
|
||||
return Category::Employment;
|
||||
case 5:
|
||||
return Category::Journalism;
|
||||
case 6:
|
||||
return Category::Education;
|
||||
case 7:
|
||||
return Category::Culture;
|
||||
case 8:
|
||||
case 15:
|
||||
return Category::Ecology;
|
||||
case 11:
|
||||
case 12:
|
||||
return Category::Democracy;
|
||||
case 13:
|
||||
return Category::Equity;
|
||||
case 14:
|
||||
return Category::HealthCares;
|
||||
case 10:
|
||||
default:
|
||||
return Category::OpenData;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -0,0 +1,30 @@
|
||||
<?php
|
||||
|
||||
namespace App\Entity\Project;
|
||||
|
||||
enum Category: string
|
||||
{
|
||||
case Solidary = 'solidary';
|
||||
|
||||
case LibreSoftware = 'libre-software';
|
||||
|
||||
case Employment = 'employment';
|
||||
|
||||
case Design = 'design';
|
||||
|
||||
case Journalism = 'journalism';
|
||||
|
||||
case Education = 'education';
|
||||
|
||||
case Culture = 'culture';
|
||||
|
||||
case Ecology = 'ecology';
|
||||
|
||||
case HealthCares = 'health-and-cares';
|
||||
|
||||
case OpenData = 'open-data';
|
||||
|
||||
case Democracy = 'democracy';
|
||||
|
||||
case Equity = 'equity';
|
||||
}
|
||||
@@ -50,6 +50,9 @@ class Project implements UserOwnedInterface, AccountingOwnerInterface, Localized
|
||||
#[Gedmo\Translatable()]
|
||||
private ?string $subtitle = null;
|
||||
|
||||
#[ORM\Column(enumType: Category::class)]
|
||||
private ?Category $category = null;
|
||||
|
||||
/**
|
||||
* Project's territory of interest.
|
||||
*/
|
||||
@@ -151,6 +154,18 @@ class Project implements UserOwnedInterface, AccountingOwnerInterface, Localized
|
||||
return $this;
|
||||
}
|
||||
|
||||
public function getCategory(): ?Category
|
||||
{
|
||||
return $this->category;
|
||||
}
|
||||
|
||||
public function setCategory(Category $category): static
|
||||
{
|
||||
$this->category = $category;
|
||||
|
||||
return $this;
|
||||
}
|
||||
|
||||
public function getTerritory(): ?ProjectTerritory
|
||||
{
|
||||
return $this->territory;
|
||||
|
||||
@@ -3,6 +3,7 @@
|
||||
namespace App\Tests\Entity;
|
||||
|
||||
use ApiPlatform\Symfony\Bundle\Test\ApiTestCase;
|
||||
use App\Entity\Project\Category;
|
||||
use App\Entity\Project\Project;
|
||||
use App\Entity\Project\ProjectStatus;
|
||||
use App\Entity\Project\ProjectTerritory;
|
||||
@@ -42,6 +43,7 @@ class ProjectApiTest extends ApiTestCase
|
||||
$project = new Project();
|
||||
$project->setTitle('Test Project');
|
||||
$project->setSubtitle('Test Project Subtitle');
|
||||
$project->setCategory(Category::LibreSoftware);
|
||||
$project->setDescription('Test Project Description');
|
||||
$project->setTerritory(new ProjectTerritory('ES'));
|
||||
$project->setOwner($owner);
|
||||
|
||||
Reference in New Issue
Block a user