code refactor

This commit is contained in:
MaysWind
2024-09-11 00:57:16 +08:00
parent 031209490f
commit 2cffd4fbbb
6 changed files with 49 additions and 45 deletions
+3
View File
@@ -34,4 +34,7 @@ type ImportedDataRowIterator interface {
type DataTableBuilder interface {
// AppendTransaction appends the specified transaction to data builder
AppendTransaction(data map[DataTableColumn]string)
// ReplaceDelimiters returns the text after removing the delimiters
ReplaceDelimiters(text string) string
}
@@ -39,8 +39,6 @@ const (
type DataTableTransactionDataExporter struct {
dataColumnMapping map[DataTableColumn]string
transactionTypeMapping map[models.TransactionDbType]string
columnSeparator string
lineSeparator string
geoLocationSeparator string
transactionTagSeparator string
}
@@ -49,8 +47,6 @@ type DataTableTransactionDataExporter struct {
type DataTableTransactionDataImporter struct {
dataColumnMapping map[DataTableColumn]string
transactionTypeNameMapping map[string]models.TransactionDbType
columnSeparator string
lineSeparator string
geoLocationSeparator string
transactionTagSeparator string
}
@@ -68,22 +64,22 @@ func (c *DataTableTransactionDataExporter) buildExportedContent(ctx core.Context
dataRowMap[DATA_TABLE_TRANSACTION_TIME] = utils.FormatUnixTimeToLongDateTime(utils.GetUnixTimeFromTransactionTime(transaction.TransactionTime), transactionTimeZone)
dataRowMap[DATA_TABLE_TRANSACTION_TIMEZONE] = utils.FormatTimezoneOffset(transactionTimeZone)
dataRowMap[DATA_TABLE_TRANSACTION_TYPE] = c.replaceDelimiters(c.getDisplayTransactionTypeName(transaction.Type))
dataRowMap[DATA_TABLE_CATEGORY] = c.getExportedTransactionCategoryName(transaction.CategoryId, categoryMap)
dataRowMap[DATA_TABLE_SUB_CATEGORY] = c.getExportedTransactionSubCategoryName(transaction.CategoryId, categoryMap)
dataRowMap[DATA_TABLE_ACCOUNT_NAME] = c.getExportedAccountName(transaction.AccountId, accountMap)
dataRowMap[DATA_TABLE_ACCOUNT_CURRENCY] = c.getAccountCurrency(transaction.AccountId, accountMap)
dataRowMap[DATA_TABLE_TRANSACTION_TYPE] = dataTableBuilder.ReplaceDelimiters(c.getDisplayTransactionTypeName(transaction.Type))
dataRowMap[DATA_TABLE_CATEGORY] = c.getExportedTransactionCategoryName(dataTableBuilder, transaction.CategoryId, categoryMap)
dataRowMap[DATA_TABLE_SUB_CATEGORY] = c.getExportedTransactionSubCategoryName(dataTableBuilder, transaction.CategoryId, categoryMap)
dataRowMap[DATA_TABLE_ACCOUNT_NAME] = c.getExportedAccountName(dataTableBuilder, transaction.AccountId, accountMap)
dataRowMap[DATA_TABLE_ACCOUNT_CURRENCY] = c.getAccountCurrency(dataTableBuilder, transaction.AccountId, accountMap)
dataRowMap[DATA_TABLE_AMOUNT] = utils.FormatAmount(transaction.Amount)
if transaction.Type == models.TRANSACTION_DB_TYPE_TRANSFER_OUT {
dataRowMap[DATA_TABLE_RELATED_ACCOUNT_NAME] = c.getExportedAccountName(transaction.RelatedAccountId, accountMap)
dataRowMap[DATA_TABLE_RELATED_ACCOUNT_CURRENCY] = c.getAccountCurrency(transaction.RelatedAccountId, accountMap)
dataRowMap[DATA_TABLE_RELATED_ACCOUNT_NAME] = c.getExportedAccountName(dataTableBuilder, transaction.RelatedAccountId, accountMap)
dataRowMap[DATA_TABLE_RELATED_ACCOUNT_CURRENCY] = c.getAccountCurrency(dataTableBuilder, transaction.RelatedAccountId, accountMap)
dataRowMap[DATA_TABLE_RELATED_AMOUNT] = utils.FormatAmount(transaction.RelatedAccountAmount)
}
dataRowMap[DATA_TABLE_GEOGRAPHIC_LOCATION] = c.getExportedGeographicLocation(transaction)
dataRowMap[DATA_TABLE_TAGS] = c.getExportedTags(transaction.TransactionId, allTagIndexes, tagMap)
dataRowMap[DATA_TABLE_DESCRIPTION] = c.replaceDelimiters(transaction.Comment)
dataRowMap[DATA_TABLE_TAGS] = c.getExportedTags(dataTableBuilder, transaction.TransactionId, allTagIndexes, tagMap)
dataRowMap[DATA_TABLE_DESCRIPTION] = dataTableBuilder.ReplaceDelimiters(transaction.Comment)
dataTableBuilder.AppendTransaction(dataRowMap)
}
@@ -101,7 +97,7 @@ func (c *DataTableTransactionDataExporter) getDisplayTransactionTypeName(transac
return transactionTypeName
}
func (c *DataTableTransactionDataExporter) getExportedTransactionCategoryName(categoryId int64, categoryMap map[int64]*models.TransactionCategory) string {
func (c *DataTableTransactionDataExporter) getExportedTransactionCategoryName(dataTableBuilder DataTableBuilder, categoryId int64, categoryMap map[int64]*models.TransactionCategory) string {
category, exists := categoryMap[categoryId]
if !exists {
@@ -109,7 +105,7 @@ func (c *DataTableTransactionDataExporter) getExportedTransactionCategoryName(ca
}
if category.ParentCategoryId == 0 {
return c.replaceDelimiters(category.Name)
return dataTableBuilder.ReplaceDelimiters(category.Name)
}
parentCategory, exists := categoryMap[category.ParentCategoryId]
@@ -118,34 +114,34 @@ func (c *DataTableTransactionDataExporter) getExportedTransactionCategoryName(ca
return ""
}
return c.replaceDelimiters(parentCategory.Name)
return dataTableBuilder.ReplaceDelimiters(parentCategory.Name)
}
func (c *DataTableTransactionDataExporter) getExportedTransactionSubCategoryName(categoryId int64, categoryMap map[int64]*models.TransactionCategory) string {
func (c *DataTableTransactionDataExporter) getExportedTransactionSubCategoryName(dataTableBuilder DataTableBuilder, categoryId int64, categoryMap map[int64]*models.TransactionCategory) string {
category, exists := categoryMap[categoryId]
if exists {
return c.replaceDelimiters(category.Name)
return dataTableBuilder.ReplaceDelimiters(category.Name)
} else {
return ""
}
}
func (c *DataTableTransactionDataExporter) getExportedAccountName(accountId int64, accountMap map[int64]*models.Account) string {
func (c *DataTableTransactionDataExporter) getExportedAccountName(dataTableBuilder DataTableBuilder, accountId int64, accountMap map[int64]*models.Account) string {
account, exists := accountMap[accountId]
if exists {
return c.replaceDelimiters(account.Name)
return dataTableBuilder.ReplaceDelimiters(account.Name)
} else {
return ""
}
}
func (c *DataTableTransactionDataExporter) getAccountCurrency(accountId int64, accountMap map[int64]*models.Account) string {
func (c *DataTableTransactionDataExporter) getAccountCurrency(dataTableBuilder DataTableBuilder, accountId int64, accountMap map[int64]*models.Account) string {
account, exists := accountMap[accountId]
if exists {
return c.replaceDelimiters(account.Currency)
return dataTableBuilder.ReplaceDelimiters(account.Currency)
} else {
return ""
}
@@ -159,7 +155,7 @@ func (c *DataTableTransactionDataExporter) getExportedGeographicLocation(transac
return ""
}
func (c *DataTableTransactionDataExporter) getExportedTags(transactionId int64, allTagIndexes map[int64][]int64, tagMap map[int64]*models.TransactionTag) string {
func (c *DataTableTransactionDataExporter) getExportedTags(dataTableBuilder DataTableBuilder, transactionId int64, allTagIndexes map[int64][]int64, tagMap map[int64]*models.TransactionTag) string {
tagIndexes, exists := allTagIndexes[transactionId]
if !exists {
@@ -183,17 +179,7 @@ func (c *DataTableTransactionDataExporter) getExportedTags(transactionId int64,
ret.WriteString(strings.Replace(tag.Name, c.transactionTagSeparator, " ", -1))
}
return c.replaceDelimiters(ret.String())
}
func (c *DataTableTransactionDataExporter) replaceDelimiters(text string) string {
text = strings.Replace(text, "\r\n", " ", -1)
text = strings.Replace(text, "\r", " ", -1)
text = strings.Replace(text, "\n", " ", -1)
text = strings.Replace(text, c.columnSeparator, " ", -1)
text = strings.Replace(text, c.lineSeparator, " ", -1)
return text
return dataTableBuilder.ReplaceDelimiters(ret.String())
}
func (c *DataTableTransactionDataImporter) parseImportedData(ctx core.Context, user *models.User, dataTable ImportedDataTable, defaultTimezoneOffset int16, accountMap map[string]*models.Account, categoryMap map[string]*models.TransactionCategory, tagMap map[string]*models.TransactionTag) (models.ImportedTransactionSlice, []*models.Account, []*models.TransactionCategory, []*models.TransactionTag, error) {
@@ -13,22 +13,22 @@ var (
DataTableTransactionDataExporter: DataTableTransactionDataExporter{
dataColumnMapping: ezbookkeepingDataColumnNameMapping,
transactionTypeMapping: ezbookkeepingTransactionTypeNameMapping,
columnSeparator: ",",
lineSeparator: "\n",
geoLocationSeparator: " ",
transactionTagSeparator: ";",
},
columns: ezbookkeepingDataColumns,
columns: ezbookkeepingDataColumns,
columnSeparator: ",",
lineSeparator: "\n",
},
ezBookKeepingTransactionDataPlainTextImporter{
DataTableTransactionDataImporter: DataTableTransactionDataImporter{
dataColumnMapping: ezbookkeepingDataColumnNameMapping,
transactionTypeNameMapping: ezbookkeepingNameTransactionTypeMapping,
columnSeparator: ",",
lineSeparator: "\n",
geoLocationSeparator: " ",
transactionTagSeparator: ";",
},
columnSeparator: ",",
lineSeparator: "\n",
},
}
)
@@ -8,12 +8,16 @@ import (
// ezBookKeepingTransactionDataPlainTextExporter defines the structure of ezbookkeeping plain text exporter for transaction data
type ezBookKeepingTransactionDataPlainTextExporter struct {
DataTableTransactionDataExporter
columns []DataTableColumn
columns []DataTableColumn
columnSeparator string
lineSeparator string
}
// ezBookKeepingTransactionDataPlainTextImporter defines the structure of ezbookkeeping plain text importer for transaction data
type ezBookKeepingTransactionDataPlainTextImporter struct {
DataTableTransactionDataImporter
columnSeparator string
lineSeparator string
}
var ezbookkeepingDataColumnNameMapping = map[DataTableColumn]string{
@@ -100,6 +100,17 @@ func (b *ezBookKeepingTransactionPlainTextDataTableBuilder) AppendTransaction(da
b.builder.WriteString(fmt.Sprintf(b.dataLineFormat, dataRowParams...))
}
// ReplaceDelimiters returns the text after removing the delimiters
func (b *ezBookKeepingTransactionPlainTextDataTableBuilder) ReplaceDelimiters(text string) string {
text = strings.Replace(text, "\r\n", " ", -1)
text = strings.Replace(text, "\r", " ", -1)
text = strings.Replace(text, "\n", " ", -1)
text = strings.Replace(text, b.columnSeparator, " ", -1)
text = strings.Replace(text, b.lineSeparator, " ", -1)
return text
}
// String returns the textual representation of this data
func (b *ezBookKeepingTransactionPlainTextDataTableBuilder) String() string {
return b.builder.String()
@@ -13,22 +13,22 @@ var (
DataTableTransactionDataExporter: DataTableTransactionDataExporter{
dataColumnMapping: ezbookkeepingDataColumnNameMapping,
transactionTypeMapping: ezbookkeepingTransactionTypeNameMapping,
columnSeparator: "\t",
lineSeparator: "\n",
geoLocationSeparator: " ",
transactionTagSeparator: ";",
},
columns: ezbookkeepingDataColumns,
columns: ezbookkeepingDataColumns,
columnSeparator: "\t",
lineSeparator: "\n",
},
ezBookKeepingTransactionDataPlainTextImporter{
DataTableTransactionDataImporter: DataTableTransactionDataImporter{
dataColumnMapping: ezbookkeepingDataColumnNameMapping,
transactionTypeNameMapping: ezbookkeepingNameTransactionTypeMapping,
columnSeparator: "\t",
lineSeparator: "\n",
geoLocationSeparator: " ",
transactionTagSeparator: ";",
},
columnSeparator: "\t",
lineSeparator: "\n",
},
}
)