2017-01-22 5 views
1

私はプラットフォームで動作しています - 予約でMarketPlace。 空き容量を作成する専門家がいます。利用可能期間は、たとえば午前8時から午後5時までです。それはmongodbに保存されている期間です。 顧客は1時間の期間を選択します。 (顧客のカレンダーは、1時間の期間で動的に生成されます) 午前8時から午後5時まで:8:00-9:00am、9:00 am-10:00amなど...同時実行モデルmongodb doctrine symfony

2人の顧客が同じ期間を同時に予約することはできません。

お客様が期間を選択して「ブックボタン」をクリックすると、予約オブジェクトがセッションに保存されます。顧客がこの予約を購入し、予約オブジェクトが予約コレクションに保存された後。

期間を「ロック」する方法は、最初の顧客が選択し、同じ期間を予約したい第2の顧客を防ぐ方法ですか?

どのようにしてタイマーを10分間修正することができますか?期間 "利用可能"の支払いがない場合は、カレンダーの期間を解除しますか?サーバーと同期したクロノメーターを作成し、タイムアウトが満了したときにホームページにリダイレクトするにはどうすればよいですか? 予約が進行中の一時的なコレクションを作成する必要がありますか?または、 "進行中"ステータスの私のコレクション予約にオブジェクト予約を保存しますか?

私はdoctrineでsymfony 3とmongodbを使用します。

ありがとうございます。

答えて

1

どのようにして期間を最初の顧客が選択し、 同じ期間を予約したいのですか?

db.time_reservation.update(
    {_id: "<period primary key>", reserved: false,}, { 
     $set: { 
      reserved: true, 
      reservedAt: new Date() 
     } 
    }); 

そして、私はそこには10分間とあれば、タイマーを修正する方法:

のMongoDBにおける単一の文書への更新がアトミックである、それはあなたのような予約フラグ何かを設定することができます理由です 期間 "利用可能"の支払い、カレンダーでその期間のロックを解除する?

あなたはどのようにサーバーと同期クロノメーターを作成して、タイムアウトの期限が切れたとき ホームページにリダイレクト

db.time_reservation.update({ 
    reservedAt: { 
     $lt: new Date(ISODate().getTime() - 1000 * 60 * 10) 
    } 
}, {$set: {reserved: false}}); 

のようなものを実行しますcronコマンドを使用できますか?

多くの可能な解決策:

  • あなたは(あなたがバックエンドからのタイムスタンプを取得し、それを検証することができ、すべての予約ステージ

  • でこれを確認することができ、これはdoes'ntであればクッキーに保存SPA)

+0

ありがとうございました。私が教義を使うなら。それは操作が常に原子的なのでしょうか? – Oneill

+0

はい、Doctrineは何もできません - これはmongodbの機能です。この更新の結果を確認するだけです。変更された行の数を返す必要があります。ゼロと等しい場合、これは時間が確保されたことを意味します。 – vuliad

+0

ありがとうございました! – Oneill