feat: add insurance and location management
- Introduced InsuranceType enum for insurance categorization. - Created InsuranceRepository for managing insurance entities. - Developed LocationController for handling provinces and cities, including CRUD operations. - Implemented City and Province entities with necessary fields and relationships. - Added CityRepository and ProvinceRepository for database interactions. - Established Specialty management with SpecialtyController, including CRUD operations. - Created Specialty and Tag entities with appropriate fields and relationships. - Implemented TagController for managing tags, including CRUD operations. - Added TagRepository for database interactions with tags.
This commit is contained in:
@@ -1,99 +0,0 @@
|
||||
<?php
|
||||
|
||||
namespace App\Category\Service;
|
||||
|
||||
use App\Category\Entity\Category;
|
||||
use App\Category\Repository\CategoryRepository;
|
||||
use Psr\Cache\CacheItemPoolInterface;
|
||||
|
||||
class CategoryService
|
||||
{
|
||||
private const TTL = 3600;
|
||||
|
||||
public function __construct(
|
||||
private readonly CategoryRepository $repository,
|
||||
private readonly CacheItemPoolInterface $cache,
|
||||
) {}
|
||||
|
||||
/** @return array[] */
|
||||
public function listByBundle(string $bundle, ?int $parentId = null): array
|
||||
{
|
||||
$cacheKey = 'cat_' . $bundle . ($parentId !== null ? '_p' . $parentId : '');
|
||||
$item = $this->cache->getItem($cacheKey);
|
||||
|
||||
if ($item->isHit()) {
|
||||
return $item->get();
|
||||
}
|
||||
|
||||
$rows = array_map(fn(Category $c) => $c->toArray(), $this->repository->findByBundle($bundle, $parentId));
|
||||
|
||||
$item->set($rows)->expiresAfter(self::TTL);
|
||||
$this->cache->save($item);
|
||||
|
||||
return $rows;
|
||||
}
|
||||
|
||||
public function create(string $bundle, string $label, array $extra = []): Category
|
||||
{
|
||||
$category = new Category($bundle, $label);
|
||||
$this->applyExtra($category, $extra);
|
||||
$this->repository->save($category);
|
||||
$this->invalidate($bundle);
|
||||
|
||||
return $category;
|
||||
}
|
||||
|
||||
public function update(Category $category, array $data): Category
|
||||
{
|
||||
$bundle = $data['bundle'] ?? $category->getBundle();
|
||||
|
||||
if (isset($data['label'])) $category->setLabel($data['label']);
|
||||
if (isset($data['status'])) $category->setStatus((int) $data['status']);
|
||||
if (isset($data['weight'])) $category->setWeight((int) $data['weight']);
|
||||
if (isset($data['title'])) $category->setTitle($data['title']);
|
||||
if (isset($data['bundle'])) $category->setBundle($data['bundle']);
|
||||
if (array_key_exists('parent_id', $data)) $category->setParentId($data['parent_id']);
|
||||
|
||||
$this->applyExtra($category, $data);
|
||||
$this->repository->save($category);
|
||||
$this->invalidate($bundle);
|
||||
$this->invalidate($category->getBundle());
|
||||
|
||||
return $category;
|
||||
}
|
||||
|
||||
public function delete(Category $category): void
|
||||
{
|
||||
$bundle = $category->getBundle();
|
||||
$this->repository->remove($category);
|
||||
$this->invalidate($bundle);
|
||||
}
|
||||
|
||||
private function applyExtra(Category $category, array $data): void
|
||||
{
|
||||
if (array_key_exists('parent_id', $data)) $category->setParentId($data['parent_id']);
|
||||
if (array_key_exists('weight', $data)) $category->setWeight((int) $data['weight']);
|
||||
if (array_key_exists('logo_id', $data)) $category->setLogoId($data['logo_id']);
|
||||
if (array_key_exists('title', $data)) $category->setTitle($data['title']);
|
||||
if (array_key_exists('contact_phone', $data)) $category->setContactPhone($data['contact_phone']);
|
||||
if (array_key_exists('email', $data)) $category->setEmail($data['email']);
|
||||
if (array_key_exists('description', $data)) $category->setDescription($data['description']);
|
||||
if (array_key_exists('slogan', $data)) $category->setSlogan($data['slogan']);
|
||||
if (array_key_exists('domain', $data)) $category->setDomain($data['domain']);
|
||||
if (array_key_exists('keywords', $data)) $category->setKeywords($data['keywords']);
|
||||
if (array_key_exists('footer_description', $data)) $category->setFooterDescription($data['footer_description']);
|
||||
if (array_key_exists('footer_disclaimer', $data)) $category->setFooterDisclaimer($data['footer_disclaimer']);
|
||||
if (array_key_exists('social_media', $data)) $category->setSocialMedia($data['social_media']);
|
||||
if (array_key_exists('representation_id', $data)) $category->setRepresentationId($data['representation_id'] !== null ? (int) $data['representation_id'] : null);
|
||||
if (array_key_exists('logo_url', $data)) $category->setLogoUrl($data['logo_url']);
|
||||
}
|
||||
|
||||
private function invalidate(string $bundle): void
|
||||
{
|
||||
$this->cache->deleteItem('cat_' . $bundle);
|
||||
// Also delete any parent-filtered variants
|
||||
foreach (range(1, 50) as $id) {
|
||||
$this->cache->deleteItem('cat_' . $bundle . '_p' . $id);
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user