प्रस्तावना
मेरा उद्देश्य सदस्यता को प्रबंधित करने के लिए कई परियोजनाओं के लिए पुन: प्रयोज्य कोड (और इसे 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
जैसा उल्लेख किया जा सकता है । यही मैंने केस सी और केस डी के साथ वर्णित किया है ।