0

私のアプリケーションと問題について少しお話しさせてください。このアプリケーションは、組織によって開始された特定のコースに学生を登録するために使用されます。学生は、他の情報に加えて、フォームに次の情報を提供します。

  • 利用可能なコースからのコース
  • 彼の写真

フォームが正常に送信された後、彼は入院カードを印刷できます。

管理者向け:

  • 彼は好きなだけコースを作成できます
  • 彼はコースの可用性を切り替えることができます
  • 彼はstartコースのロール番号をどこに置くかを選択できます
  • 彼はcurrentコースのロール番号を変更できます

学生が送信をクリックした後に実行される手順は次のとおりです。

  1. course_idフォームから を取得し、そのコースのロールcurrent番号を取得します
  2. currentパスにファイル名としてロール番号を付けて画像を保存しますcourse_name/batch/roll_number.(png|jpg)
  3. 画像が正常に保存された場合は画像を取得し、それ以外の場合は拒否します
  4. 画像のサイズを変更して既存の画像を上書きし、画像を削除してサイズ変更に失敗した場合は拒否します
  5. 生徒のフォームをformsコレクションに保存する
  6. コレクションcurrent内のそのコースのロール番号を増やしますcourses
  7. フォーム データと画像の base64 文字列を含む応答を送信します (入院カードで使用されます)

問題:

問題は、ユーザーが同じロール番号を使用するため、ほぼ同時にフォームを送信すると、重複するロール番号が生成される可能性があることcurrentです。コレクションroll_number から来ているため、フォームを単純に自動インクリメントできないため、この問題を解決できません。courses

私のデータベースは次のようになります。

{   
    "courses":[
        {
            "_id" : ObjectId,
            "batches": [Object],
            "course_name" : String,
            "current": Number, // current roll number
            "start" : Number, // starting roll number
            "available": Boolean
        }
    ],
    "forms": [
        {
            "_id": ObjectId,
            "roll_number": Number,
            "course_id" : ObjectId
            // other stuff
        }
    ],
    "settings": [ // always have one object
        {
            "_id" : ObjectId,
            "accept_form": Boolean,
            "courses": [ObjectId]
        }
    ]
}

私は使っている:

画像を保存するための multer : https://github.com/expressjs/multer

画像のサイズ変更用のシャープ: https://github.com/lovell/sharp

リクエストを処理するためのexpressjs

この重複の問題を解決するにはどうすればよいか教えてください。

4

1 に答える 1