Update all the PDO calls, flesh out more of the Episode repository.
This commit is contained in:
parent
20a9edf770
commit
cbde3e2fbf
@ -44,6 +44,21 @@ class Episode
|
|||||||
return $this->duration;
|
return $this->duration;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public function getDescription(): string
|
||||||
|
{
|
||||||
|
return $this->description;
|
||||||
|
}
|
||||||
|
|
||||||
|
public function getPublishedDate(): DateTimeImmutable
|
||||||
|
{
|
||||||
|
return $this->publishedDate;
|
||||||
|
}
|
||||||
|
|
||||||
|
public function getEpisodeType(): string
|
||||||
|
{
|
||||||
|
return $this->episodeType;
|
||||||
|
}
|
||||||
|
|
||||||
public function getSerialNumber(): int
|
public function getSerialNumber(): int
|
||||||
{
|
{
|
||||||
return $this->serialNumber;
|
return $this->serialNumber;
|
||||||
@ -79,7 +94,7 @@ class Episode
|
|||||||
$props['serialNumber'],
|
$props['serialNumber'],
|
||||||
(bool) $props['explicit'],
|
(bool) $props['explicit'],
|
||||||
$props['publishedDate'],
|
$props['publishedDate'],
|
||||||
$props['episdoeType']
|
$props['episodeType']
|
||||||
);
|
);
|
||||||
|
|
||||||
if ($props['id']) {
|
if ($props['id']) {
|
||||||
|
@ -120,10 +120,16 @@ class ChannelRepository implements ChannelRepositoryInterface
|
|||||||
|
|
||||||
$insertId = $this->db->getConnection()->lastInsertId();
|
$insertId = $this->db->getConnection()->lastInsertId();
|
||||||
$channel->setId($insertId);
|
$channel->setId($insertId);
|
||||||
|
$channel->setCreatedAt(new DateTimeImmutable());
|
||||||
|
$channel->setUpdatedAt(new DateTime());
|
||||||
return $channel;
|
return $channel;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
* There are side-effects to this method, where the given Channel entity
|
||||||
|
* will have its `updatedAt` property set if the update in the database
|
||||||
|
* is successful.
|
||||||
|
*
|
||||||
* @param Channel $channel
|
* @param Channel $channel
|
||||||
* @return bool
|
* @return bool
|
||||||
* @throws Throwable
|
* @throws Throwable
|
||||||
@ -142,7 +148,7 @@ class ChannelRepository implements ChannelRepositoryInterface
|
|||||||
";
|
";
|
||||||
|
|
||||||
$statement = $this->db->getConnection()->prepare($query);
|
$statement = $this->db->getConnection()->prepare($query);
|
||||||
return $statement->execute([
|
$result = $statement->execute([
|
||||||
$channel->getName(),
|
$channel->getName(),
|
||||||
$channel->getSlug(),
|
$channel->getSlug(),
|
||||||
$channel->getDescription(),
|
$channel->getDescription(),
|
||||||
@ -152,6 +158,12 @@ class ChannelRepository implements ChannelRepositoryInterface
|
|||||||
$channel->isExplicit(),
|
$channel->isExplicit(),
|
||||||
$channel->getId(),
|
$channel->getId(),
|
||||||
]);
|
]);
|
||||||
|
|
||||||
|
if ($result == true) {
|
||||||
|
$channel->setUpdatedAt(new DateTime());
|
||||||
|
}
|
||||||
|
|
||||||
|
return $result;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -5,6 +5,7 @@ namespace Slovocast\Domain\Repository\Episode;
|
|||||||
use DateTimeImmutable;
|
use DateTimeImmutable;
|
||||||
use DateTime;
|
use DateTime;
|
||||||
use Slovocast\Domain\Entity\Episode;
|
use Slovocast\Domain\Entity\Episode;
|
||||||
|
use Slovocast\Domain\Entity\Channel;
|
||||||
use Slovocast\Domain\Repository\Episode\EpisodeRepositoryInterface;
|
use Slovocast\Domain\Repository\Episode\EpisodeRepositoryInterface;
|
||||||
use Slovocast\Exception\EntityNotFoundException;
|
use Slovocast\Exception\EntityNotFoundException;
|
||||||
use Slovocast\Infrastructure\Api\Database\DatabaseHandlerInterface;
|
use Slovocast\Infrastructure\Api\Database\DatabaseHandlerInterface;
|
||||||
@ -30,9 +31,56 @@ class EpisodeRepository implements EpisodeRepositoryInterface
|
|||||||
$results = $statement->fetch(\PDO::FETCH_ASSOC);
|
$results = $statement->fetch(\PDO::FETCH_ASSOC);
|
||||||
|
|
||||||
if (!is_array($results) || !count($results)) {
|
if (!is_array($results) || !count($results)) {
|
||||||
throw new EntityNotFoundException("Unable to find Episode.");
|
throw new EntityNotFoundException("Unable to find episode.");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
$episode = $this->getEpisodeFromResults($results);
|
||||||
|
return $episode;
|
||||||
|
}
|
||||||
|
|
||||||
|
public function getFromChannel(Channel $channel): array
|
||||||
|
{
|
||||||
|
$query = "SELECT * FROM episodes WHERE channel_id = :channelId";
|
||||||
|
$statement = $this->db->getConnection()->query($query);
|
||||||
|
$results = $statement->fetch(\PDO::FETCH_ASSOC);
|
||||||
|
|
||||||
|
if (!is_array($results) || !count($results)) {
|
||||||
|
throw new EntityNotFoundException("Unable to find any episodes.");
|
||||||
|
}
|
||||||
|
|
||||||
|
return array_map(fn($r) => $this->getEpisodeFromResults($r), $results);
|
||||||
|
}
|
||||||
|
|
||||||
|
public function create(Episode $episode): Episode
|
||||||
|
{
|
||||||
|
$query = "INSERT INTO episodes (
|
||||||
|
title, link, length, description, serialNumber,
|
||||||
|
explicit, publishedDate, episodeType
|
||||||
|
) VALUE (
|
||||||
|
:title, :link, :length, :description, :serialNumber,
|
||||||
|
:explicit, :publishedDate, :episodeType
|
||||||
|
)";
|
||||||
|
|
||||||
|
$statement = $this->db->getConnection()->prepare($query);
|
||||||
|
$results = $statement->execute([
|
||||||
|
':title' => $episode->getTitle(),
|
||||||
|
':link' => $episode->getLink(),
|
||||||
|
':length' => $episode->getLength(),
|
||||||
|
':description' => $episode->getDescription(),
|
||||||
|
':serialNumber' => $episode->getSerialNumber(),
|
||||||
|
':explicit' => $episode->isExplicit(),
|
||||||
|
':publishedDate' => $episode->getPublishedDate(),
|
||||||
|
':episodeType' => $episode->getEpisodeType(),
|
||||||
|
]);
|
||||||
|
|
||||||
|
return $episode;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @TODO Implement a plan for deleting
|
||||||
|
*/
|
||||||
|
public function delete(Episode $episode): bool
|
||||||
|
{
|
||||||
|
return false;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -59,7 +59,8 @@ class ImageRepository implements ImageRepositoryInterface
|
|||||||
images (url, title, width, height)
|
images (url, title, width, height)
|
||||||
VALUES (:url, :title, :width, :height)";
|
VALUES (:url, :title, :width, :height)";
|
||||||
|
|
||||||
$this->db->getConnection()->exec($query, [
|
$statement = $this->db->getConnection()->prepare($query);
|
||||||
|
$statement->execute([
|
||||||
':url' => $image->getUrl(),
|
':url' => $image->getUrl(),
|
||||||
':title' => $image->getTitle(),
|
':title' => $image->getTitle(),
|
||||||
':width' => $image->getWidth(),
|
':width' => $image->getWidth(),
|
||||||
@ -68,6 +69,8 @@ class ImageRepository implements ImageRepositoryInterface
|
|||||||
|
|
||||||
$insertId = $this->db->getConnection()->lastInsertId();
|
$insertId = $this->db->getConnection()->lastInsertId();
|
||||||
$image->setId($insertId);
|
$image->setId($insertId);
|
||||||
|
$image->setCreatedAt(new DateTimeImmutable());
|
||||||
|
$image->setUpdatedAt(new DateTime());
|
||||||
|
|
||||||
return $image;
|
return $image;
|
||||||
}
|
}
|
||||||
@ -79,10 +82,10 @@ class ImageRepository implements ImageRepositoryInterface
|
|||||||
title = ?,
|
title = ?,
|
||||||
width = ?,
|
width = ?,
|
||||||
height = ?
|
height = ?
|
||||||
WHERE id = ?
|
WHERE id = ?";
|
||||||
";
|
|
||||||
|
|
||||||
$results = $this->db->getConnection()->exec($query, [
|
$statement = $this->db->getConnection()->prepare($query);
|
||||||
|
$results = $statement->execute([
|
||||||
$image->getUrl(),
|
$image->getUrl(),
|
||||||
$image->getTitle(),
|
$image->getTitle(),
|
||||||
$image->getWidth(),
|
$image->getWidth(),
|
||||||
@ -90,6 +93,10 @@ class ImageRepository implements ImageRepositoryInterface
|
|||||||
$image->getId(),
|
$image->getId(),
|
||||||
]);
|
]);
|
||||||
|
|
||||||
|
if ($results == true) {
|
||||||
|
$image->setUpdatedAt(new DateTime());
|
||||||
|
}
|
||||||
|
|
||||||
return $results;
|
return $results;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -70,7 +70,8 @@ class UserRepository implements UserRepositoryInterface
|
|||||||
$query = "INSERT INTO users (email, password, name)
|
$query = "INSERT INTO users (email, password, name)
|
||||||
VALUES (:email, :password, :name)";
|
VALUES (:email, :password, :name)";
|
||||||
|
|
||||||
$results = $this->db->getConnection()->exec($query, [
|
$statement = $this->db->getConnection()->prepare($query);
|
||||||
|
$statement->execute([
|
||||||
':email' => $user->getEmail(),
|
':email' => $user->getEmail(),
|
||||||
':password' => $this->userAuth->hash($user->getPassword()),
|
':password' => $this->userAuth->hash($user->getPassword()),
|
||||||
':name' => $user->getName(),
|
':name' => $user->getName(),
|
||||||
|
Loading…
Reference in New Issue
Block a user