diff --git a/echovault/api_generic.go b/echovault/api_generic.go index 6e9ddba3..8a685b7a 100644 --- a/echovault/api_generic.go +++ b/echovault/api_generic.go @@ -440,6 +440,14 @@ func (server *EchoVault) Incr(key string) (int, error) { return internal.ParseIntegerResponse(b) } +// Decr decrements the value at the given key if it's an integer. +// If the key does not exist, it's created with an initial value of 0 before incrementing. +// +// Parameters: +// +// `key` - string +// +// Returns: The new value as an integer. func (server *EchoVault) Decr(key string) (int, error) { // Construct the command cmd := []string{"DECR", key} diff --git a/internal/modules/generic/commands.go b/internal/modules/generic/commands.go index 177ee025..03f97856 100644 --- a/internal/modules/generic/commands.go +++ b/internal/modules/generic/commands.go @@ -646,19 +646,26 @@ LT - Only set the expiry time if the new expiry time is less than the current on HandlerFunc: handleExpireAt, }, { - Command: "incr", - Module: constants.GenericModule, - Categories: []string{constants.KeyspaceCategory, constants.WriteCategory, constants.FastCategory}, - Description: `(INCR key) Increments the number stored at key by one. If the key does not exist, it is set to 0 before performing the operation. An error is returned if the key contains a value of the wrong type or contains a string that cannot be represented as integer. This operation is limited to 64 bit signed integers.`, + Command: "incr", + Module: constants.GenericModule, + Categories: []string{constants.KeyspaceCategory, constants.WriteCategory, constants.FastCategory}, + Description: `(INCR key) +Increments the number stored at key by one. If the key does not exist, it is set to 0 before performing the operation. +An error is returned if the key contains a value of the wrong type or contains a string that cannot be represented as integer. +This operation is limited to 64 bit signed integers.`, Sync: true, KeyExtractionFunc: incrKeyFunc, HandlerFunc: handleIncr, }, { - Command: "decr", - Module: constants.GenericModule, - Categories: []string{constants.KeyspaceCategory, constants.WriteCategory, constants.FastCategory}, - Description: `(DECR key) Decrements the number stored at key by one. If the key does not exist, it is set to 0 before performing the operation. An error is returned if the key contains a value of the wrong type or contains a string that cannot be represented as integer. This operation is limited to 64 bit signed integers.`, + Command: "decr", + Module: constants.GenericModule, + Categories: []string{constants.KeyspaceCategory, constants.WriteCategory, constants.FastCategory}, + Description: `(DECR key) +Decrements the number stored at key by one. +If the key does not exist, it is set to 0 before performing the operation. +An error is returned if the key contains a value of the wrong type or contains a string that cannot be represented as integer. +This operation is limited to 64 bit signed integers.`, Sync: true, KeyExtractionFunc: decrKeyFunc, HandlerFunc: handleDecr,