@CapitanCake

Как сделать service для корзины интернет магазина на бекэнде (ExpressJS)?

Всем доброго времени. Пытаюсь создать API для интернет магазина используя ExpressJS и sequelize и столкнулся с проблемой. Не знаю как правильно создать функцию в "BasketService", которая будет выдавать девайсы добавленные пользователем в корзину и количество одного товара.

В моделях User, Device, Basket, и промежуточная таблица BasketDevice.
Модели:
export const Models = {

    User: sequelize.define('user',
        {
            id: { type: DataTypes.INTEGER, primaryKey: true, autoIncrement: true },
            email: { type: DataTypes.STRING, unique: true },
            password: { type: DataTypes.STRING },
            role: { type: DataTypes.STRING, defaultValue: 'USER' },
            isActivated: { type: DataTypes.BOOLEAN, defaultValue: false},
            activationLink: { type: DataTypes.STRING, unique: true }
        }
    ),
    Basket: sequelize.define('basket',
        {
            id: { type: DataTypes.INTEGER, primaryKey: true, autoIncrement: true },
        }
    ),
    BasketDevice: sequelize.define('basketDevice',
        {
            id: { type: DataTypes.INTEGER, primaryKey: true, autoIncrement: true },        
        }
    ),
    Device: sequelize.define('device',
        {
            id: { type: DataTypes.INTEGER, primaryKey: true, autoIncrement: true },
            name: { type: DataTypes.STRING, allowNull: false, unique: true },
            price: { type: DataTypes.INTEGER, allowNull: false },
            img: { type: DataTypes.STRING, allowNull: false },
            rating: { type: DataTypes.INTEGER, defaultValue: 0 },
        }
}


Связи:
Models.User.hasOne(Models.Basket)
Models.Basket.belongsTo(Models.User)

Models.Basket.hasMany(Models.BasketDevice, {as: 'devices'})
Models.BasketDevice.belongsTo(Models.Basket)

Models.Device.hasMany(Models.BasketDevice)
Models.BasketDevice.belongsTo(Models.Device)


Попытка написать BasketService:

class BasketService {
    async getBasket(token: string) {
        const userData = await TokenService.verifyRefreshToken(token) as any
        const basket = await Models.Basket.findOne({
             where: { userId: userData.id },
             include: [{model: Models.BasketDevice, as: 'devices'}]
            })

        return basket
    }
}


Какие есть идеи, как создать этот запрос + - оптимизированно?
  • Вопрос задан
  • 67 просмотров
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы