Files
daragt-coupon/app/Services/CouponService.php
Mekan1206 e66ce8fdcd good
2026-05-19 21:22:36 +05:00

46 lines
1.1 KiB
PHP

<?php
namespace App\Services;
use App\Models\Coupon;
use Illuminate\Database\UniqueConstraintViolationException;
use Illuminate\Support\Str;
class CouponService
{
public function findOrCreateForPhone(string $phone): Coupon
{
$existing = Coupon::query()->where('phone', $phone)->first();
if ($existing) {
return $existing;
}
return $this->createWithUniqueCode($phone);
}
private function createWithUniqueCode(string $phone): Coupon
{
for ($attempt = 0; $attempt < 10; $attempt++) {
try {
return Coupon::query()->create([
'phone' => $phone,
'code' => $this->generateCouponCode(),
]);
} catch (UniqueConstraintViolationException) {
continue;
}
}
throw new \RuntimeException('Unable to generate a unique coupon code.');
}
private function generateCouponCode(): string
{
$x = random_int(1, 9);
$yyyy = Str::upper(Str::random(4));
return "{$x}_{$yyyy}";
}
}