পই পই MFS: প্র্যাকটিস
এইবার বিকাশ, রকেট, নগদের মতো আর্থিক লেনদেন, টাকা পাঠানো, টাকা গ্রহণ, ব্যালেন্স চেক করার সিস্টেম বানিয়ে ফেল। আমি হালকা একটু শুরু করে দিব। বাকিটা তুই করবি।
একটা IIFE (Immediately Invoked Function Expression) লিখে ফেল। সেটাকে একটা ভেরিয়েবলে রাখ। নিচের মতো করে—
const userDatabase = (function () { } )();আপাতত এইটার মধ্যে কিছু নাই। এখন এইটার ভিতরে একটা users নামে অ্যারে ডিক্লেয়ার কর। নিচের মতো করে—
const userDatabase = (function () {
const users = [ ];
} )();এরপর এই IIFE থেকে একটা অবজেক্ট রিটার্ন কর। আপাতত সেই অবজেক্টে কিছু নাই। জাস্ট খালি একটা অবজেক্ট। আর কিছু না।
const userDatabase = (function () {
const users = [ ];
return { }
} )();
console.log( userDatabase );
Output: { }তাহলে userDatabase থেকে একটা খালি অবজেক্ট পাওয়া যাবে। কনসোল লগ করলেও এটাই আউটপুট হিসেবে দেখাবে।
এখন আমাদের কাজ হচ্ছে, IIFE থেকে যে অবজেক্ট রিটার্ন করা হচ্ছে, সেখানে একটা মেথড লিখে ফেলব। প্রথমটা হচ্ছে registerUser, আর এইটা দুইটা প্যারামিটার নিবে। একটা হচ্ছে ইউজারের নাম, আরেকটা হচ্ছে চার সংখ্যার একটা পিন নাম্বার।
const userDatabase = (function () {
const users = [ ];
return {
registerUser: function (name, pin) {
}
}
} )();
console.log( userDatabase );
Output: {registerUser: ƒ}টাস্ক-১: তোর এখন একটা কাজ হচ্ছে, registerUser-এর ভিতরে কিছু সিম্পল ভ্যালিডেশন করে ফেলা। যদি name এবং pin— এই দুইটার মান না দেয়া থাকে, তাহলে তুই error রিটার্ন করবি। আবার pin যদি সংখ্যা না হয় বা চার ডিজিটের সংখ্যা না হয়, তাহলে তুই error রিটার্ন করবি। চার ডিজিটের সংখ্যা কিভাবে চেক করতে হয় সেটা তুই খুঁজে খুঁজে বের কর। তারপর বুঝে বুঝে কোড কর।
আর এই দুইটা ঠিক থাকলে তুই একটা অবজেক্ট বানিয়ে ফেলবি, যেখানে অবজেক্টের আইডি থাকবে। আইডির মান হবে ওপরের users-এর মধ্যে যতগুলা উপাদান আছে, তার সংখ্যার সাথে 1 যোগ করে। এর পাশাপাশি name, pin এবং balance যোগ করে দিবি। balance-এর প্রাথমিক মান হবে 0। আর ঠিকমতো ইউজার যোগ করতে পারলে true রিটার্ন করে দিবি।
const userDatabase = (function () {
const users = [ ];
return {
registerUser: function (name, pin) {
// add validation here
const newUser = {
id: users.length + 1,
name,
pin,
balance: 0
};
users.push(newUser);
return true;
}
}
})();টাস্ক-২ : লগইন সিস্টেম তৈরি কর, যেখানে registerUser-এর ফাংশন লিখছিস, সেখানে খেয়াল করে registerUser যেখানে শেষ হইছে, সেখানে কমা দিয়ে আরেকটা মেথড লিখে ফেল। এইটার নাম হবে loginUser । এইখানেও দুইটা প্যারামিটার নিবি। নাম আর চার ডিজিটের ফোন নাম্বার। তারপর ওপরের users নামক অ্যারেতে গিয়ে সেই user খুঁজে বের করে দেখবি, যে পিন দিছে, সেটা users থেকে যে ইউজার খুঁজে পাইছস, তার পিনের সাথে ম্যাচ করে কি না। যদি ম্যাচ খায়, তাহলে true রিটার্ন করবি। না হয় false রিটার্ন করবি।
এইবার তোর বানানো registerUser আর loginUser টেস্ট করে ফেল।
টেস্ট করার জন্য userDatabase লিখে ডট চিহ্ন দিয়ে registerUser লিখবি। এইটাকে ফাংশনের মতো করে কল করে দিবি। যে যে প্যারামিটার দরকার সেগুলা দিয়ে। একইভাবে userDatabase.loginUser-কে কল করে দিবি প্রয়োজনীয় প্যারামিটার দিয়ে।
জাস্ট কয়েকটা নাম আর পিন দিয়ে ইউজার বানিয়ে ফেল। তারপর আবার loginUser-কে কল করে কয়েকবার ঠিক নাম আর পিন দিবি, আবার কয়েকবার নাম বা পিন ভুল দিবি। দেখ, ঠিক দিলে true, আর ভুল দিলে false রিটার্ন করে কি না।
const userDatabase = (function () {
const users = [ ];
return {
registerUser: function (name, pin) { },
loginUser: function(name, pin){
}
}
})();
userDatabase.registerUser("Alice", 1234);
userDatabase.registerUser("Bob", 5678);টাস্ক-৩: শুরুতে কিন্তু ব্যালেন্স ছিল 0, তাই এইবার একাউন্টে টাকা যোগ করার কাজ। জাস্ট আগের মতো loginUser-এর পর কমা দিয়ে addMoney মেথড লিখবি। এইটা তিনটা প্যারামিটার নিবে: নাম, পিন, এমাউন্ট (অর্থাৎ কত টাকা যোগ করতে চাস)। এই মেথড থেকে নাম আর পিন দিয়ে loginUser মেথডকে কল করবি। যদি loginUser থেকে true রিটার্ন পায়, তাহলে users থেকে এই ইউজার খুঁজে বের করে তার বর্তমান ব্যালেন্সে এমাউন্ট প্যারামিটারের টাকা যোগ করে দিবি এবং একটা স্ট্রিং রিটার্ন করবি, যেখানে বলা থাকবে, কার একাউন্টে কত টাকা যোগ করা হইছে এবং তার বর্তমান ব্যালেন্স কত। আর যদি loginUser থেকে false রিটার্ন করে, তাহলে আরেকটা স্ট্রিং রিটার্ন করবি, যেখানে বলা থাকবে, সরি, টাকা একাউন্টে যোগ করতে পারি নাই। তোমার টাকা রিফান্ড করা হইছে।
const userDatabase = (function () {
const users = [ ];
return {
registerUser: function (name, pin) { },
loginUser: function(name, pin){
},
addMoney: function(){
}
}
})();টাস্ক-৪: কার একাউন্টে কত টাকা আছে, সেটা জানার জন্য checkBalance নামক একটি ফাংশন তৈরি করবি, যা ইনপুট হিসেবে নাম আর পিন নিবে। তারপর loginUser মেথড ইউজ করে চেক করবে, নাম আর পিন ঠিক আছে কি না। যদি ঠিক থাকে, তাহলে সেই ইউজার খুঁজে বের করে তার ব্যালেন্স রিটার্ন করে দিবে। আর যদি loginUser থেকে false রিটার্ন করে, তাহলে একটা স্ট্রিং রিটার্ন করে বলবি— তোমার এক্সেস নাই, এই একাউন্টের ব্যালেন্স জানার।
টাস্ক-৫: টাকা পাঠানোর জন sendMoney মেথড লিখে ফেল। এইটা চারটা প্যারামিটার নিবে। প্রথমে যে টাকা পাঠাবে, তার নাম তার পিন। তারপর যাকে টাকা পাঠাবে, তার নাম এবং কত টাকা পাঠাবে।
এই মেথডের ভিতরে প্রথমে loginUser মেথড ইউজ করে চেক করবি, যে টাকা পাঠাচ্ছে, তার নাম এবং পিন ঠিক আছে কি না। যদি সেন্ডারের নাম আর পিন ঠিক না থাকে, তাহলে একটা এরর ম্যাসেজ দিবি, তোমার টাকা পাঠানোর এক্সেস নাই।
আর যদি নাম আর পিন ঠিক থাকে, তাহলে সেই ইউজারকে খুঁজে বের করে চেক করবি, সে যত টাকা পাঠাতে চায়, তার সমান বা বেশি পরিমাণ টাকা তার ব্যালান্সে এ আছে কি না। যদি কম থাকে, তাহলে একটা এরর ম্যাসেজ দিবি, তোমার একাউন্টে যথেষ্ট টাকা নাই।
যদি যথেষ্ট টাকা থাকে, তাহলে যাকে টাকা পাঠাতে চায়, তার নাম দিয়ে তাকে users থেকে খুঁজে বের করার চেষ্টা করবি। যদি সেই নাম দিয়ে কাউকে খুঁজে না পায়, তাহলে একটা এরর ম্যাসেজ দিবে, টাকা রিসিভারকে পাওয়া যায় নাই।
যদি রিসিভারকে পাওয়া যায়, তাহলে যে সেন্ডার তার ব্যালেন্স থেকে যে এমাউন্ট সেন্ড করতে চাচ্ছে, সেটা কমিয়ে তার ব্যালেন্স প্রথমে আপডেট করবি। তারপর যে রিসিভার, তার ব্যালেন্সে সেই এমাউন্ট যোগ করে রিসিভারের ব্যালেন্স আপডেট করবি।
সব ঠিক হলে সবার শেষে একটা ম্যাসেজ পাঠাবি। টাকা ভালোভাবে সেন্ড করে দিয়েছি।
টাস্ক-৬: এইবার transactionHistory রাখতে পারস। যখন কেউ addMoney করে বা কাউকে sendMoney করে, সেই রিলেটেড কিছু তথ্য transactionHistory নামক একটা অ্যারেতে রাখতে পারস। প্রত্যেকটা transaction একটা অবজেক্ট হবে। সেখানে কিছু প্রোপার্টি থাকবে। যেমন: sender, receiver, amount ইত্যাদি।
টাস্ক-৭: কেউ টাকা সেন্ড করতে চাইলে send মানির জন্য 15 টাকা ফি যোগ করতে পারস। সেক্ষেত্রে যখন টাকা পাঠাবে, তখন চেক করবি, যে টাকা পাঠাবে, তার একাউন্টে সেন্ড এমাউন্ট প্লাস 15 টাকার বেশি আছে কি না। আবার যে টাকা রিসিভ করবে, সে কিন্তু এই প্রসেসিং ফি 15 টাকা পাবে না। এই প্রসেসিং ফি 15 টাকা জমা হবে কোম্পানির খাতায়। সেজন্য যেখানে users নামক অ্যারে আছে, সেখানে আরেকটা ভেরিয়েবল ডিক্লেয়ার করে দিতে পারস processingFee নামে এবং যতবার প্রসেসিং ফি পাবে, ততবার সেখানে টাকার পরিমাণ যোগ হবে।