Tariff
Модель предназначена для хранения тарифных планов, доступных пользователям.
Мультиязычные поля позволяют хранить названия и описания на разных языках.
Node.JS (sequelize)
const { DataTypes, Sequelize, UUIDV4 } = require('sequelize');
const sequelize = new Sequelize(/* ... */);
const Tariff = sequelize.define('Tariff', {
id: {
type: DataTypes.UUID,
defaultValue: UUIDV4,
primaryKey: true
},
name: {
type: DataTypes.JSON, // мультиязычные названия
allowNull: false,
},
description: {
type: DataTypes.JSON, // мультиязычные описания
allowNull: false,
},
price: {
type: DataTypes.DECIMAL(10, 2), // стоимость тарифа в USD
allowNull: false,
},
duration: DataTypes.INTEGER, // продолжительность в минутах
trafficLimit: DataTypes.BIGINT, // ограничение на трафик, если применимо
streamLimit: DataTypes.INTEGER, // ограничение на количество потоков, если применимо
available: {
type: DataType.BOOLEAN, // возможность покупки тарифа/пакета трафика на сайте
default: true
}
});
Go (GORM)
import (
"gorm.io/gorm"
"github.com/google/uuid"
)
type Tariff struct {
ID uuid.UUID `gorm:"type:uuid;default:uuid_generate_v4()"`
Name string `gorm:"type:json;not null"`
Description string `gorm:"type:json;not null"`
Price float64 `gorm:"not null"`
Duration *int
TrafficLimit *int64
StreamLimit *int
Available *bool `gorm:"default:true"`
}
func Получения названия и описания тарифа
Node.JS
const tariff = await Tariff.findOne({ where: { id: 'some-id' } });
const name = tariff.name[lang] || tariff.name['en'] || 'Noname';
const description = tariff.description[lang] || tariff.description['en'] || 'Noname';
Go
import (
"encoding/json"
)
// I18nField represents a multilingual field storing data in various languages.
type I18nField map[string]string
// getI18nField retrieves a multilingual field from a JSON string, returning the I18nField map and an error if any.
func getI18nField(jsonStr string) (I18nField, error) {
var field I18nField
if err := json.Unmarshal([]byte(jsonStr), &field); err != nil {
return nil, err
}
return field, nil
}
// GetI18nName retrieves the multilingual name of a tariff, returning an I18nField map and an error if any.
func (t *Tariff) GetI18nName() (I18nField, error) {
return getI18nField(t.Name)
}
// GetI18nDescription retrieves the multilingual description of a tariff, returning an I18nField map and an error if any.
func (t *Tariff) GetI18nDescription() (I18nField, error) {
return getI18nField(t.Description)
}
func main() {
tariff := Tariff{
ID: "some-id",
Name: `{"en": "Standard", "ru": "Стандарт"}`,
Description: `{"en": "Standard plan description", "ru": "Описание стандартного плана"}`,
}
name, _ := tariff.GetI18nName()
description, _ := tariff.GetI18nDescription()
}
