Firebase 'ਤੇ ਕਸਟਮ ਈ-ਕਾਮਰਸ (Custom E-commerce on Firebase)
ਮੈਂ ਸ਼ੁਰੂ ਤੋਂ ਇੱਕ ਕਸਟਮ ਈ-ਕਾਮਰਸ ਸਾਈਟ ਬਣਾਈ ਹੈ। ਮੈਂ ਬਣੇ-ਬਣਾਏ (off-the-shelf) ਪਲੇਟਫਾਰਮਾਂ ਦੀ ਵਰਤੋਂ ਨਹੀਂ ਕੀਤੀ। ਇਸ ਦੀ ਬਜਾਏ, ਮੈਂ Firebase Realtime Database ਅਤੇ Netlify ਦੀ ਵਰਤੋਂ ਕੀਤੀ।
ਕਲਾਇੰਟ ਨੂੰ ਇੱਕ ਖਾਸ ਸੈੱਟਅੱਪ ਦੀ ਲੋੜ ਸੀ। ਉਹਨਾਂ ਨੂੰ ਕੀਮਤਾਂ ਦੇ ਵੱਖ-ਵੱਖ ਵਿਕਲਪਾਂ (pricing variants) ਵਾਲਾ ਇੱਕ ਪ੍ਰੋਡਕਟ ਕੈਟਾਲਾਗ ਅਤੇ ਇੱਕ ਐਡਮਿਨ ਪੈਨਲ ਚਾਹੀਦਾ ਸੀ। ਉਹਨਾਂ ਨੂੰ ਇਹ ਵੀ ਚਾਹੀਦਾ ਸੀ ਕਿ ਉਹਨਾਂ ਦੀ ਸੇਲਜ਼ ਟੀਮ ਸਿੱਧੇ ਸਾਈਟ ਤੋਂ ਆਰਡਰ ਦੇ ਸਕੇ।
ਇੱਥੇ ਦੱਸਿਆ ਗਿਆ ਹੈ ਕਿ ਮੈਂ ਮੁੱਖ ਤਕਨੀਕੀ ਚੁਣੌਤੀਆਂ ਨੂੰ ਕਿਵੇਂ ਹੱਲ ਕੀਤਾ।
ਡਾਟਾ ਵੱਖ ਕਰਨਾ (Data Separation)
ਮੈਂ ਈ-ਕਾਮਰਸ ਡਾਟਾਬੇਸ ਨੂੰ ਅੰਦਰੂਨੀ ਪ੍ਰਬੰਧਨ (internal management) ਡਾਟਾਬੇਸ ਤੋਂ ਵੱਖ ਰੱਖਿਆ। ਇਹ ਵਪਾਰਕ ਡਾਟਾ ਨੂੰ ਕਰਮਚਾਰੀਆਂ ਦੀਆਂ ਤਨਖਾਹਾਂ ਜਾਂ ਬਜਟ ਵਰਗੀਆਂ ਸੰਵੇਦਨਸ਼ੀਲ ਫਾਈਲਾਂ ਨਾਲ ਮਿਲਣ ਤੋਂ ਰੋਕਦਾ ਹੈ।
ਕੀਮਤਾਂ ਲਈ ਡਾਟਾ ਮਾਡਲਿੰਗ (Data Modeling for Pricing)
ਕੀਮਤ ਯੋਜਨਾਵਾਂ (Pricing plans) ਅਕਸਰ ਵੱਖ-ਵੱਖ ਉਤਪਾਦਾਂ ਵਿੱਚ ਦੁਹਰਾਈਆਂ ਜਾਂਦੀਆਂ ਹਨ। ਜੇਕਰ ਤੁਸੀਂ ਹਰ ਉਤਪਾਦ ਦੇ ਅੰਦਰ ਯੋਜਨਾ ਦਾ ਡਾਟਾ ਡੁਪਲੀਕੇਟ ਕਰਦੇ ਹੋ, ਤਾਂ ਅੱਪਡੇਟ ਕਰਨਾ ਬਹੁਤ ਮੁਸ਼ਕਲ ਹੋ ਜਾਂਦਾ ਹੈ।
- ਮੈਂ ਸਾਰੀਆਂ ਯੋਜਨਾਵਾਂ ਲਈ ਇੱਕ ਗਲੋਬਲ ਆਰਕਾਈਵ ਬਣਾਇਆ।
- ਹਰ ਉਤਪਾਦ ਵਿੱਚ ਸਿਰਫ਼ plan IDs ਦਾ ਇੱਕ array ਹੁੰਦਾ ਹੈ।
- ਇਹ ਅੱਪਡੇਟਸ ਨੂੰ ਤੇਜ਼ ਬਣਾਉਂਦਾ ਹੈ ਅਤੇ ਡਾਟਾ ਗਲਤੀਆਂ ਨੂੰ ਰੋਕਦਾ ਹੈ।
ਐਟੋਮਿਕ ਆਰਡਰ ਨੰਬਰਿੰਗ (Atomic Order Numbering)
ਜਦੋਂ ਇੱਕੋ ਸਮੇਂ ਕਈ ਲੋਕ ਆਰਡਰ ਦਿੰਦੇ ਹਨ, ਤਾਂ ਤੁਹਾਨੂੰ 'race condition' ਦਾ ਸਾਹਮਣਾ ਕਰਨਾ ਪੈਂਦਾ ਹੈ। ਜੇਕਰ ਦੋ ਉਪਭੋਗਤਾ ਇੱਕੋ ਆਖਰੀ ਆਰਡਰ ਨੰਬਰ ਪੜ੍ਹਦੇ ਹਨ, ਤਾਂ ਇੱਕ ਆਰਡਰ ਦੂਜੇ ਨਾਲ ਬਦਲ (overwrite) ਜਾਂਦਾ ਹੈ।
- ਮੈਂ ਇਸ ਨੂੰ ਹੱਲ ਕਰਨ ਲਈ Firebase transactions ਦੀ ਵਰਤੋਂ ਕੀਤੀ।
runTransactionਫੰਕਸ਼ਨ ਇਹ ਯਕੀਨੀ ਬਣਾਉਂਦਾ ਹੈ ਕਿ ਕਈ ਇੱਕੋ ਸਮੇਂ ਵਰਤੋਂਕਾਰਾਂ (concurrent users) ਦੇ ਹੋਣ ਦੇ ਬਾਵਜੂਦ ਨੰਬਰ ਸਹੀ ਤਰੀਕੇ ਨਾਲ ਵਧਦਾ ਹੈ।- ਇਹ ਗਾਰੰਟੀ ਦਿੰਦਾ ਹੈ ਕਿ ਹਰ ਆਰਡਰ ਦਾ ਇੱਕ ਵਿਲੱਖ (unique) ਨੰਬਰ ਹੋਵੇ।
ਸੁਰੱਖਿਅਤ ਐਡਮਿਨ ਐਕਸੈਸ (Secure Admin Access)
ਮੈਂ ਸੋਰਸ ਕੋਡ ਵਿੱਚ ਪਾਸਵਰਡ ਸਟੋਰ ਨਹੀਂ ਕਰਨਾ ਚਾਹੁੰਦਾ ਸੀ। ਮੈਂ MD5 ਵਰਗੇ ਸਧਾਰਨ ਹੈਸ਼ਾਂ (hashes) ਤੋਂ ਵੀ ਬਚਿਆ।
- ਮੈਂ Web Crypto API ਰਾਹੀਂ PBKDF2 ਦੀ ਵਰਤੋਂ ਕੀਤੀ।
- ਇਹ ਹੈਸ਼ 'ਤੇ ਹਜ਼ਾਰਾਂ ਇਟਰੇਸ਼ਨਾਂ (iterations) ਨੂੰ ਲਾਗੂ ਕਰਦਾ ਹੈ।
- ਇਹ ਹੈਕਰਾਂ ਲਈ ਬਰੂਟ-ਫੋਰਸ (brute-force) ਹਮਲਿਆਂ ਨੂੰ ਬਹੁਤ ਮਹਿੰਗਾ ਬਣਾ ਦਿੰਦਾ ਹੈ।
- ਮੈਂ ਕੋਡ ਵਿੱਚ ਸਿਰਫ਼ salt ਅਤੇ hash ਸਟੋਰ ਕਰਦਾ ਹਾਂ।
'Zero' ਬੱਗ ਨੂੰ ਸੁਧਾਰਨਾ (Correcting the 'Zero' Bug)
ਮੈਨੂੰ ਇੱਕ ਬੱਗ ਮਿਲਿਆ ਜਿੱਥੇ 0 ਕੀਮਤ ਵਾਲੇ ਉਤਪਾਦ "price to be defined" ਵਜੋਂ ਦਿਖਾਈ ਦਿੰਦੇ ਸਨ।
- ਇਹ ਇਸ ਲਈ ਹੋਇਆ ਕਿਉਂਕਿ JavaScript 0 ਨੂੰ "falsy" ਮੰਨਦਾ ਹੈ।
- ਮੈਂ ਆਪਣੇ ਲੌਜਿਕ ਨੂੰ ਬਦਲ ਕੇ ਇਸ ਨੂੰ ਠੀਕ ਕੀਤਾ।
- "price || null" ਦੀ ਵਰਤੋਂ ਕਰਨ ਦੀ ਬਜਾਏ, ਮੈਂ "price != null" ਦੀ ਵਰਤੋਂ ਕੀਤੀ।
- ਇਹ ਯਕੀਨੀ ਬਣਾਉਂਦਾ ਹੈ ਕਿ ਸਿਸਟਮ 0 ਨੂੰ ਇੱਕ ਵੈਧ (valid) ਨੰਬਰ ਵਜੋਂ ਪਛਾਣਦਾ ਹੈ।
CSP ਕੌਂਫਿਗਰੇਸ਼ਨ (CSP Configuration)
Firebase ਡਾਇਨਾਮਿਕ ਸਬਡੋਮੇਨਾਂ ਦੀ ਵਰਤੋਂ ਕਰਦਾ ਹੈ। Content Security Policy (CSP) ਲਈ ਇੱਕ ਸਟੈਂਡਰਡ HTML meta tag ਇਹਨਾਂ ਵਾਈਲਡਕਾਰਡਸ (wildcards) ਨੂੰ ਸੰਭਾਲ ਨਹੀਂ ਸਕਦਾ।
- ਮੈਂ CSP ਨੂੰ HTML ਤੋਂ Netlify HTTP headers ਵਿੱਚ ਬਦਲ ਦਿੱਤਾ।
- ਇਸ ਨਾਲ ਮੈਨੂੰ Firebase ਸੇਵਾਵਾਂ ਨੂੰ ਸਹੀ ਢੰਗ ਨਾਲ ਕੰਮ ਕਰਨ ਲਈ ਵਾਈਲਡਕਾਰਡਸ ਦੀ ਵਰਤੋਂ ਕਰਨ ਦੀ ਇਜਾਜ਼ਤ ਮਿਲੀ।
ਕਸਟਮ ਸਿਸਟਮ ਬਣਾਉਣ ਲਈ ਸਿਰਫ਼ ਕੋਡ ਲਿਖਣ ਤੋਂ ਵੱਧ ਦੀ ਲੋੜ ਹੁੰਦੀ ਹੈ। ਇਸ ਲਈ ਅਜਿਹੇ ਆਰਕੀਟੈਕਚਰਲ ਫੈਸਲੇ ਲੈਣ ਦੀ ਲੋੜ ਹੁੰਦੀ ਹੈ ਜੋ ਪ੍ਰੋਡਕਸ਼ਨ ਫੇਲ੍ਹ ਹੋਣ ਤੋਂ ਰੋਕ ਸਕਣ।
ਸਰੋਤ: https://dev.to/androve2k/custom-e-commerce-on-firebase-catalog-atomic-orders-and-admin-panel-42ec
