Topup

Модель предназначена для хранения информации о пополнениях счета пользователя.
Включает в себя детали, такие как сумма пополнения, дата транзакции, платежная система, идентификатор транзакции и текущий статус.
Для внутренних платёжных способов может использоваться поле credentials.

Node.JS (sequelize)

const { DataTypes, Sequelize, UUIDV4 } = require('sequelize');
const sequelize = new Sequelize(/* ... */);

const Topup = sequelize.define('Topup', {
  id: {
    type: DataTypes.UUID,
    defaultValue: UUIDV4,
    primaryKey: true
  },
  amount: {
    type: DataTypes.DECIMAL(10, 2), // сумма в usd
    allowNull: false
  },
  date: {
    type: DataTypes.DATE,           // дата платежа
    allowNull: false,
    defaultValue: Sequelize.NOW
  },
  paymentSystem: {
    type: DataTypes.STRING,         // внутренний идентификатор платёжного метода (системы)
    allowNull: false
  },
  transactionId: {
    type: DataTypes.STRING,         // внутренний идентификатор платежа
    allowNull: true
  },
  status: {
    type: DataTypes.STRING,         // статус (pending / error / success / fraud / ...)
    allowNull: false
  },
  credentials: {
    type: DataTypes.STRING,         // внутренние credentials (например, адрес крипто-кошелёка)
    allowNull: true
  }
});

Go (GORM)

import (
    "github.com/google/uuid"
    "gorm.io/gorm"
)

type Topup struct {
    ID            uuid.UUID `gorm:"type:uuid;primary_key;default:uuid_generate_v4()"`
    Amount        float64   `gorm:"type:decimal(10,2);not null"`
    Date          time.Time `gorm:"type:date;not null"`
    PaymentSystem string    `gorm:"type:string;not null"`
    TransactionId *string   `gorm:"type:string"`
    Status        string    `gorm:"type:string;not null"`
    Credentials   *string   `gorm:"type:string"`
}