diff --git a/go.mod b/go.mod index 0ac409c4..c47486a4 100644 --- a/go.mod +++ b/go.mod @@ -6,7 +6,6 @@ require ( dario.cat/mergo v1.0.1 github.com/DATA-DOG/go-sqlmock v1.5.2 github.com/KimMachineGun/automemlimit v0.7.0 - github.com/ash3in/uuidv8 v1.2.0 github.com/google/uuid v1.6.0 github.com/matoous/go-nanoid v1.5.1 github.com/patrickmn/go-cache v2.1.0+incompatible diff --git a/go.sum b/go.sum index 5ee2f7f8..6f2b8d02 100644 --- a/go.sum +++ b/go.sum @@ -4,8 +4,6 @@ github.com/DATA-DOG/go-sqlmock v1.5.2 h1:OcvFkGmslmlZibjAjaHm3L//6LiuBgolP7Oputl github.com/DATA-DOG/go-sqlmock v1.5.2/go.mod h1:88MAG/4G7SMwSE3CeA0ZKzrT5CiOU3OJ+JlNzwDqpNU= github.com/KimMachineGun/automemlimit v0.7.0 h1:7G06p/dMSf7G8E6oq+f2uOPuVncFyIlDI/pBWK49u88= github.com/KimMachineGun/automemlimit v0.7.0/go.mod h1:QZxpHaGOQoYvFhv/r4u3U0JTC2ZcOwbSr11UZF46UBM= -github.com/ash3in/uuidv8 v1.2.0 h1:2oogGdtCPwaVtyvPPGin4TfZLtOGE5F+W++E880G6SI= -github.com/ash3in/uuidv8 v1.2.0/go.mod h1:BnU0wJBxnzdEKmVg4xckBkD+VZuecTFTUP3M0dWgyY4= github.com/davecgh/go-spew v1.1.2-0.20180830191138-d8f796af33cc h1:U9qPSI2PIWSS1VwoXQT9A3Wy9MM3WgvqSxFWenqJduM= github.com/davecgh/go-spew v1.1.2-0.20180830191138-d8f796af33cc/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= github.com/frankban/quicktest v1.14.6 h1:7Xjx+VpznH+oBnejlPUj8oUpdxnVs4f8XU8WnHkI4W8= diff --git a/util/id/id.go b/util/id/id.go index 523c18c4..80e39e3b 100644 --- a/util/id/id.go +++ b/util/id/id.go @@ -2,12 +2,8 @@ package id import ( "crypto/rand" - "encoding/binary" "errors" - "fmt" - "time" - uuidv8 "github.com/ash3in/uuidv8" "github.com/google/uuid" nanoid "github.com/matoous/go-nanoid" ) @@ -25,6 +21,7 @@ type Type int const ( TypeUnspecified Type = iota TypeNanoid + TypeUUIDv7 TypeUUIDv8 ) @@ -58,14 +55,14 @@ func (g *Generator) New() (string, error) { } return nanoid.Generate(g.opts.NanoidAlphabet, g.opts.NanoidSize) - case TypeUUIDv8: - timestamp := uint64(time.Now().UnixNano()) - clockSeq := make([]byte, 2) - if _, err := rand.Read(clockSeq); err != nil { - return "", fmt.Errorf("failed to generate random clock sequence: %w", err) + case TypeUUIDv7: + uid, err := uuid.NewV7() + if err != nil { + return "", err } - clockSeqValue := binary.BigEndian.Uint16(clockSeq) & 0x0FFF // Mask to 12 bits - return uuidv8.NewWithParams(timestamp, clockSeqValue, g.opts.UUIDNode[:], uuidv8.TimestampBits48) + return uid.String(), nil + case TypeUUIDv8: + return "", errors.New("unsupported uuid version v8") } return "", errors.New("invalid option, Type unspecified") } @@ -82,16 +79,15 @@ func New(opts ...Option) (string, error) { if options.NanoidSize <= 0 { return "", errors.New("invalid option, NanoidSize must be positive integer") } - return nanoid.Generate(options.NanoidAlphabet, options.NanoidSize) - case TypeUUIDv8: - timestamp := uint64(time.Now().UnixNano()) - clockSeq := make([]byte, 2) - if _, err := rand.Read(clockSeq); err != nil { - return "", fmt.Errorf("failed to generate random clock sequence: %w", err) + case TypeUUIDv7: + uid, err := uuid.NewV7() + if err != nil { + return "", err } - clockSeqValue := binary.BigEndian.Uint16(clockSeq) & 0x0FFF // Mask to 12 bits - return uuidv8.NewWithParams(timestamp, clockSeqValue, options.UUIDNode[:], uuidv8.TimestampBits48) + return uid.String(), nil + case TypeUUIDv8: + return "", errors.New("unsupported uuid version v8") } return "", errors.New("invalid option, Type unspecified") @@ -145,7 +141,7 @@ func WithUUIDNode(node [6]byte) Option { // NewOptions returns new Options struct filled by opts func NewOptions(opts ...Option) Options { options := Options{ - Type: TypeUUIDv8, + Type: TypeUUIDv7, NanoidAlphabet: DefaultNanoidAlphabet, NanoidSize: DefaultNanoidSize, UUIDNode: generatedNode,