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()
}