support using duplicate checker to prevent duplicate submissions for new transaction record
This commit is contained in:
@@ -62,6 +62,11 @@ const (
|
||||
InternalUuidGeneratorType string = "internal"
|
||||
)
|
||||
|
||||
// Duplicate checker types
|
||||
const (
|
||||
InMemoryDuplicateCheckerType string = "in_memory"
|
||||
)
|
||||
|
||||
// User avatar provider types
|
||||
const (
|
||||
GravatarProvider string = "gravatar"
|
||||
@@ -115,6 +120,9 @@ const (
|
||||
defaultLogMode string = "console"
|
||||
defaultLoglevel Level = LOGLEVEL_INFO
|
||||
|
||||
defaultInMemoryDuplicateCheckerCleanupInterval uint32 = 60 // 1 minutes
|
||||
defaultDuplicateSubmissionsInterval uint32 = 300 // 5 minutes
|
||||
|
||||
defaultSecretKey string = "ezbookkeeping"
|
||||
defaultTokenExpiredTime uint32 = 604800 // 7 days
|
||||
defaultTemporaryTokenExpiredTime uint32 = 300 // 5 minutes
|
||||
@@ -196,6 +204,14 @@ type Config struct {
|
||||
UuidGeneratorType string
|
||||
UuidServerId uint8
|
||||
|
||||
// Duplicate Checker
|
||||
DuplicateCheckerType string
|
||||
InMemoryDuplicateCheckerCleanupInterval uint32
|
||||
InMemoryDuplicateCheckerCleanupIntervalDuration time.Duration
|
||||
EnableDuplicateSubmissionsCheck bool
|
||||
DuplicateSubmissionsInterval uint32
|
||||
DuplicateSubmissionsIntervalDuration time.Duration
|
||||
|
||||
// Secret
|
||||
SecretKeyNoSet bool
|
||||
SecretKey string
|
||||
@@ -297,6 +313,12 @@ func LoadConfiguration(configFilePath string) (*Config, error) {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
err = loadDuplicateCheckerConfiguration(config, cfgFile, "duplicate_checker")
|
||||
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
err = loadSecurityConfiguration(config, cfgFile, "security")
|
||||
|
||||
if err != nil {
|
||||
@@ -487,6 +509,30 @@ func loadUuidConfiguration(config *Config, configFile *ini.File, sectionName str
|
||||
return nil
|
||||
}
|
||||
|
||||
func loadDuplicateCheckerConfiguration(config *Config, configFile *ini.File, sectionName string) error {
|
||||
if getConfigItemStringValue(configFile, sectionName, "checker_type") == InMemoryDuplicateCheckerType {
|
||||
config.DuplicateCheckerType = InMemoryDuplicateCheckerType
|
||||
} else {
|
||||
return errs.ErrInvalidDuplicateCheckerType
|
||||
}
|
||||
|
||||
config.InMemoryDuplicateCheckerCleanupInterval = getConfigItemUint32Value(configFile, sectionName, "cleanup_interval", defaultInMemoryDuplicateCheckerCleanupInterval)
|
||||
config.InMemoryDuplicateCheckerCleanupIntervalDuration = time.Duration(config.InMemoryDuplicateCheckerCleanupInterval) * time.Second
|
||||
|
||||
duplicateSubmissionsInterval := getConfigItemUint32Value(configFile, sectionName, "duplicate_submissions_interval", defaultDuplicateSubmissionsInterval)
|
||||
|
||||
config.EnableDuplicateSubmissionsCheck = duplicateSubmissionsInterval > 0
|
||||
|
||||
if duplicateSubmissionsInterval < 1 {
|
||||
duplicateSubmissionsInterval = defaultDuplicateSubmissionsInterval
|
||||
}
|
||||
|
||||
config.DuplicateSubmissionsInterval = duplicateSubmissionsInterval
|
||||
config.DuplicateSubmissionsIntervalDuration = time.Duration(config.DuplicateSubmissionsInterval) * time.Second
|
||||
|
||||
return nil
|
||||
}
|
||||
|
||||
func loadSecurityConfiguration(config *Config, configFile *ini.File, sectionName string) error {
|
||||
config.SecretKeyNoSet = !getConfigItemIsSet(configFile, sectionName, "secret_key")
|
||||
config.SecretKey = getConfigItemStringValue(configFile, sectionName, "secret_key", defaultSecretKey)
|
||||
|
||||
Reference in New Issue
Block a user