package core

import (
	"time"

	"gorm.io/gorm"
)

type Base struct {
	CreatedAt time.Time      `json:"createdAt" gorm:"column:CreatedAt;type:timestamptz"`
	UpdatedAt time.Time      `json:"updatedAt" gorm:"column:UpdatedAt;type:timestamptz"`
	DeletedAt gorm.DeletedAt `json:"deletedAt,omitempty" gorm:"column:DeletedAt"`
}

type Main struct {
	Id uint `json:"id" gorm:"primaryKey"` // depends on the system architecture
	Base
}

type TinyMain struct {
	Id uint8 `json:"id" gorm:"primaryKey"`
	Base
}

type SmallMain struct {
	Id uint16 `json:"id" gorm:"primaryKey"`
	Base
}

// Mainly for transaction
type BigMain struct {
	Id uint64 `json:"id" gorm:"primaryKey"`
	Base
}
