150 lines
7.1 KiB
Go
150 lines
7.1 KiB
Go
package models
|
|
|
|
// LevelOneTransactionParentId represents the parent id of level-one transaction category
|
|
const LevelOneTransactionParentId = 0
|
|
|
|
// TransactionCategoryType represents transaction category type
|
|
type TransactionCategoryType byte
|
|
|
|
// Transaction category types
|
|
const (
|
|
CATEGORY_TYPE_INCOME TransactionCategoryType = 1
|
|
CATEGORY_TYPE_EXPENSE TransactionCategoryType = 2
|
|
CATEGORY_TYPE_TRANSFER TransactionCategoryType = 3
|
|
)
|
|
|
|
// TransactionCategory represents transaction category data stored in database
|
|
type TransactionCategory struct {
|
|
CategoryId int64 `xorm:"PK"`
|
|
Uid int64 `xorm:"INDEX(IDX_category_uid_deleted_type_parent_category_id_order) NOT NULL"`
|
|
Deleted bool `xorm:"INDEX(IDX_category_uid_deleted_type_parent_category_id_order) NOT NULL"`
|
|
Type TransactionCategoryType `xorm:"INDEX(IDX_category_uid_deleted_type_parent_category_id_order) NOT NULL"`
|
|
ParentCategoryId int64 `xorm:"INDEX(IDX_category_uid_deleted_type_parent_category_id_order) NOT NULL"`
|
|
Name string `xorm:"VARCHAR(32) NOT NULL"`
|
|
DisplayOrder int32 `xorm:"INDEX(IDX_category_uid_deleted_type_parent_category_id_order) NOT NULL"`
|
|
Icon int64 `xorm:"NOT NULL"`
|
|
Color string `xorm:"VARCHAR(6) NOT NULL"`
|
|
Hidden bool `xorm:"NOT NULL"`
|
|
Comment string `xorm:"VARCHAR(255) NOT NULL"`
|
|
CreatedUnixTime int64
|
|
UpdatedUnixTime int64
|
|
DeletedUnixTime int64
|
|
}
|
|
|
|
// TransactionCategoryListRequest represents all parameters of transaction category listing request
|
|
type TransactionCategoryListRequest struct {
|
|
Type TransactionCategoryType `form:"type" binding:"min=0"`
|
|
ParentId int64 `form:"parent_id,string,default=-1" binding:"min=-1"`
|
|
}
|
|
|
|
// TransactionCategoryGetRequest represents all parameters of transaction category getting request
|
|
type TransactionCategoryGetRequest struct {
|
|
Id int64 `form:"id,string" binding:"required,min=1"`
|
|
}
|
|
|
|
// TransactionCategoryCreateRequest represents all parameters of single transaction category creation request
|
|
type TransactionCategoryCreateRequest struct {
|
|
Name string `json:"name" binding:"required,notBlank,max=32"`
|
|
Type TransactionCategoryType `json:"type" binding:"required"`
|
|
ParentId int64 `json:"parentId,string" binding:"min=0"`
|
|
Icon int64 `json:"icon,string" binding:"min=1"`
|
|
Color string `json:"color" binding:"required,len=6,validHexRGBColor"`
|
|
Comment string `json:"comment" binding:"max=255"`
|
|
ClientSessionId string `json:"clientSessionId"`
|
|
}
|
|
|
|
// TransactionCategoryCreateBatchRequest represents all parameters of transaction category batch creation request
|
|
type TransactionCategoryCreateBatchRequest struct {
|
|
Categories []*TransactionCategoryCreateWithSubCategories `json:"categories" binding:"required"`
|
|
}
|
|
|
|
// TransactionCategoryCreateWithSubCategories represents all parameters of multi transaction categories creation request
|
|
type TransactionCategoryCreateWithSubCategories struct {
|
|
Name string `json:"name" binding:"required,notBlank,max=32"`
|
|
Type TransactionCategoryType `json:"type" binding:"required"`
|
|
Icon int64 `json:"icon,string" binding:"min=1"`
|
|
Color string `json:"color" binding:"required,len=6,validHexRGBColor"`
|
|
Comment string `json:"comment" binding:"max=255"`
|
|
SubCategories []*TransactionCategoryCreateRequest `json:"subCategories" binding:"required"`
|
|
}
|
|
|
|
// TransactionCategoryModifyRequest represents all parameters of transaction category modification request
|
|
type TransactionCategoryModifyRequest struct {
|
|
Id int64 `json:"id,string" binding:"required,min=1"`
|
|
Name string `json:"name" binding:"required,notBlank,max=32"`
|
|
ParentId int64 `json:"parentId,string" binding:"min=0"`
|
|
Icon int64 `json:"icon,string" binding:"min=1"`
|
|
Color string `json:"color" binding:"required,len=6,validHexRGBColor"`
|
|
Comment string `json:"comment" binding:"max=255"`
|
|
Hidden bool `json:"hidden"`
|
|
}
|
|
|
|
// TransactionCategoryHideRequest represents all parameters of transaction category hiding request
|
|
type TransactionCategoryHideRequest struct {
|
|
Id int64 `json:"id,string" binding:"required,min=1"`
|
|
Hidden bool `json:"hidden"`
|
|
}
|
|
|
|
// TransactionCategoryMoveRequest represents all parameters of transaction category moving request
|
|
type TransactionCategoryMoveRequest struct {
|
|
NewDisplayOrders []*TransactionCategoryNewDisplayOrderRequest `json:"newDisplayOrders" binding:"required,min=1"`
|
|
}
|
|
|
|
// TransactionCategoryNewDisplayOrderRequest represents a data pair of id and display order
|
|
type TransactionCategoryNewDisplayOrderRequest struct {
|
|
Id int64 `json:"id,string" binding:"required,min=1"`
|
|
DisplayOrder int32 `json:"displayOrder"`
|
|
}
|
|
|
|
// TransactionCategoryDeleteRequest represents all parameters of transaction category deleting request
|
|
type TransactionCategoryDeleteRequest struct {
|
|
Id int64 `json:"id,string" binding:"required,min=1"`
|
|
}
|
|
|
|
// TransactionCategoryInfoResponse represents a view-object of transaction category
|
|
type TransactionCategoryInfoResponse struct {
|
|
Id int64 `json:"id,string"`
|
|
Name string `json:"name"`
|
|
ParentId int64 `json:"parentId,string"`
|
|
Type TransactionCategoryType `json:"type"`
|
|
Icon int64 `json:"icon,string"`
|
|
Color string `json:"color"`
|
|
Comment string `json:"comment"`
|
|
DisplayOrder int32 `json:"displayOrder"`
|
|
Hidden bool `json:"hidden"`
|
|
SubCategories TransactionCategoryInfoResponseSlice `json:"subCategories,omitempty"`
|
|
}
|
|
|
|
// ToTransactionCategoryInfoResponse returns a view-object according to database model
|
|
func (c *TransactionCategory) ToTransactionCategoryInfoResponse() *TransactionCategoryInfoResponse {
|
|
return &TransactionCategoryInfoResponse{
|
|
Id: c.CategoryId,
|
|
Name: c.Name,
|
|
ParentId: c.ParentCategoryId,
|
|
Type: c.Type,
|
|
Icon: c.Icon,
|
|
Color: c.Color,
|
|
Comment: c.Comment,
|
|
DisplayOrder: c.DisplayOrder,
|
|
Hidden: c.Hidden,
|
|
}
|
|
}
|
|
|
|
// TransactionCategoryInfoResponseSlice represents the slice data structure of TransactionCategoryInfoResponse
|
|
type TransactionCategoryInfoResponseSlice []*TransactionCategoryInfoResponse
|
|
|
|
// Len returns the count of items
|
|
func (s TransactionCategoryInfoResponseSlice) Len() int {
|
|
return len(s)
|
|
}
|
|
|
|
// Swap swaps two items
|
|
func (s TransactionCategoryInfoResponseSlice) Swap(i, j int) {
|
|
s[i], s[j] = s[j], s[i]
|
|
}
|
|
|
|
// Less reports whether the first item is less than the second one
|
|
func (s TransactionCategoryInfoResponseSlice) Less(i, j int) bool {
|
|
return s[i].DisplayOrder < s[j].DisplayOrder
|
|
}
|