Я новичок в postgres
и Sequelize
.Я пришел из NoSQL, поэтому это немного утомительно для меня.
Прежде всего, это каталог моего проекта:
server/
components/
center/
center.model.js
center.controller.js
center.routes.js
Итак, я следую архитектуре на основе модулей.
Вот мой center.models.js
:
const Sequelize = require('sequelize');
const sequelize = require('../../config/sequelize');
const Inventory = require('../inventory/inventory.model');
const Center = sequelize.define('center', {
name: {
type: Sequelize.TEXT,
allowNull: false,
validate: {
notEmpty: true,
},
},
zone: {
type: Sequelize.TEXT,
allowNull: false,
validate: {
notEmpty: true,
},
},
lat: {
type: Sequelize.DOUBLE,
},
long: {
type: Sequelize.DOUBLE,
},
nearest_metro: {
type: Sequelize.TEXT,
},
metro_distance: {
type: Sequelize.DOUBLE,
},
address: {
type: Sequelize.TEXT,
},
google_map: {
type: Sequelize.TEXT,
},
landmark: {
type: Sequelize.TEXT,
},
landmark_directions: {
type: Sequelize.TEXT,
},
active: {
type: Sequelize.BOOLEAN,
defaultValue: true,
},
created_at: {
type: Sequelize.DATE,
defaultValue: Sequelize.NOW
},
updated_at: {
type: Sequelize.DATE,
defaultValue: Sequelize.NOW
}
});
Center.hasMany(Inventory);
module.exports = Center;
А это моя SpacePartner
модель:
const Sequelize = require('sequelize');
const sequelize = require('../../config/sequelize.js');
const Center = require('../center/center.model.js');
const SpacePartner = sequelize.define('space_partner', {
name: {
type: Sequelize.TEXT,
allowNull: false,
validate: {
notEmpty: true,
},
},
active: {
type: Sequelize.BOOLEAN,
defaultValue: true,
},
created_at: {
type: Sequelize.DATE,
defaultValue: Sequelize.NOW
},
updated_at: {
type: Sequelize.DATE,
defaultValue: Sequelize.NOW
}
});
SpacePartner.hasMany(Center);
module.exports = SpacePartner;
И вот как я использую две модели в моемspace_partner.controller.js
:
const CreateSpacePartner = async (req, res) => {
try {
const {
spacePartner,
center,
inventory,
} = req.body;
const [createdSP, createdCenter, createdInventory] = await Promise.all([SpacePartner.create(spacePartner), Center.create(center), Inventory.create(inventory)]);
createdCenter.addSpacePartner(createdSP);
createdInventory.addCenter(createdCenter);
createdInventory.addInventoryType(inventory.inventory_type_id);
const [updatedCenter, updatedInventory] = await Promise.all([createdCenter.save({
fields: ['space_partner_id']
}), createdInventory.save({
fields: ['center_id', 'inventory_type_id']
})]);
return res.status(200).json({
spacePartner: createdSP,
center: updatedCenter,
inventory: updatedInventory,
});
} catch (e) {
console.log(e);
return res.status(500).json({
message: 'Sorry, we are facing some issue right now. Please, try again later.',
});
}
};
Теперь проблема в том, что я получаю TypeError
на addSpacePartner
addCenter
и addInventoryType
.
Я следовал официальным документам.
Я прошел другие уроки, но в них было больше архитектуры MVC, я не хочу возвращаться к реструктуризации своего кода.
Любая помощь будет очень полезной.