Bildiğiniz üzere, bir destek kanalı ekledim. LaraFoundry, bir Laravel uygulaması olarak tekrar kullanılabilir bir SaaS çekirdeğidir. Her modül için kural aynıdır: Eski koddan kanıtlanmış bir fikri çıkarıp modernleştirmek, güçlendirmek ve yeni Laravel uygulamasına yükleyebileceğiniz bir şey haline getirmek.
<h2>
<a name="why-a-ticket-package-is-wrong-for-a-reusable-core" href="#why-a-ticket-package-is-wrong-for-a-reusable-core"></a>
Neden bir bilet paketi, tekrar kullanılabilir bir çekirdek için yanlıştır
</h2>
<p>Üçüncü taraf bir bilet paketi, tek bir uygulama oluştururken mantıklı bir seçimdir. Ancak diğer uygulamaların kuracağı bir çekirdek için yanlış bir seçimdir. Çekirdeğe entegre edildiğinde, her ana uygulama bu paketin migration'larını, tablo adlarını ve kavramlarını miras alır.</p>
<p>Bu yüzden paketi çıkardım ve modeli elle yazdım. Model yaklaşık 180 satır. İki tablo, bir uuid, bir durum ve birkaç scope var. Pakete bağımlı olmak yerine çekirdekte daha az kod tuttum, çünkü sadece kullandığım davranışı korudum.</p>
<div class="highlight js-code-highlight">
<pre class="highlight php"><code>/ Bir destek bileti: bir ana kullanıcı ile platform operatörü arasındaki kanal.
Üçüncü taraf bilet paketinden çıkarıldı. Bu bağımlılık kesildi: bu, bağımsız bir model.
Kategoriler ve etiketler, konfigürasyona bağlı JSON dizi olarak işleniyor.
*/
class Ticket extends Model
{
use Filterable;public const STATUS_WAIT_MODERATOR = ‘wait-moderator’;
public const STATUS_WAIT_CUSTOMER = ‘wait-customer’;
public const STATUS_RESOLVED = ‘resolved’;protected $table = ‘larafoundry_tickets’;
}
Saklamaya Değer Kısım: Kimsenin Ayarlamadığı Bir Durum
Saklamaya Değer Kısım: Kimsenin Ayarlamadığı Bir Durum
Donör kodunda gerçekten iyi olan tek fikir durum akışıdır ve bunu korudum. Çoğu bilet sistemi operatöre bir durum açılır menüsü verir. Ancak LaraFoundry biletlerinin üç durumu var ve hiçbirini seçmezsiniz.
kullanıcı bir bilet açar
|
v
wait-moderator kullanıcı cevap verir ----> yeniden açar (wait-moderator)Cevaplanan biletlerin yeniden açılması, aslında kapalı olmadığının göstergesi olarak işlemektedir. Bu, eski durum listesi ve unutma konusunu ortadan kaldırır.
Operatörlerin sıra düzenini yöneten bu durumu kullanıyoruz.
public function scopeWorkflowOrder(Builder $query): Builder
{
return $query
->orderByRaw("CASE WHEN status='resolved' THEN 1 ELSE 0 END asc")
->orderByRaw("CASE WHEN created_at = updated_at THEN 0 WHEN priority = 'high' THEN 1 WHEN priority = 'standard' THEN 2 ELSE 3 END asc")
->orderByRaw("CASE WHEN status='wait-moderator' THEN 1 WHEN status='wait-customer' THEN 2 ELSE 3 END asc")
->orderBy('updated_at', 'desc');
}
Çıkarma, Ücretsiz Bir Kod İncelemesi
Çıkarma, Ücretsiz Bir Kod İncelemesi
Çıkarma işlemi, daha önce yazdığınız kodu yeniden gözden geçirmenizi zorlar. Çıkarma işlemini temiz yapmak için donörün her satırını okumam gerekti.
Konfigürasyon, Pivot Tablolar Değil
Konfigürasyon, Pivot Tablolar Değil
Kategoriler ve etiketler genellikle pivot tablo için başvurulan yapılardır. Ancak diğer insanların yapılandırabileceği bir çekirdek için bu ağırdır. Dolayısıyla kategoriler ve etiketler, konfigürasyona bağlı JSON dizi olarak işlenmektedir.
// config/larafoundry-tickets.php
'categories' => ['general', 'billing', 'feature', 'bug'],
'labels' => ['quick', 'complex'],
Askıya Alınmış Bir Müşterinin Ulaşması Gereken Tek Ekran
Askıya Alınmış Bir Müşterinin Ulaşması Gereken Tek Ekran
Bir şirket askıya alındığında, destek sayfası en önemli ekran olmalıdır. Çünkü bu, onlarla iletişime geçmek için tek yoludur.
Geçen Ayın Dikişini Yeniden Kullanmak
Geçen Ayın Dikişini Yeniden Kullanmak
Bilet modülü, operatör yanıtladığında bir bildirim çağrısı yapar.
app(NotificationService::class)->system([
users: [$ticket->user],
code: 'info',
titleKey: 'larafoundry::tickets.notify.reply.title',
]);
Güvenlik Geçişi
Güvenlik Geçişi
Kendi yazdığım kod, güvenliği benim sorumluluğumda kılar. Kullanıcı yönlendirmeleri, bir kimlik doğrulama politikası ile yönetilir, yani başka bir kullanıcının biletine erişim 403 hatasına yol açar.
Test Etme
Test Etme
Bilet modülü, 30 yeni test ekledi. Entegre testler, gerçek kullanıcılar ve gerçek kullanıcı modelleri içindeki middleware yığınını denetler.
Ücretsiz
Ücretsiz
Bilet modülü, LaraFoundry’nin temel bir parçasıdır ve yıllardır tüm uygulama için gereklidir. Yani bu makalede yer alan tüm kod, tam olarak gönderilen koddur.
Kaynak: Orijinal Makale


