package v1

import (
	"database/sql"
	"time"

	"gorm.io/plugin/soft_delete"
)

const TableNameResourceMemberAccess = "resource_member_access"

// ResourceMemberAccess mapped from table <resource_member_access>.
type ResourceMemberAccess struct {
	ID           uint64                `gorm:"column:id;primaryKey;autoIncrement:true" json:"id"`
	CreatedAt    time.Time             `gorm:"column:createdAt;not null" json:"createdAt"`
	UpdatedAt    sql.NullTime          `gorm:"column:updatedAt" json:"updatedAt"`
	DeletedAt    sql.NullTime          `gorm:"column:deletedAt" json:"deletedAt"`
	MemberLarkID string                `gorm:"column:memberLarkID;not null" json:"memberLarkID"` // user lark id
	RoleID       uint64                `gorm:"column:roleID" json:"roleID"`                      // member role id
	ResourceID   uint64                `gorm:"column:resourceID;not null" json:"resourceID"`     // cloud project account id
	Member       User                  `json:"member" gorm:"foreignkey:MemberLarkID;references:LarkUserID"`
	Resource     CloudResource         `json:"resource" gorm:"foreignkey:ResourceID;references:ID"`
	Role         CloudMemberRole       `json:"role" gorm:"foreignkey:RoleID;references:ID"`
	RequestNote  string                `gorm:"column:requestNote" json:"requestNote"` // request note
	IsDel        soft_delete.DeletedAt `json:"isDel" gorm:"column:isDel;softDelete:flag,DeletedAtField:DeletedAt"`
	TimeTag      int64                 `gorm:"column:timeTag" json:"timeTag"`
}

// TableName ResourceMemberAccess's table name.
func (*ResourceMemberAccess) TableName() string {
	return TableNameResourceMemberAccess
}
