code refactor

This commit is contained in:
MaysWind
2024-09-11 23:48:52 +08:00
parent 8eaeb1953b
commit 5a31118c96
6 changed files with 69 additions and 54 deletions
@@ -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",
+2 -12
View File
@@ -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
View File
@@ -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
} }