2017-04-20 7 views
0

私は、ユーザーがFacebookや他のソーシャルメディアプラットフォームのような他のユーザーにフレンドリクエストを送信できるようにしています。私はこの機能を作成し始めましたが、mongoDBとSchemaの全機能を初めて習得して以来、急速に立ち往生しています。ここでExpress&MongoDBのフレンドリクエストシステム

は、私が現在持っているモデルです。

// User Schema 
var UserSchema = new Schema({ 
    _id: { 
     type: Number 
    }, 
    name: { 
     type: String 
    }, 
    username: { 
     type: String, 
     index: true 
    }, 
    password: { 
     type: String, 
     required: true 
    }, 
    email: { 
     type: String 
    }, 
    friends: [{ 
     friendName: { 
      type: Schema.ObjectId, 
      required: true, 
      ref: 'User' 
     }, 
     duration: { 
      type: Number 
     } 
    }] 
}); 


// Friendship Schema 
var FriendshipSchema = new Schema({ 
    participants: [{ 
     type: Schema.Types.ObjectId, 
     ref: 'User' 
    }], 
    requestTo: { 
     type: Schema.Types.ObjectId, 
     ref: 'User' 
    }, 
    accepted: { 
     type: Boolean, 
     default: false 
    }, 
    user: { 
     type: Schema.ObjectId, 
     ref: 'User' 
    } 
}); 

var Friendship = module.exports = mongoose.model('Friendship', FriendshipSchema); 

var User = module.exports = mongoose.model('User', UserSchema); 

これは、私の知る限り得ているようです。ここから、これらのスキーマを使用して2人のユーザー間の友情を確立する方法はわかりません。私の究極の目標は、目的の受信者にフレンドリクエストを送信したWebページ上のボタンを使用して、リクエストを受け入れるか拒否するかを選択することです。

私はこれらの2つのスキーマで何をすべきかわからないので、これに関する助けは素晴らしいでしょう。ありがとう!

答えて

2

userSchemaというスキーマを1つだけ使用する必要があります(前述のイスラエルのように、userSchemaであなたの友人関係をリストするには配列/オブジェクトが必要です)。しかし、別のスキーマを追加する必要があります(friendRequestSchemaと言っています)。

FriendRequestスキーマは次のようになります。 - IDのユーザー要求(INT) - 要求された状態(INT)= 1を言わせて、// 2 =受け入れ、3 =は

を拒否 - IDのユーザーの受信者(int型) そして、ユーザーAからのコントローラでなければなりません。ユーザーBページの "Friend Request"ボタンをクリックします。

  1. 友達リクエストボタンは、関数が関数が実行されている場合、それはあるが、(要求元のように)、ユーザAのIDを記録しますfriendRequest DBに記録されるだろう

「)sendFriendRequest(」それは言って聞かせて呼び出します、ユーザBのIDと要求ステータスを含む。

リクエストステータス= 1の場合、ユーザBに通知され、受け入れられ拒否される2つのオプションがユーザに表示されます。

  • ユーザB承認または拒否を
  • ユーザ押しボタンを受け入れる場合、friendRequest DBで更新ステータス=> 2(承認)です。次に、ユーザーBの友人リストにユーザーID Aを追加する別の関数を呼び出す必要があります。通知をしたい場合は、それを呼び出すこともできます。

    これ以外の場合は、ユーザーBは拒否(ステータスは=> 3)、notifを押します。

    UserSchema

    var UserSchema = new Schema({ 
    name: String, 
    username: { 
        type: String, 
        index: true 
    }, 
    password: { 
        type: String, 
        required: true 
    }, 
    email: String, 
    friendship: [String] }); 
    

    その後FriendRequestschema

    var FriendRequestSchema = new Schema({ 
    requester: { 
        type: int, 
        required: true 
    }, 
    recipient: { 
        type: int, 
        required: true 
    }, 
    status: 
        type: int, 
        required: true }); 
    

    これがどれだけその仕事、あなたが知っているようにします。もっと複雑なメソッド(sendrequest、block .etc)はcheck this linkです。PHPのフロープロセスですが、簡単にjsに移すことができます。それがあなたを助けることを願っています。

    +0

    ありがとうございます。私は物事がどのように機能するかのレイアウトが本当に好きです。どのくらいリクエスタが誰であるかは、友人がどのくらい知っていますか? FriendRequestSchemaには、参照するIDはありません。しかし、あなたがそれを説明するとき、あなたは "IDユーザーリクエスト(int)"と言います。 – jblew

    +0

    レイアウトをデザインするのに役立ちます。あなたのアプリはユーザー認証システムを持っていると思いますよね?ユーザーが正常にログインした後、IDを記録することができます。ボタン送信の友人要求では、 'get'メソッドを使用してリクエスタIDを取得するか、より強力であると考える別の簡単な方法でリクエスタIDを取得できます。私は、frientRequestSchemaが両方のユーザーのIDを取得するために使用されることを明確にしたいと思います。したがって、それは1.リクエスタ(ID)2.受信者(ID)と3.ステータス。 – arrlancore

    +0

    はい、私はユーザー管理システムを用意しています。各ユーザは 'passport.js'から自動的にIDを割り当てられます。ユーザーAが「友達を追加」ボタンをクリックすると、IDを記録してスキーマ内のリクエスタに設定する必要がありますか?その後、目的の友人は受信者に設定されます。最後に、Status(int)は、友情の状態に応じて1,2または3に設定されます。これは正しいです?ちょうど明確化、ありがとう – jblew

    1

    あなたのモデルを向上させることができ、そして、あなたのコードをきれいにすることができます。

    var UserSchema = new Schema({ 
        name: String, 
        username: { 
         type: String, 
         index: true 
        }, 
        password: { 
         type: String, 
         required: true 
        }, 
        email: String, 
        friends: [String] 
    }); 
    

    これは次のようになります。

    まずあなたが唯一のフィールドの種類を与える場合は、括弧は必要ありません。スキーマの簡略版。 mongooseが自動的に作成するため、_idフィールドを指定する必要はありません。カスタマイズした価値をそこに入れたいのであれば、それを挿入するだけです。

    第二:

    あなたが参照他のユーザーをしたい場合は、なぜ他のユーザーからのIDが含まれているだけの単純な配列を使用することではありません。たとえば、ユーザーAがいる場合、このユーザーの「友人関係」は「友人」フィールドに含まれるユーザーIDです。その場合

    {id:12345, username:"A", password:***, email:"[email protected]", friends:[B_id,C_id,D_id]} 
    

    あなたはAの友人のリストを作成したい時はいつでも、あなただけのMongoDBで$lookup操作を行うことができ、それはあなたのために、他のユーザーの情報を記入します。

    私はあなたの質問すべてをカバーしているとは思わないが、私の答えが役に立つと願っています。

    関連する問題