mirror of
https://github.com/mayswind/ezbookkeeping.git
synced 2026-05-21 02:04:26 +08:00
code refactor
This commit is contained in:
@@ -38,17 +38,17 @@ const (
|
|||||||
// DataTableTransactionDataExporter defines the structure of plain text data table exporter for transaction data
|
// DataTableTransactionDataExporter defines the structure of plain text data table exporter for transaction data
|
||||||
type DataTableTransactionDataExporter struct {
|
type DataTableTransactionDataExporter struct {
|
||||||
dataColumnMapping map[DataTableColumn]string
|
dataColumnMapping map[DataTableColumn]string
|
||||||
transactionTypeMapping map[models.TransactionDbType]string
|
transactionTypeMapping map[models.TransactionType]string
|
||||||
geoLocationSeparator string
|
geoLocationSeparator string
|
||||||
transactionTagSeparator string
|
transactionTagSeparator string
|
||||||
}
|
}
|
||||||
|
|
||||||
// DataTableTransactionDataImporter defines the structure of plain text data table importer for transaction data
|
// DataTableTransactionDataImporter defines the structure of plain text data table importer for transaction data
|
||||||
type DataTableTransactionDataImporter struct {
|
type DataTableTransactionDataImporter struct {
|
||||||
dataColumnMapping map[DataTableColumn]string
|
dataColumnMapping map[DataTableColumn]string
|
||||||
transactionTypeNameMapping map[string]models.TransactionDbType
|
transactionTypeMapping map[models.TransactionType]string
|
||||||
geoLocationSeparator string
|
geoLocationSeparator string
|
||||||
transactionTagSeparator string
|
transactionTagSeparator string
|
||||||
}
|
}
|
||||||
|
|
||||||
func (c *DataTableTransactionDataExporter) buildExportedContent(ctx core.Context, dataTableBuilder DataTableBuilder, uid int64, transactions []*models.Transaction, accountMap map[int64]*models.Account, categoryMap map[int64]*models.TransactionCategory, tagMap map[int64]*models.TransactionTag, allTagIndexes map[int64][]int64) error {
|
func (c *DataTableTransactionDataExporter) buildExportedContent(ctx core.Context, dataTableBuilder DataTableBuilder, uid int64, transactions []*models.Transaction, accountMap map[int64]*models.Account, categoryMap map[int64]*models.TransactionCategory, tagMap map[int64]*models.TransactionTag, allTagIndexes map[int64][]int64) error {
|
||||||
@@ -88,7 +88,13 @@ func (c *DataTableTransactionDataExporter) buildExportedContent(ctx core.Context
|
|||||||
}
|
}
|
||||||
|
|
||||||
func (c *DataTableTransactionDataExporter) getDisplayTransactionTypeName(transactionDbType models.TransactionDbType) string {
|
func (c *DataTableTransactionDataExporter) getDisplayTransactionTypeName(transactionDbType models.TransactionDbType) string {
|
||||||
transactionTypeName, exists := c.transactionTypeMapping[transactionDbType]
|
transactionType, err := transactionDbType.ToTransactionType()
|
||||||
|
|
||||||
|
if err != nil {
|
||||||
|
return ""
|
||||||
|
}
|
||||||
|
|
||||||
|
transactionTypeName, exists := c.transactionTypeMapping[transactionType]
|
||||||
|
|
||||||
if !exists {
|
if !exists {
|
||||||
return ""
|
return ""
|
||||||
@@ -188,6 +194,12 @@ func (c *DataTableTransactionDataImporter) parseImportedData(ctx core.Context, u
|
|||||||
return nil, nil, nil, nil, errs.ErrNotFoundTransactionDataInFile
|
return nil, nil, nil, nil, errs.ErrNotFoundTransactionDataInFile
|
||||||
}
|
}
|
||||||
|
|
||||||
|
nameDbTypeMap, err := c.buildTransactionTypeNameDbTypeMap()
|
||||||
|
|
||||||
|
if err != nil {
|
||||||
|
return nil, nil, nil, nil, err
|
||||||
|
}
|
||||||
|
|
||||||
headerLineItems := dataTable.HeaderLineColumnNames()
|
headerLineItems := dataTable.HeaderLineColumnNames()
|
||||||
headerItemMap := make(map[string]int)
|
headerItemMap := make(map[string]int)
|
||||||
|
|
||||||
@@ -269,7 +281,7 @@ func (c *DataTableTransactionDataImporter) parseImportedData(ctx core.Context, u
|
|||||||
return nil, nil, nil, nil, errs.ErrTransactionTimeInvalid
|
return nil, nil, nil, nil, errs.ErrTransactionTimeInvalid
|
||||||
}
|
}
|
||||||
|
|
||||||
transactionDbType, err := c.getTransactionDbType(dataRow.GetData(typeColumnIdx))
|
transactionDbType, err := c.getTransactionDbType(nameDbTypeMap, dataRow.GetData(typeColumnIdx))
|
||||||
|
|
||||||
if err != nil {
|
if err != nil {
|
||||||
log.Errorf(ctx, "[data_table_transaction_data_converter.parseImportedData] cannot parse transaction type \"%s\" in data row \"index:%d\" for user \"uid:%d\", because %s", dataRow.GetData(typeColumnIdx), dataRowIndex, user.Uid, err.Error())
|
log.Errorf(ctx, "[data_table_transaction_data_converter.parseImportedData] cannot parse transaction type \"%s\" in data row \"index:%d\" for user \"uid:%d\", because %s", dataRow.GetData(typeColumnIdx), dataRowIndex, user.Uid, err.Error())
|
||||||
@@ -488,8 +500,22 @@ func (c *DataTableTransactionDataImporter) parseImportedData(ctx core.Context, u
|
|||||||
return allNewTransactions, allNewAccounts, allNewSubCategories, allNewTags, nil
|
return allNewTransactions, allNewAccounts, allNewSubCategories, allNewTags, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func (c *DataTableTransactionDataImporter) getTransactionDbType(transactionTypeName string) (models.TransactionDbType, error) {
|
func (c *DataTableTransactionDataImporter) buildTransactionTypeNameDbTypeMap() (map[string]models.TransactionDbType, error) {
|
||||||
transactionType, exists := c.transactionTypeNameMapping[transactionTypeName]
|
if c.transactionTypeMapping == nil {
|
||||||
|
return nil, errs.ErrTransactionTypeInvalid
|
||||||
|
}
|
||||||
|
|
||||||
|
nameDbTypeMap := make(map[string]models.TransactionDbType, len(c.transactionTypeMapping))
|
||||||
|
nameDbTypeMap[c.transactionTypeMapping[models.TRANSACTION_TYPE_MODIFY_BALANCE]] = models.TRANSACTION_DB_TYPE_MODIFY_BALANCE
|
||||||
|
nameDbTypeMap[c.transactionTypeMapping[models.TRANSACTION_TYPE_INCOME]] = models.TRANSACTION_DB_TYPE_INCOME
|
||||||
|
nameDbTypeMap[c.transactionTypeMapping[models.TRANSACTION_TYPE_EXPENSE]] = models.TRANSACTION_DB_TYPE_EXPENSE
|
||||||
|
nameDbTypeMap[c.transactionTypeMapping[models.TRANSACTION_TYPE_TRANSFER]] = models.TRANSACTION_DB_TYPE_TRANSFER_OUT
|
||||||
|
|
||||||
|
return nameDbTypeMap, nil
|
||||||
|
}
|
||||||
|
|
||||||
|
func (c *DataTableTransactionDataImporter) getTransactionDbType(nameDbTypeMap map[string]models.TransactionDbType, transactionTypeName string) (models.TransactionDbType, error) {
|
||||||
|
transactionType, exists := nameDbTypeMap[transactionTypeName]
|
||||||
|
|
||||||
if !exists {
|
if !exists {
|
||||||
return 0, errs.ErrTransactionTypeInvalid
|
return 0, errs.ErrTransactionTypeInvalid
|
||||||
|
|||||||
@@ -22,10 +22,10 @@ var (
|
|||||||
},
|
},
|
||||||
ezBookKeepingTransactionDataPlainTextImporter{
|
ezBookKeepingTransactionDataPlainTextImporter{
|
||||||
DataTableTransactionDataImporter: DataTableTransactionDataImporter{
|
DataTableTransactionDataImporter: DataTableTransactionDataImporter{
|
||||||
dataColumnMapping: ezbookkeepingDataColumnNameMapping,
|
dataColumnMapping: ezbookkeepingDataColumnNameMapping,
|
||||||
transactionTypeNameMapping: ezbookkeepingNameTransactionTypeMapping,
|
transactionTypeMapping: ezbookkeepingTransactionTypeNameMapping,
|
||||||
geoLocationSeparator: " ",
|
geoLocationSeparator: " ",
|
||||||
transactionTagSeparator: ";",
|
transactionTagSeparator: ";",
|
||||||
},
|
},
|
||||||
columnSeparator: ",",
|
columnSeparator: ",",
|
||||||
lineSeparator: "\n",
|
lineSeparator: "\n",
|
||||||
|
|||||||
@@ -37,19 +37,11 @@ var ezbookkeepingDataColumnNameMapping = map[DataTableColumn]string{
|
|||||||
DATA_TABLE_DESCRIPTION: "Description",
|
DATA_TABLE_DESCRIPTION: "Description",
|
||||||
}
|
}
|
||||||
|
|
||||||
var ezbookkeepingTransactionTypeNameMapping = map[models.TransactionDbType]string{
|
var ezbookkeepingTransactionTypeNameMapping = map[models.TransactionType]string{
|
||||||
models.TRANSACTION_DB_TYPE_MODIFY_BALANCE: "Balance Modification",
|
models.TRANSACTION_TYPE_MODIFY_BALANCE: "Balance Modification",
|
||||||
models.TRANSACTION_DB_TYPE_INCOME: "Income",
|
models.TRANSACTION_TYPE_INCOME: "Income",
|
||||||
models.TRANSACTION_DB_TYPE_EXPENSE: "Expense",
|
models.TRANSACTION_TYPE_EXPENSE: "Expense",
|
||||||
models.TRANSACTION_DB_TYPE_TRANSFER_OUT: "Transfer",
|
models.TRANSACTION_TYPE_TRANSFER: "Transfer",
|
||||||
models.TRANSACTION_DB_TYPE_TRANSFER_IN: "Transfer",
|
|
||||||
}
|
|
||||||
|
|
||||||
var ezbookkeepingNameTransactionTypeMapping = map[string]models.TransactionDbType{
|
|
||||||
"Balance Modification": models.TRANSACTION_DB_TYPE_MODIFY_BALANCE,
|
|
||||||
"Income": models.TRANSACTION_DB_TYPE_INCOME,
|
|
||||||
"Expense": models.TRANSACTION_DB_TYPE_EXPENSE,
|
|
||||||
"Transfer": models.TRANSACTION_DB_TYPE_TRANSFER_OUT,
|
|
||||||
}
|
}
|
||||||
|
|
||||||
var ezbookkeepingDataColumns = []DataTableColumn{
|
var ezbookkeepingDataColumns = []DataTableColumn{
|
||||||
|
|||||||
@@ -22,10 +22,10 @@ var (
|
|||||||
},
|
},
|
||||||
ezBookKeepingTransactionDataPlainTextImporter{
|
ezBookKeepingTransactionDataPlainTextImporter{
|
||||||
DataTableTransactionDataImporter: DataTableTransactionDataImporter{
|
DataTableTransactionDataImporter: DataTableTransactionDataImporter{
|
||||||
dataColumnMapping: ezbookkeepingDataColumnNameMapping,
|
dataColumnMapping: ezbookkeepingDataColumnNameMapping,
|
||||||
transactionTypeNameMapping: ezbookkeepingNameTransactionTypeMapping,
|
transactionTypeMapping: ezbookkeepingTransactionTypeNameMapping,
|
||||||
geoLocationSeparator: " ",
|
geoLocationSeparator: " ",
|
||||||
transactionTagSeparator: ";",
|
transactionTagSeparator: ";",
|
||||||
},
|
},
|
||||||
columnSeparator: "\t",
|
columnSeparator: "\t",
|
||||||
lineSeparator: "\n",
|
lineSeparator: "\n",
|
||||||
|
|||||||
@@ -43,19 +43,9 @@ type ImportTransactionResponsePageWrapper struct {
|
|||||||
|
|
||||||
// ToImportTransactionResponse returns the a view-objects according to imported transaction data
|
// ToImportTransactionResponse returns the a view-objects according to imported transaction data
|
||||||
func (t ImportTransaction) ToImportTransactionResponse() *ImportTransactionResponse {
|
func (t ImportTransaction) ToImportTransactionResponse() *ImportTransactionResponse {
|
||||||
var transactionType TransactionType
|
transactionType, err := t.Type.ToTransactionType()
|
||||||
|
|
||||||
if t.Type == TRANSACTION_DB_TYPE_MODIFY_BALANCE {
|
if err != nil {
|
||||||
transactionType = TRANSACTION_TYPE_MODIFY_BALANCE
|
|
||||||
} else if t.Type == TRANSACTION_DB_TYPE_EXPENSE {
|
|
||||||
transactionType = TRANSACTION_TYPE_EXPENSE
|
|
||||||
} else if t.Type == TRANSACTION_DB_TYPE_INCOME {
|
|
||||||
transactionType = TRANSACTION_TYPE_INCOME
|
|
||||||
} else if t.Type == TRANSACTION_DB_TYPE_TRANSFER_OUT {
|
|
||||||
transactionType = TRANSACTION_TYPE_TRANSFER
|
|
||||||
} else if t.Type == TRANSACTION_DB_TYPE_TRANSFER_IN {
|
|
||||||
transactionType = TRANSACTION_TYPE_TRANSFER
|
|
||||||
} else {
|
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
+19
-12
@@ -49,6 +49,23 @@ func (s TransactionDbType) String() string {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// ToTransactionType returns the transaction type for this db enum
|
||||||
|
func (s TransactionDbType) ToTransactionType() (TransactionType, error) {
|
||||||
|
if s == TRANSACTION_DB_TYPE_MODIFY_BALANCE {
|
||||||
|
return TRANSACTION_TYPE_MODIFY_BALANCE, nil
|
||||||
|
} else if s == TRANSACTION_DB_TYPE_EXPENSE {
|
||||||
|
return TRANSACTION_TYPE_EXPENSE, nil
|
||||||
|
} else if s == TRANSACTION_DB_TYPE_INCOME {
|
||||||
|
return TRANSACTION_TYPE_INCOME, nil
|
||||||
|
} else if s == TRANSACTION_DB_TYPE_TRANSFER_OUT {
|
||||||
|
return TRANSACTION_TYPE_TRANSFER, nil
|
||||||
|
} else if s == TRANSACTION_DB_TYPE_TRANSFER_IN {
|
||||||
|
return TRANSACTION_TYPE_TRANSFER, nil
|
||||||
|
} else {
|
||||||
|
return 0, errs.ErrTransactionTypeInvalid
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
// Transaction represents transaction data stored in database
|
// Transaction represents transaction data stored in database
|
||||||
type Transaction struct {
|
type Transaction struct {
|
||||||
TransactionId int64 `xorm:"PK"`
|
TransactionId int64 `xorm:"PK"`
|
||||||
@@ -325,19 +342,9 @@ func (t *Transaction) IsEditable(currentUser *User, utcOffset int16, account *Ac
|
|||||||
|
|
||||||
// ToTransactionInfoResponse returns a view-object according to database model
|
// ToTransactionInfoResponse returns a view-object according to database model
|
||||||
func (t *Transaction) ToTransactionInfoResponse(tagIds []int64, editable bool) *TransactionInfoResponse {
|
func (t *Transaction) ToTransactionInfoResponse(tagIds []int64, editable bool) *TransactionInfoResponse {
|
||||||
var transactionType TransactionType
|
transactionType, err := t.Type.ToTransactionType()
|
||||||
|
|
||||||
if t.Type == TRANSACTION_DB_TYPE_MODIFY_BALANCE {
|
if err != nil {
|
||||||
transactionType = TRANSACTION_TYPE_MODIFY_BALANCE
|
|
||||||
} else if t.Type == TRANSACTION_DB_TYPE_EXPENSE {
|
|
||||||
transactionType = TRANSACTION_TYPE_EXPENSE
|
|
||||||
} else if t.Type == TRANSACTION_DB_TYPE_INCOME {
|
|
||||||
transactionType = TRANSACTION_TYPE_INCOME
|
|
||||||
} else if t.Type == TRANSACTION_DB_TYPE_TRANSFER_OUT {
|
|
||||||
transactionType = TRANSACTION_TYPE_TRANSFER
|
|
||||||
} else if t.Type == TRANSACTION_DB_TYPE_TRANSFER_IN {
|
|
||||||
transactionType = TRANSACTION_TYPE_TRANSFER
|
|
||||||
} else {
|
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user