feat(db): add entities

This commit is contained in:
2024-08-02 14:13:25 +02:00
parent 07d7a3025a
commit 857507abe5
17 changed files with 652 additions and 0 deletions

View File

@@ -0,0 +1,32 @@
<?php
declare(strict_types=1);
namespace App\Entity\Database\Comments;
use App\Entity\Database\Posts\Post;
use Doctrine\ORM\Mapping\Column;
use Doctrine\ORM\Mapping\Entity;
use Doctrine\ORM\Mapping\Id;
use Doctrine\ORM\Mapping\ManyToOne;
use Doctrine\ORM\Mapping\Table;
#[Entity]
#[Table(name: "comments")]
class Comment
{
public function __construct(
#[Id,
Column]
public ?int $id,
#[ManyToOne(targetEntity: Post::class, inversedBy: "comments")]
public Post $post,
#[Column(type: "text")]
public string $name,
#[Column(length: 320 /* see RFC5321 */)]
public string $email,
#[Column(type: "text")]
public string $body,
) {
}
}

View File

@@ -0,0 +1,39 @@
<?php
declare(strict_types=1);
namespace App\Entity\Database\Posts;
use App\Entity\Database\Comments\Comment;
use App\Entity\Database\Users\User;
use App\Repository\Post\PostRepository;
use Doctrine\Common\Collections\Collection;
use Doctrine\ORM\Mapping\Column;
use Doctrine\ORM\Mapping\Entity;
use Doctrine\ORM\Mapping\Id;
use Doctrine\ORM\Mapping\ManyToOne;
use Doctrine\ORM\Mapping\OneToMany;
use Doctrine\ORM\Mapping\Table;
#[Entity(repositoryClass: PostRepository::class)]
#[Table(name: "posts")]
class Post
{
public function __construct(
#[Id,
Column]
public ?int $id,
#[ManyToOne(targetEntity: User::class)]
public User $user,
#[Column(type: "text")]
public string $title,
#[Column(type: "text")]
public string $body,
/**
* @var Collection<int, Comment> $comments
*/
#[OneToMany(targetEntity: Comment::class, mappedBy: "post")]
public Collection $comments,
) {
}
}

View File

@@ -0,0 +1,40 @@
<?php
declare(strict_types=1);
namespace App\Entity\Database\Users;
use App\Repository\Users\AddressRepository;
use Doctrine\ORM\Mapping\Column;
use Doctrine\ORM\Mapping\Entity;
use Doctrine\ORM\Mapping\GeneratedValue;
use Doctrine\ORM\Mapping\Id;
use Doctrine\ORM\Mapping\OneToOne;
use Doctrine\ORM\Mapping\Table;
#[Entity(repositoryClass: AddressRepository::class)]
#[Table(name: "addresses")]
class Address
{
public function __construct(
#[Id,
Column,
GeneratedValue(strategy: "SEQUENCE")]
public ?int $id,
#[OneToOne(targetEntity: User::class, mappedBy: 'address')]
public ?User $user,
#[Column(type: "text")]
public string $street,
#[Column(type: "text")]
public string $suite,
#[Column(type: "text")]
public string $city,
#[Column(type: "text")]
public string $zipcode,
#[Column]
public float $lat,
#[Column]
public float $lng,
) {
}
}

View File

@@ -0,0 +1,39 @@
<?php
declare(strict_types=1);
namespace App\Entity\Database\Users;
use App\Repository\Users\CompanyRepository;
use Doctrine\Common\Collections\Collection;
use Doctrine\ORM\Mapping\Column;
use Doctrine\ORM\Mapping\Entity;
use Doctrine\ORM\Mapping\GeneratedValue;
use Doctrine\ORM\Mapping\Id;
use Doctrine\ORM\Mapping\OneToMany;
use Doctrine\ORM\Mapping\Table;
#[Entity(repositoryClass: CompanyRepository::class)]
#[Table(name: "companies")]
class Company
{
public function __construct(
#[Id,
Column,
GeneratedValue(strategy: "SEQUENCE")]
public ?int $id,
/**
* @var Collection<int, User> $users
*/
#[OneToMany(targetEntity: User::class, mappedBy: 'company')]
public Collection $users,
// TODO: prepokladam ze tohle muzu povazovat za klic a vsechny dalsi parametry budou stejne pro kazdou company se stejnym jmenem
#[Column(type: "text", unique: true)]
public string $name,
#[Column(type: "text")]
public string $catchPhrase,
#[Column(type: "text")]
public string $bs,
) {
}
}

View File

@@ -0,0 +1,42 @@
<?php
declare(strict_types=1);
namespace App\Entity\Database\Users;
use App\Repository\Users\UserRepository;
use Doctrine\ORM\Mapping\Column;
use Doctrine\ORM\Mapping\Entity;
use Doctrine\ORM\Mapping\Id;
use Doctrine\ORM\Mapping\ManyToOne;
use Doctrine\ORM\Mapping\OneToOne;
use Doctrine\ORM\Mapping\Table;
#[Entity(repositoryClass: UserRepository::class)]
#[Table(name: "users")]
class User
{
public function __construct(
#[Id,
Column]
public ?int $id,
#[Column(type: "text")] // TODO: type: text is really non-optimal. But there is no docs for api
public string $name,
#[Column(type: "text")]
public string $username,
#[Column(type: "text")]
public string $email,
#[Column(type: "text")]
public string $phone,
#[Column(type: "text")]
public string $website,
#[OneToOne(targetEntity: Address::class, inversedBy: "user")]
public Address $address,
#[ManyToOne(targetEntity: Company::class, inversedBy: "users")]
public Company $company,
) {
if (empty($this->address->user)) {
$this->address->user = $this;
}
}
}