Önsöz
Amacım, abonelikleri yönetmek için birden fazla proje için yeniden kullanılabilir kod oluşturmak (ve ayrıca github'da yayınlamak). Şerit ve yinelenen faturalandırma sağlayıcılarını biliyorum, ancak bu modülün amacı bu değil. Hesap bakiyesini, aboneliği yenilemek için kolay bildirimleri ve fiyat hesaplamalarını işlemek için bir sarıcı / yardımcı olmalıdır.
Sağlayıcılar veya destek olanakları yetersiz veya hiç desteklenmeyen veya çok pahalı (mikro ödemeler) nedeniyle yinelenen faturalandırmayı kullanamayacağınız ülkeler vardır. Ve yinelenen faturalandırma kullanmak istemeyen, ancak yıl sonunda faturalarını manuel olarak ödeyen / faturalarını ödeyen insanlar var. Bu yüzden lütfen paypal yinelenen faturalandırma, yinelenen veya benzer hizmetleri önermeyin.
Durum
Diyelim ki bir abonelik planına (ör. User
) Abone olabilecek bir modeliniz var . Bu model, şu anda abone olduğu bir abonelik planının tanımlayıcısını depolayan bir alana sahiptir. Böylece, her plan değişikliğinde, değişiklik kaydedilir.
SubscriptionPlanChanges
Söz konusu değişiklikleri kaydeden aşağıdaki alanları içeren bir model (örn. ) Vardır :
subscriber
abone modeliyle ilgili (User
bu durumda)from_plan
modelin değişiklikten önce sahip olduğu plan tanımlayıcısının tanımlanmasıto_plan
modelin şimdi seçtiği plan tanımlayıcısını tanımlamakcreated_at
değişikliği saklayan bir tarih-saat alanıdırvalid_until
gerçek abonelik geçerli olana kadar tarihi saklarpaid_at
aynı zamanda aboneliğin ödenip ödenmediğini (ve ne zaman) tanımlayan bir tarih-saat alanıdır
Tabii ki, bu düzen tartışılabilir.
Hesap bakiyesi
sorusu Bir kullanıcı abonelik planını değiştirdiğinde, plan alanlarını karşılaştırmam, fiyatları almam ve mevcut plana valid_until
ve fiyatına göre yeni plan için kesintiyi hesaplamam gerekir . De ki: Bir yıllık A planına abone oldunuz, ancak 6 ay sonra B planına geçtiniz, bu nedenle 6 aylık A planı için ödenen fiyatın yarısının indirimini alıyorsunuz.
Ne merak ediyorum: Bir kullanıcı örneğin ücretsiz plana geçiş yaparsa, kullanıcı tekrar geçiş yapmak istiyorsa düşülebilir bir kredi var. Bu değeri ek bir alanda önbelleğe alır veya her zaman o kullanıcıyla ilgili tüm kayıtları hesaplar mısınız? Tablo düzeni hakkında bir şeyler ekler misiniz / değiştirir misiniz?
Kolay anlaşılabilirlik sorunu
Bir abonelik süresinin sonu geldiğinde, kullanıcı bilgilendirilir ve tekrar ödeme yaparak aboneliğini yenileme imkanına sahiptir. En kolay yol sadece güncelleme paid_at
ve valid_until
yeni abonelik seçenekleriyle olacaktır. Ancak, ödeme / abonelik geçmişi gibi birinin ihtiyaç duyabileceği her veriyi depolayıp saklamadığınızdan emin değilim.
Başka bir seçenek nerede, bunun için ek bir kayıt oluşturmak için olacağını from_plan
ve to_plan
aynı tanımlayıcı (dolayısıyla "değişiklik yok" simgeleyen) yaşıyoruz. Ancak bu, hesap bakiyesinin bir şekilde hesaplanmasını engellemez mi?
Birisi beni bu tür abonelikleri işleyen mantıklarla ilgili olarak doğru yöne yönlendirebilirse, bunu çok takdir ediyorum.
GÜNCELLEME
Şimdiye kadar yardımlarınız için teşekkürler. Sorumun çok belirsiz olduğunu düşünüyorum, bu yüzden daha az soyutlama kullanarak daha kesin olmaya çalışacağım. Ne yazık ki, sorunumu henüz çözemedim.
Durum A
User
seçebilir Subscription Plan A
. Bu şu anda SubscriptionPlanChange
takip etmek için bir a depolar . Örneğin 5 ay User
sonra aboneliğini yükseltir Subscription Plan B
. Böylece yeni aboneliğinin bedelini öder, kullanılmayan 7 ay için plan a'nın fiyatını düşürür.
Olgu B
3 ay sonra, User
geri döner Subscription Plan A
. Ödemesi gerekmiyor, ancak bunun için bir bakiye alıyor, böylece aboneliğin sonunda, yeni bakiyesi için bu bakiyeyi düşüyor.
Durum C
User
bağımsız abonelik planları olan bir alt hizmet için bir abonelik planı seçebilir. Aynıdır Case A
ve Case B
bu alt hizmet aboneliği için başvurabilir.
_Case D_
Kullanıcı aboneliklerinden birini iptal eder. Bu, dengesinin tamamlanmasıyla sonuçlanır.
Sorum (en azından şu anda) temel olarak bu verilerin nasıl düzgün bir şekilde saklanacağına bağlı olduğundan, iş analizi için abonelik geçmişini yeniden oluşturabilir ve bakiyeleri hesaplayabilir, aboneliklere dayalı ödenmemiş ödemeler vb. Alabilirim.
Ayrıca, dengenin örneğin kullanıcıların modelinde saklanıp saklanmayacağından veya saklanamadığından ancak saklanan verilere / geçmişe göre her zaman hesaplanabileceğinden emin değilim.
Dikkat edilmesi gereken bazı şeyler olsa da, sorunları ortaya çıkarmaları gerektiğini düşünmüyorum:
- Olması
User
gerekmiyor, herhangi bir şey olabilir, bu yüzdenSubscriber
polimorfik Plans
ille de planlar olmak zorunda değildir, ancak örneğinMagazines
belirtildiği gibi olabilir . Vaka C ve Vaka D ile anlattığım şey bu .