2017-06-30 3 views
0

Je veux un identifiant unique et lisible pour les commandes/factures générées sur Firebase avec les fonctions de cloud. Je pense qu'un ID aléatoire basé sur l'UID et l'horodatage est une bonne solution car un utilisateur ne peut pas envoyer deux ordres en même temps.Algorithme de générateur d'ID de commande pour Firebase

Qu'en pensez-vous?

J'ai modifié ce point essentiel =>https://gist.github.com/mikelehen/3596a30bd69384624c11

Et c'est les résultats:

export default (() => { 
    const PUSH_CHARS = 'abcdefghijklmnopqrstuvwxyz'; 

    let lastPushTime = 0; 
    let lastRandChars = []; 

    return (uid) => { 
    if (uid.length != 28) throw new Error('UID length should be 28.'); 

    let now = new Date().getTime(); 
    const duplicateTime = (now === lastPushTime); 
    lastPushTime = now; 

    // CONVERT TimeStamp to CHARS 
    const timeStampChars = new Array(8); 
    let i; 
    for (i = timeStampChars.length - 1; i >= 0; i--) { 
     timeStampChars[i] = PUSH_CHARS.charAt(now % 36); 

     now = Math.floor(now/36); 
    } 
    if (now !== 0) throw new Error('We should have converted the entire timestamp.'); 

    let id = timeStampChars.join(''); 

    // ADD 2 random CHARS 
    for (i = 0; i < 2; i++) { 
     id += PUSH_CHARS.charAt(Math.floor(Math.random() * 36)).toLowerCase(); 
    } 
    Math.max 

    // ADD random chars of UID 
    if (!duplicateTime) { 
     for (i = 0; i < 6; i++) { 
     lastRandChars[i] = Math.floor(Math.random() * 28); 
     } 
    } else { 
     for (i = 5; i >= 0 && lastRandChars[i] === 27; i--) { 
     lastRandChars[i] = 0; 
     } 
     lastRandChars[i]++; 
    } 
    for (i = 0; i < 6; i++) { 
     id += uid.charAt(lastRandChars[i]).toLowerCase(); 
    } 

    // The id must be 16 
    if (id.length != 16) throw new Error('Length should be 16.'); 

    return id; 
    }; 
})(); 

Répondre

0

belle idée, mais vous pouvez le faire de la manière facile

générer l'ID unique

let key = databaseReference.push().getKey(); 

empêche l'utilisateur d'ajouter une commande après 1 minute seulement

$order": { 
    ".write": "data.child('timestamp').val() > (now - 60000)", 
} 
+0

Oui, mais générer une clé firebase comme ceci => '-JRHTHaIs-jNPLXOQivY' mais je veux un identifiant plus lisible que cette => 'j4jo-f9v2-l6v8-SRPV' – SaroVin

+0

vous pouvez utiliser nodejs 'UUID 'lib il générer un bon read uuid –

+0

j'ai créé un repo => https://github.com/sarovin/order-id-generator – SaroVin