/home2/mshostin/carnival.ms-hostingladz.com/app/Services/CostumeService.php
<?php
namespace App\Services;
use App\Models\Costume;
use App\Models\CostumeVariant;
use App\Models\CostumeVariantImage;
use Illuminate\Support\Str;
use App\Traits\ImageTrait;
use App\Traits\MultipleImageTrait;
class CostumeService
{
use ImageTrait, MultipleImageTrait;
public function createCostume(array $data)
{
$costumeData = $this->prepareCostumeData($data);
$costume = Costume::create($costumeData);
if (isset($data['variant_id'])) {
foreach ($data['variant_id'] as $index => $variantId) {
$costumeVariant = CostumeVariant::create([
'costume_id' => $costume->id,
'variant_id' => $variantId,
'value' => isset($data['value'][$index]) ? $data['value'][$index] : 'default_value',
'status' => 1
]);
if (isset($data['variant_images'][$index])) {
$additionalImagePaths = $this->uploadMultipleImages($data['variant_images'], 'variant_images');
foreach ($additionalImagePaths as $additionalImage) {
CostumeVariantImage::create([
'costume_id' => $costume->id,
'costume_variant_id' => $costumeVariant->id,
'image' => $additionalImage['original_name'],
]);
}
}
}
}
return $costume;
}
public function updateCostume(Costume $costume, array $data)
{
$costumeData = $this->prepareCostumeData($data);
$costume->update($costumeData);
if (isset($data['variant_id'])) {
$costume->variants()->detach();
foreach ($data['variant_id'] as $index => $variantId) {
$costume->variants()->attach($variantId, ['value' => 'value', 'status' => 1]);
if (isset($data['variant_images'][$index])) {
$additionalImagePaths = $this->uploadMultipleImages($data['variant_images'], 'variant_images');
foreach ($additionalImagePaths as $additionalImage) {
CostumeVariantImage::create([
'costume_id' => $costume->id,
'costume_variant_id' => $variantId,
'image' => $additionalImage['original_name'],
]);
}
}
}
}
return $costume;
}
protected function prepareCostumeData(array $data)
{
$costumeData = [
'title' => $data['title'],
'event_id' => $data['event_id'],
'category_id' => $data['category_id'],
'subcategory_id' => $data['subcategory_id'],
'description' => $data['description'],
'old_price' => $data['old_price'],
'new_price' => $data['new_price'],
'condition' => $data['condition'] ?? null,
'stock_condition' => $data['stock_condition'] ?? null,
'discount' => $data['discount'] ?? null,
'tags' => implode(',', $data['tags'] ?? []),
'slug' => $this->generateUniqueSlug($data['title']),
'user_id' => auth()->id(),
'facebook' => $data['facebook'] ?? null,
'instagram' => $data['instagram'] ?? null,
'youtube' => $data['youtube'] ?? null,
'twitter' => $data['twitter'] ?? null,
'tiktok' => $data['tiktok'] ?? null,
'pinterest' => $data['pinterest'] ?? null,
'linkedin' => $data['linkedin'] ?? null,
];
return $costumeData;
}
protected function generateUniqueSlug($title)
{
$slug = Str::slug($title);
$uniqueSlug = $slug;
$counter = 1;
while (Costume::where('slug', $uniqueSlug)->exists()) {
$uniqueSlug = $slug . '-' . $counter++;
}
return $uniqueSlug;
}
protected function uploadVariantImages($images)
{
$imagePaths = [];
foreach ($images as $image) {
$path = $image->store('variant_images');
$imagePaths[] = $path;
}
return $imagePaths;
}
}