bytelib.go 1.8 KB
package bytecore

import "gitlab.fjmaimaimai.com/allied-creation/character-library-metadata-bastion/pkg/domain"

type ByteLibService interface {
	LoadDataTable(param ReqLoadDataTable) (*DataLoadDataTable, error)
	EditTable(param ReqEditDataTable) (*DataEditDataTable, error)
}

type (
	ReqLoadDataTable struct {
		FileId   int
		FileName string
		Url      string
		Ext      string
		domain.Where
	}

	DataLoadDataTable struct {
		FileId       int           `json:"fileId"`
		DataFields   []*Field      `json:"dataFields"`
		DataRows     [][]string    `json:"dataRows"`
		Total        int           `json:"total"`
		PageNumber   int           `json:"pageNumber"`
		InValidCells []InValidCell `json:"inValidCells"`
	}

	Field struct {
		// 索引序号
		Index int `json:"index"`
		// 名称
		Name string `json:"name"`
		// 对应数据库类型
		Type string `json:"type"`
	}

	InValidCell struct {
		X     int    `json:"x"`
		Y     int    `json:"y"`
		Error string `json:"error"`
	}
)

// https://github.com/go-gota/gota 类似pandas的数据处理包
// https://github.com/gonum/gonum

func (table DataLoadDataTable) Filter(where domain.Where) *DataLoadDataTable {
	begin := (where.PageNumber - 1) * where.PageSize
	if begin < 0 {
		begin = 0
	}
	end := begin + where.PageSize
	data := make([][]string, 0)
	if begin < table.Total {
		if end < table.Total {
			data = table.DataRows[begin:end]
		} else {
			data = table.DataRows[begin:]
		}
	}
	return &DataLoadDataTable{
		FileId:       table.FileId,
		DataFields:   table.DataFields,
		DataRows:     data,
		Total:        table.Total,
		PageNumber:   where.PageNumber,
		InValidCells: make([]InValidCell, 0),
	}
}

type (
	ReqEditDataTable struct {
		FileId   int
		FileName string
		Url      string
		Ext      string
		Fields   []*Field
		Action   string
		Params   []interface{}
	}

	DataEditDataTable struct {
		DataLoadDataTable
	}
)