带有 Express 和 MongoDB 的好友请求系统

jbl*_*lew 3 schema mongodb node.js express

我试图让用户向其他用户发送类似于 Facebook 和其他社交媒体平台的好友请求。我已经开始创建这个功能,但很快就卡住了,因为我是 mongoDB 和整个 Schema 的新手。

以下是我目前拥有的模型:

// 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);
Run Code Online (Sandbox Code Playgroud)

这是我得到的。从这里开始,我不知道如何使用这些模式在 2 个用户之间建立友谊。我的最终目标是在网页上有一个按钮,可以向目标收件人发送好友请求,然后他们可以接受或拒绝该请求。

对此的任何帮助都会很棒,因为我不知道从这里开始使用这 2 个模式做什么。谢谢!

arr*_*ore 5

我们只需要采用一个模式,即 userSchema(正如 Israel 上面所说的,你只需要一个数组/对象来列出你在 userSchema 上的友谊)。但是我们需要添加另一个模式(说是friendRequestSchema)。

FriendRequest 架构将是: - ID 用户请求 (int) - ID 用户接收者 (int) - 状态 (int) //假设 1 = 请求,2 = 接受,3 = 拒绝

控制器应该来自用户 A 单击用户 B 页面上的“好友请求”按钮。

  1. 好友请求按钮将调用一个函数,让它说“sendFriendRequest()”

如果函数运行它会记录在friendRequest DB上,它会记录用户A(作为请求者)的ID,用户B的ID和请求状态。

如果请求状态 = 1,则用户 B 将收到通知,并给他两个选项,接受和拒绝。

  1. 用户 B 接受或拒绝

如果用户按下按钮接受,则friendRequest DB 中的状态更新为=> 2(已接受)。然后,您必须调用另一个函数将用户 ID A 添加到用户 B 的好友列表中。反之亦然。然后,如果您想发出通知,也可以调用它。

否则用户 B 将按下拒绝(状态将为 => 3)然后通知它。

用户架构

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

然后 FriendRequestschema

var FriendRequestSchema = new Schema({
requester: {
    type: int,
    required: true
},
recipient: {
    type: int,
    required: true
},
status: 
    type: int,
    required: true });
Run Code Online (Sandbox Code Playgroud)

这只是为了让您知道它是如何工作的。关于 (sendrequest,block .etc) 的更复杂的方法你可以查看这个链接,它是 PHP 的流程,但你可以很容易地将它移到你的 js 中。希望对你有所帮助。