Управляйте запасами на уровне пользователя с помощью мангуста

#node.js #mongodb #mongoose

Вопрос:

Я новичок в NodeJS и пытаюсь создать серверную часть, которая работает как управление продуктами.

Итак, у меня есть пара пользователей и пара продуктов. И у каждого пользователя есть свой собственный набор продуктов с разными запасами. Как бы мне это удалось сделать?

Это моя модель пользователя

 import mongoose from 'mongoose'
const { Schema } = mongoose

const userSchema = Schema({
    username: {
        type: String,
        unique: true,
        allowNull: false,
        required: true,
        lowercase: true,
        minlength: 5,
        maxlength: 20
    },
    password: {
        type: String,
        required: true,
        allowNull: false,
        minlength: 5
    },
    buddy: {
        buddyId: {
            type: Number,
            
        },
        buddyHash: String,
        firstName: String,
        lastName: String,
    },
    products: [{
        type: Schema.Types.ObjectId,
        ref: 'product',
        **stock: Number**
    }],
    orders: [{
        type: Schema.Types.ObjectId,
        ref: 'order',
    }]
}, { timestamps: true, strict: true })

const UserModel = mongoose.model('user', userSchema)
export default UserModel
 

Работает ли выделенный «запас»?

Это моя модель продукта

 import mongoose from 'mongoose'
const {Schema} = mongoose

const productSchema = Schema({
    name: String,
    formattedName: String,
    ean: Number,
    producerArtNr: Number,
    partnerArtNr: Number,
    partner: String,
    purchasePrice: Number,
    salesPriceInkVat: Number,
    salesPriceExVat: Number,
    margin: Number, 
    profit: Number,
    brand: String,
    category:[{
        type: Schema.Types.ObjectId, 
        ref: 'categories',
    }],
    users:[{
        type: Schema.Types.ObjectId, 
        ref: 'user',
    }]
}, {timestamps: true, strict: true})

const ProductModel = mongoose.model('product', productSchema)
export default ProductModel
 

I need to be able to update the stock of each product that is individually different depending on the user

My UserController

 const registerUser = async (request, response) => {
    const hashedPassword = await bcrypt.hash(request.body.password, 12)
    const user = new UserModel({
        username: request.body.username,
        password: hashedPassword,
        buddy:{
            buddyId: request.body.buddy.buddyId,
            buddyHash: request.body.buddy.buddyHash,
            firstName: request.body.buddy.firstName,
            lastName: request.body.buddy.lastName,
        },
    });

    try {
        const product = await ProductModel.findById({_id: request.body.products.id})
        product.users.push(product)
        user.products = product
        await product.save()
        const databaseResponse = await user.save();
        response.status(201).send(databaseResponse);
    } catch (error) {
        response.status(500).send({ message: error.message });
    }
};