<?php
namespace App\Entity;
use Doctrine\ORM\Mapping as ORM;
use App\Repository\TransactionRepository;
use ApiPlatform\Core\Annotation\ApiFilter;
use App\Entity\Traits\TimestampableEntity;
use ApiPlatform\Core\Annotation\ApiResource;
use Symfony\Component\Serializer\Annotation\Groups;
use ApiPlatform\Core\Bridge\Doctrine\Orm\Filter\OrderFilter;
use ApiPlatform\Core\Bridge\Doctrine\Orm\Filter\SearchFilter;
/**
* @ApiResource(
* attributes={"security"="is_granted('ROLE_SUPER_ADMIN')"},
* normalizationContext={"groups"={"Transaction:Read"}, "skip_null_values"=false},
* denormalizationContext={"groups"={"Transaction:Write"}},
* collectionOperations={
* "get_transaction"={
* "path"="/transactions/get-transaction",
* "method"="GET",
* "security"="is_granted('IS_AUTHENTICATED_FULLY')"
* }
* },
* itemOperations={
* "get"
* }
* )
* @ApiFilter(SearchFilter::class, properties={"id": "exact", "client.id": "exact", "user.id": "exact", "status": "exact", "stripeSessionId": "exact"})
* @ApiFilter(OrderFilter::class, properties={"id", "createdAt"})
* @ORM\Entity(repositoryClass=TransactionRepository::class)
*/
class Transaction
{
/**
* Hook timestampable behavior
* updates createdAt, updatedAt fields
*/
use TimestampableEntity;
/**
* @ORM\Id
* @ORM\GeneratedValue
* @ORM\Column(type="integer")
* @Groups({"Transaction:Read"})
*/
private $id;
/**
* @ORM\Column(type="integer")
* @Groups({"Transaction:Read"})
*/
private $totalAmount;
/**
* @ORM\Column(type="string", length=32)
* @Groups({"Transaction:Read"})
*/
private $status;
public const TRANSACTION_STATUS_CREATED = "CREATED";
public const TRANSACTION_STATUS_SUCCESS = "SUCCESS";
public const TRANSACTION_STATUS_FAILED = "FAILED";
/**
* @ORM\ManyToOne(targetEntity=User::class, inversedBy="transactions")
* @Groups({"Transaction:Read"})
*/
private $user;
/**
* @ORM\ManyToOne(targetEntity=Client::class, inversedBy="transactions")
* @ORM\JoinColumn(nullable=false)
*/
private $client;
/**
* @ORM\Column(type="json", nullable=true)
* @Groups({"Transaction:Read"})
*/
private $req = [];
/**
* @ORM\Column(type="json", nullable=true)
*/
private $res = [];
/**
* @ORM\Column(type="string", length=255, nullable=true)
*/
private $stripeSessionId;
/**
* @ORM\ManyToOne(targetEntity=Container::class)
*/
private $container;
/**
* @ORM\Column(type="json", nullable=true)
* @Groups({"Transaction:Read"})
*/
private $confirmRes = [];
public function getId(): ?int
{
return $this->id;
}
public function getTotalAmount(): ?int
{
return $this->totalAmount;
}
public function setTotalAmount(int $totalAmount): self
{
$this->totalAmount = $totalAmount;
return $this;
}
public function getStatus(): ?string
{
return $this->status;
}
public function setStatus(string $status): self
{
$this->status = $status;
return $this;
}
public function getUser(): ?User
{
return $this->user;
}
public function setUser(?User $user): self
{
$this->user = $user;
return $this;
}
public function getClient(): ?Client
{
return $this->client;
}
public function setClient(?Client $client): self
{
$this->client = $client;
return $this;
}
public function getReq(): ?array
{
return $this->req;
}
public function setReq(?array $req): self
{
$this->req = $req;
return $this;
}
public function getRes(): ?array
{
return $this->res;
}
public function setRes(?array $res): self
{
$this->res = $res;
return $this;
}
public function getStripeSessionId(): ?string
{
return $this->stripeSessionId;
}
public function setStripeSessionId(?string $stripeSessionId): self
{
$this->stripeSessionId = $stripeSessionId;
return $this;
}
public function getContainer(): ?Container
{
return $this->container;
}
public function setContainer(?Container $container): self
{
$this->container = $container;
return $this;
}
public function getConfirmRes(): ?array
{
return $this->confirmRes;
}
public function setConfirmRes(?array $confirmRes): self
{
$this->confirmRes = $confirmRes;
return $this;
}
}