USER
```
const Sequelize = require('sequelize');
const sequelize = require('../connection');
const ProxyBodyModel = sequelize.define(
'proxybody',
{
id: {
type: Sequelize.INTEGER,
primaryKey: true,
autoIncrement: true,
allowNull: false,
},
count: {
type: Sequelize.INTEGER,
allowNull: true,
defaultValue: 1,
},
unit: {
type: Sequelize.STRING(8),
allowNull: false,
},
proxyHeaderId: {
type: Sequelize.INTEGER,
foreignKey: true,
allowNull: false,
},
productId: {
type: Sequelize.INTEGER,
foreignKey: true,
allowNull: false,
},
},
{
timestamps: false,
}
);
module.exports = ProxyBodyModel;
```
```
const ProxyBodyModel = require('../models/proxy-body-model');
class ProxyBodyService {
/** получить все записи из таблицы "proxybodies" по proxyHeaderId */
async getAllHeadersRecords(headerId) {
const list = await ProxyBodyModel.findAll({ where: { proxyHeaderId: headerId } });
return list;
}
/** создать запись в таблице "proxybodies" */
async createRecord(payload) {
const data = await ProxyBodyModel.create(payload);
return data;
}
/** обновить запись в таблице "proxybodies" */
async updateRecord(payload) {
let record = await ProxyBodyModel.findOne({ where: { id: payload.id } });
record.count = payload?.count || record.count;
record.unit = payload?.unit || record.unit;
record.proxyHeaderId = payload?.proxyHeaderId || record.proxyHeaderId;
record.productId = payload?.productId || record.productId;
return await record.save();
}
/** удалить запись из таблицы "proxybodies" */
async removeRecord(recordId) {
const record = await ProxyBodyModel.destroy({ where: { id: recordId } });
return record;
}
}
module.exports = new ProxyBodyService();
```
По примеру выше сделай для:
```
const Sequelize = require('sequelize');
const sequelize = require('../connection');
const OsbodiesModel = sequelize.define(
'osbody',
{
id: {
type: Sequelize.INTEGER,
primaryKey: true,
autoIncrement: true,
allowNull: false,
},
osHeaderId: {
type: Sequelize.INTEGER,
allowNull: false,
},
productId: {
type: Sequelize.INTEGER,
allowNull: false,
},
inventoryNum: {
type: Sequelize.INTEGER,
allowNull: false,
},
cost: {
type: Sequelize.INTEGER,
allowNull: false,
},
debet: {
type: Sequelize.STRING(100),
allowNull: false,
},
credit: {
type: Sequelize.STRING(100),
allowNull: false,
},
journalNum: {
type: Sequelize.STRING(100),
allowNull: false,
},
},
{
tableName: 'osbodies', // Имя таблицы
schema: 'os', // Указываем схему базы данных
timestamps: false, // Отключаем временные метки
}
);
module.exports = OsbodiesModel;
```ASSISTANT
Создадим сервис для модели `OsbodiesModel`, аналогичный вашему примеру с `ProxyBodyService`. Этот сервис будет включать основные методы для CRUD операций, с учетом специфики работы с полем `osHeaderId`.
### Сервис `OsbodiesService`
```javascript
const OsbodiesModel = require('../models/osbodies-model');
class OsbodiesService {
/** получить все записи из таблицы "osbodies" по osHeaderId */
async getAllHeadersRecords(headerId) {
const list = await OsbodiesModel.findAll({ where: { osHeaderId: headerId } });
return list;
}
/** создать запись в таблице "osbodies" */
async createRecord(payload) {
const data = await OsbodiesModel.create(payload);
return data;
}
/** обновить запись в таблице "osbodies" */
async updateRecord(payload) {
let record = await OsbodiesModel.findOne({ where: { id: payload.id } });
if (record) {
record.osHeaderId = payload?.osHeaderId || record.osHeaderId;
record.productId = payload?.productId || record.productId;
record.inventoryNum = payload?.inventoryNum || record.inventoryNum;
record.cost = payload?.cost || record.cost;
record.debet = payload?.debet || record.debet;
record.credit = payload?.credit || record.credit;
record.journalNum = payload?.journalNum || record.journalNum;
return await record.save();
}
throw new Error('Record not found');
}
/** удалить запись из таблицы "osbodies" */
async removeRecord(recordId) {
const record = await OsbodiesModel.destroy({ where: { id: recordId } });
return record;
}
}
module.exports = new OsbodiesService();
```
### Объяснения
- **Методы сервиса**:
- `getAllHeadersRecords(headerId)`: Возвращает все записи из таблицы `osbodies`, относящиеся к заданному `osHeaderId`.
- `createRecord(payload)`: Создает новую запись на основе данных, переданных в `payload`.
- `updateRecord(payload)`: Ищет запись по `id` и обновляет поля, если они указаны в `payload`.
- `removeRecord(recordId)`: Удаляет запись по `id` из таблицы `osbodies`.
- **Обновление полей**: В методе `updateRecord`, как и в предыдущих примерах, проверяется существование записи перед изменением. Если запись не найдена, выбрасывается ошибка.
Теперь у вас есть `OsbodiesService`, который реализует основные CRUD методы для работы с моделью `OsbodiesModel`.