私のアプリケーションと問題について少しお話しさせてください。このアプリケーションは、組織によって開始された特定のコースに学生を登録するために使用されます。学生は、他の情報に加えて、フォームに次の情報を提供します。
- 利用可能なコースからのコース
- 彼の写真
フォームが正常に送信された後、彼は入院カードを印刷できます。
管理者向け:
- 彼は好きなだけコースを作成できます
- 彼はコースの可用性を切り替えることができます
- 彼は
start
コースのロール番号をどこに置くかを選択できます - 彼は
current
コースのロール番号を変更できます
学生が送信をクリックした後に実行される手順は次のとおりです。
course_id
フォームから を取得し、そのコースのロールcurrent
番号を取得しますcurrent
パスにファイル名としてロール番号を付けて画像を保存しますcourse_name/batch/roll_number.(png|jpg)
- 画像が正常に保存された場合は画像を取得し、それ以外の場合は拒否します
- 画像のサイズを変更して既存の画像を上書きし、画像を削除してサイズ変更に失敗した場合は拒否します
- 生徒のフォームを
forms
コレクションに保存する - コレクション
current
内のそのコースのロール番号を増やしますcourses
- フォーム データと画像の 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
この重複の問題を解決するにはどうすればよいか教えてください。