2017-06-30 14 views
0

firebaseで生成された注文/請求書に対して、クラウド機能で一意の読み取り可能なIDが必要です。 私は、ユーザーが同時に2つの注文を送信することはできないので、uidとタイムスタンプに基づくランダムなIDは良い解決策だと思います。Firebase用のIdジェネレータアルゴリズム

あなたはどう思いますか?

私はこの主旨=>https://gist.github.com/mikelehen/3596a30bd69384624c11

を編集したそして、これが結果です:

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; 
    }; 
})(); 

答えて

0

いいアイデアが、あなたはそれを

はユニークなIDを生成する簡単な方法を行うことができます

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

1分後にユーザーが注文を追加できないようにする

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

はい、しかしfirebaseこの=> '-JRHTHaIs-jNPLXOQivY' などのキーを生成するが、私はこの=> 'j4jo-f9v2-l6v8-srpv' として、より読みやすいのidをしたい – SaroVin

+0

あなたはUUID 'nodejs使用することができます'libそれは良いreadbleUUIDを生成する –

+0

私はrepoを作成した=> https://github.com/sarovin/order-id-generator – SaroVin

関連する問題