diff --git a/pkg/api/data_managements.go b/pkg/api/data_managements.go index 846c1d6e..9ebb3aa6 100644 --- a/pkg/api/data_managements.go +++ b/pkg/api/data_managements.go @@ -20,16 +20,14 @@ const pageCountForDataExport = 1000 // DataManagementsApi represents data management api type DataManagementsApi struct { ApiUsingConfig - ezBookKeepingCsvConverter converters.TransactionDataConverter - ezBookKeepingTsvConverter converters.TransactionDataConverter - tokens *services.TokenService - users *services.UserService - accounts *services.AccountService - transactions *services.TransactionService - categories *services.TransactionCategoryService - tags *services.TransactionTagService - pictures *services.TransactionPictureService - templates *services.TransactionTemplateService + tokens *services.TokenService + users *services.UserService + accounts *services.AccountService + transactions *services.TransactionService + categories *services.TransactionCategoryService + tags *services.TransactionTagService + pictures *services.TransactionPictureService + templates *services.TransactionTemplateService } // Initialize a data management api singleton instance @@ -38,16 +36,14 @@ var ( ApiUsingConfig: ApiUsingConfig{ container: settings.Container, }, - ezBookKeepingCsvConverter: converters.EzBookKeepingTransactionDataCSVFileConverter, - ezBookKeepingTsvConverter: converters.EzBookKeepingTransactionDataTSVFileConverter, - tokens: services.Tokens, - users: services.Users, - accounts: services.Accounts, - transactions: services.Transactions, - categories: services.TransactionCategories, - tags: services.TransactionTags, - pictures: services.TransactionPictures, - templates: services.TransactionTemplates, + tokens: services.Tokens, + users: services.Users, + accounts: services.Accounts, + transactions: services.Transactions, + categories: services.TransactionCategories, + tags: services.TransactionTags, + pictures: services.TransactionPictures, + templates: services.TransactionTemplates, } ) @@ -247,12 +243,10 @@ func (a *DataManagementsApi) getExportedFileContent(c *core.WebContext, fileType return nil, "", errs.ErrOperationFailed } - var dataExporter converters.TransactionDataExporter + dataExporter := converters.GetTransactionDataExporter(fileType) - if fileType == "tsv" { - dataExporter = a.ezBookKeepingTsvConverter - } else { - dataExporter = a.ezBookKeepingCsvConverter + if dataExporter == nil { + return nil, "", errs.ErrNotImplemented } result, err := dataExporter.ToExportedContent(c, uid, allTransactions, accountMap, categoryMap, tagMap, tagIndexes) diff --git a/pkg/api/transactions.go b/pkg/api/transactions.go index 850a8a1d..3d698e5b 100644 --- a/pkg/api/transactions.go +++ b/pkg/api/transactions.go @@ -25,14 +25,12 @@ const maximumPicturesCountOfTransaction = 10 type TransactionsApi struct { ApiUsingConfig ApiUsingDuplicateChecker - ezBookKeepingCsvConverter converters.TransactionDataConverter - ezBookKeepingTsvConverter converters.TransactionDataConverter - transactions *services.TransactionService - transactionCategories *services.TransactionCategoryService - transactionTags *services.TransactionTagService - transactionPictures *services.TransactionPictureService - accounts *services.AccountService - users *services.UserService + transactions *services.TransactionService + transactionCategories *services.TransactionCategoryService + transactionTags *services.TransactionTagService + transactionPictures *services.TransactionPictureService + accounts *services.AccountService + users *services.UserService } // Initialize a transaction api singleton instance @@ -44,14 +42,12 @@ var ( ApiUsingDuplicateChecker: ApiUsingDuplicateChecker{ container: duplicatechecker.Container, }, - ezBookKeepingCsvConverter: converters.EzBookKeepingTransactionDataCSVFileConverter, - ezBookKeepingTsvConverter: converters.EzBookKeepingTransactionDataTSVFileConverter, - transactions: services.Transactions, - transactionCategories: services.TransactionCategories, - transactionTags: services.TransactionTags, - transactionPictures: services.TransactionPictures, - accounts: services.Accounts, - users: services.Users, + transactions: services.Transactions, + transactionCategories: services.TransactionCategories, + transactionTags: services.TransactionTags, + transactionPictures: services.TransactionPictures, + accounts: services.Accounts, + users: services.Users, } ) @@ -1034,14 +1030,10 @@ func (a *TransactionsApi) TransactionParseImportFileHandler(c *core.WebContext) } fileType := fileTypes[0] - var dataImporter converters.TransactionDataImporter + dataImporter, err := converters.GetTransactionDataImporter(fileType) - if fileType == "ezbookkeeping_csv" { - dataImporter = a.ezBookKeepingCsvConverter - } else if fileType == "ezbookkeeping_tsv" { - dataImporter = a.ezBookKeepingTsvConverter - } else { - return nil, errs.ErrImportFileTypeNotSupported + if err != nil { + return nil, errs.Or(err, errs.ErrImportFileTypeNotSupported) } importFiles := form.File["file"] diff --git a/pkg/cli/user_data.go b/pkg/cli/user_data.go index cf04a0c4..d39189e1 100644 --- a/pkg/cli/user_data.go +++ b/pkg/cli/user_data.go @@ -21,16 +21,14 @@ const pageCountForDataExport = 1000 // UserDataCli represents user data cli type UserDataCli struct { CliUsingConfig - ezBookKeepingCsvConverter converters.TransactionDataConverter - ezBookKeepingTsvConverter converters.TransactionDataConverter - accounts *services.AccountService - transactions *services.TransactionService - categories *services.TransactionCategoryService - tags *services.TransactionTagService - users *services.UserService - twoFactorAuthorizations *services.TwoFactorAuthorizationService - tokens *services.TokenService - forgetPasswords *services.ForgetPasswordService + accounts *services.AccountService + transactions *services.TransactionService + categories *services.TransactionCategoryService + tags *services.TransactionTagService + users *services.UserService + twoFactorAuthorizations *services.TwoFactorAuthorizationService + tokens *services.TokenService + forgetPasswords *services.ForgetPasswordService } // Initialize an user data cli singleton instance @@ -39,16 +37,14 @@ var ( CliUsingConfig: CliUsingConfig{ container: settings.Container, }, - ezBookKeepingCsvConverter: converters.EzBookKeepingTransactionDataCSVFileConverter, - ezBookKeepingTsvConverter: converters.EzBookKeepingTransactionDataTSVFileConverter, - accounts: services.Accounts, - transactions: services.Transactions, - categories: services.TransactionCategories, - tags: services.TransactionTags, - users: services.Users, - twoFactorAuthorizations: services.TwoFactorAuthorizations, - tokens: services.Tokens, - forgetPasswords: services.ForgetPasswords, + accounts: services.Accounts, + transactions: services.Transactions, + categories: services.TransactionCategories, + tags: services.TransactionTags, + users: services.Users, + twoFactorAuthorizations: services.TwoFactorAuthorizations, + tokens: services.Tokens, + forgetPasswords: services.ForgetPasswords, } ) @@ -646,12 +642,10 @@ func (l *UserDataCli) ExportTransaction(c *core.CliContext, username string, fil return nil, err } - var dataExporter converters.TransactionDataExporter + dataExporter := converters.GetTransactionDataExporter(fileType) - if fileType == "tsv" { - dataExporter = l.ezBookKeepingTsvConverter - } else { - dataExporter = l.ezBookKeepingCsvConverter + if dataExporter == nil { + return nil, errs.ErrNotImplemented } result, err := dataExporter.ToExportedContent(c, uid, allTransactions, accountMap, categoryMap, tagMap, tagIndexesMap) @@ -670,14 +664,10 @@ func (l *UserDataCli) ImportTransaction(c *core.CliContext, username string, fil return errs.ErrUsernameIsEmpty } - var dataImporter converters.TransactionDataImporter + dataImporter, err := converters.GetTransactionDataImporter(fileType) - if fileType == "ezbookkeeping_csv" { - dataImporter = l.ezBookKeepingCsvConverter - } else if fileType == "ezbookkeeping_tsv" { - dataImporter = l.ezBookKeepingTsvConverter - } else { - return errs.ErrImportFileTypeNotSupported + if err != nil { + return err } user, err := l.GetUserByUsername(c, username) diff --git a/pkg/converters/transaction_data_converters.go b/pkg/converters/transaction_data_converters.go new file mode 100644 index 00000000..ca2918e6 --- /dev/null +++ b/pkg/converters/transaction_data_converters.go @@ -0,0 +1,25 @@ +package converters + +import "github.com/mayswind/ezbookkeeping/pkg/errs" + +// GetTransactionDataExporter returns the transaction data exporter according to the file type +func GetTransactionDataExporter(fileType string) TransactionDataExporter { + if fileType == "csv" { + return EzBookKeepingTransactionDataCSVFileConverter + } else if fileType == "tsv" { + return EzBookKeepingTransactionDataTSVFileConverter + } else { + return nil + } +} + +// GetTransactionDataImporter returns the transaction data importer according to the file type +func GetTransactionDataImporter(fileType string) (TransactionDataImporter, error) { + if fileType == "ezbookkeeping_csv" { + return EzBookKeepingTransactionDataCSVFileConverter, nil + } else if fileType == "ezbookkeeping_tsv" { + return EzBookKeepingTransactionDataTSVFileConverter, nil + } else { + return nil, errs.ErrImportFileTypeNotSupported + } +}