प्रस्तावना
मेरा उद्देश्य सदस्यता को प्रबंधित करने के लिए कई परियोजनाओं के लिए पुन: प्रयोज्य कोड (और इसे github पर प्रकाशित करना) है। मुझे पता है कि स्ट्रिप और आवर्ती बिलिंग प्रदाताओं के बारे में, लेकिन यह इस मॉड्यूल के लिए लक्ष्य नहीं है। यह खाता शेष की गणना के लिए बस एक रैपर / सहायक होना चाहिए, सदस्यता को नवीनीकृत करने के लिए आसान सूचनाएं, और मूल्य गणना को संभालना चाहिए।
ऐसे देश हैं जहां आप प्रदाताओं के भुगतान के कारण आवर्ती बिलिंग का उपयोग नहीं कर सकते हैं या भुगतान की संभावनाएं खराब हैं या इसके लिए कोई समर्थन नहीं है या बहुत महंगे हैं (माइक्रोपायमेंट)। और ऐसे लोग हैं जो आवर्ती बिलिंग का उपयोग नहीं करना चाहते हैं, लेकिन वर्ष के अंत में अपने बिल का मैन्युअल रूप से भुगतान करते हैं / चालान का भुगतान करते हैं। तो कृपया सुझाव न दें कि पेपाल आवर्ती बिलिंग, पुनरावृत्ति या इसी तरह की सेवाओं के लिए।
स्थिति
मान लें कि आपके पास एक मॉडल है जो सदस्यता योजना (उदा User) की सदस्यता ले सकता है । इस मॉडल में एक क्षेत्र है जो एक सदस्यता योजना के पहचानकर्ता को संग्रहीत करता है जिसे वर्तमान में सदस्यता ली गई है। इसलिए, हर योजना में परिवर्तन दर्ज किया जाता है।
SubscriptionPlanChangesनिम्नलिखित परिवर्तनों को रिकॉर्ड करने वाले निम्नलिखित क्षेत्रों के साथ एक मॉडल (जैसे ) है:
subscriberसब्सक्राइबर मॉडल से संबंधित (Userइस मामले में)from_planयोजना पहचानकर्ता को परिभाषित करने से पहले मॉडल में बदलाव किया गया थाto_planयोजना पहचानकर्ता को परिभाषित करते हुए अब मॉडल का चयन किया गया हैcreated_atएक तारीख-समय क्षेत्र में परिवर्तन का भंडारण हैvalid_untilवास्तविक सदस्यता मान्य होने तक दिनांक संग्रहीत करता हैpaid_atएक दिनांक-समय क्षेत्र भी है जो परिभाषित करता है कि क्या (और कब) सदस्यता का भुगतान किया गया था
बेशक, यह लेआउट चर्चा योग्य है।
खाता संतुलन का प्रश्न
जब कोई उपयोगकर्ता अपनी सदस्यता योजना को बदलता है, तो मुझे योजना क्षेत्रों की तुलना करने, प्रिसिंग प्राप्त करने और वर्तमान योजना valid_untilऔर उसकी कीमत के आधार पर नई योजना के लिए कटौती की गणना करने की आवश्यकता होती है। कहें: आपने योजना A के एक वर्ष के लिए सदस्यता ली है, लेकिन 6 महीने के बाद, आप योजना B में अपग्रेड करते हैं, इसलिए आपको योजना A के 6 महीने के लिए भुगतान की गई कीमत का आधा हिस्सा मिलता है।
मैं क्या सोच रहा हूं: यदि कोई उपयोगकर्ता उदाहरण के लिए नि: शुल्क योजना पर स्विच करता है, तो उसके पास एक क्रेडिट होता है जिसे उपयोगकर्ता फिर से स्विच करना चाहता है तो कटौती की जा सकती है। क्या आप उस मूल्य को एक अतिरिक्त फ़ील्ड में कैश करेंगे, या हर बार उस उपयोगकर्ता से संबंधित सभी रिकॉर्डों के माध्यम से गणना करेंगे? क्या आप टेबल लेआउट के बारे में कुछ जोड़ेंगे / बदलेंगे?
आसान बोधगम्यता का प्रश्न
जब एक सदस्यता अवधि का अंत आता है, तो उपयोगकर्ता अधिसूचित हो जाता है और फिर से भुगतान करके अपनी सदस्यता को नवीनीकृत करने के लिए सहानुभूति रखता है। सबसे आसान तरीका सिर्फ अपडेट करना paid_atऔर valid_untilनए सब्सक्रिप्शन विकल्पों के साथ होगा। हालाँकि, मुझे यकीन नहीं है कि यदि आप हर डेटा को किसी व्यक्ति को स्टोर कर सकते हैं, जैसे भुगतान / सदस्यता इतिहास।
एक अन्य विकल्प है, इस के लिए एक अतिरिक्त रिकॉर्ड बनाने के लिए जहां होगा from_planऔर to_planएक ही पहचानकर्ता (इस प्रकार का प्रतीक "कोई परिवर्तन नहीं") कर रहे हैं। लेकिन यह किसी भी तरह से खाते की शेष राशि की गणना में हस्तक्षेप नहीं करेगा?
अगर कोई मुझे इस तरह की सदस्यता को संभालने वाले लॉजिक्स के बारे में सही दिशा में इंगित कर सकता है, तो मैं इसकी बहुत सराहना करूंगा।
अद्यतन
अब तक मदद के लिए धन्यवाद। मुझे लगता है कि मेरा प्रश्न बहुत अस्पष्ट था इसलिए मैं कम अमूर्तता का उपयोग करके अधिक सटीक होने की कोशिश करूंगा। दुर्भाग्य से, मैं अभी तक अपनी समस्या को हल नहीं कर सका।
केस A
User चयन कर सकता है Subscription Plan A। यह वर्तमान SubscriptionPlanChangeमें इसका ट्रैक रखने के लिए स्टोर करता है। 5 महीने के बाद, Userअपनी सदस्यता अपग्रेड करें Subscription Plan B। इसलिए वह अप्रयुक्त 7 महीने के लिए योजना की कीमत में कटौती करते हुए, अपनी नई सदस्यता के लिए कीमत चुकाता है।
केस बी
3 महीने के बाद, Userवापस उसके पास जाता है Subscription Plan A। उसे भुगतान नहीं करना है, लेकिन इसके लिए एक शेष राशि प्राप्त करता है ताकि, सदस्यता के अंत में, उसे अपनी नई सदस्यता के लिए कटौती की गई राशि मिल जाए।
केस C
User एक उप-सेवा के लिए एक सदस्यता योजना का चयन कर सकता है जिसमें स्वतंत्र सदस्यता योजना है। वही Case Aऔर Case Bउस उप-सेवा सदस्यता के लिए आवेदन कर सकते हैं।
_Case D_
उपयोगकर्ता अपनी सदस्यता को रद्द कर देता है। इससे उसका संतुलन बिगड़ जाता है।
मेरा प्रश्न (वर्तमान में, कम से कम) मुख्य रूप से इस बात पर निर्भर करता है कि उस डेटा को ठीक से कैसे स्टोर किया जाए ताकि मैं व्यापार विश्लेषण के लिए सदस्यता के इतिहास को पुन: पेश कर सकूं और शेष राशि की गणना कर सकूं, सदस्यता के आधार पर बकाया भुगतान प्राप्त कर सकूं।
मुझे यह भी पक्का नहीं है कि यदि शेष राशि को यूजर्स मॉडल में ही स्टोर किया जाना चाहिए, या यदि यह संग्रहीत नहीं है, लेकिन संग्रहीत डेटा / इतिहास के आधार पर किसी भी समय गणना की जा सकती है।
ध्यान देने योग्य कुछ बातें, हालांकि मुझे नहीं लगता कि उन्हें समस्याओं का सामना करना चाहिए:
- यह एक होना जरूरी नहीं है
User, यह कुछ भी हो सकता है, यही कारण हैSubscriberकि बहुरूपी है Plansजरूरी नहीं कि योजनाएं हों, लेकिनMagazinesजैसा उल्लेख किया जा सकता है । यही मैंने केस सी और केस डी के साथ वर्णित किया है ।