diff --git a/web/pkg/id/hashids.go b/web/pkg/id/hashids.go new file mode 100644 index 0000000..0f364d4 --- /dev/null +++ b/web/pkg/id/hashids.go @@ -0,0 +1,33 @@ +package id + +import ( + hd "github.com/speps/go-hashids" +) + +const ( + minLength = 4 + salt = "mVJIX8cDWQJ71oMw6xw9yYV9TA1rojDcKrhUaOqEfaE" + alphabet = "abcdefghijklmnopqrstuvwxyz1234567890" +) + +type hashId struct { + hid *hd.HashID +} + +func (h *hashId) Encode(x ...int) (string, error) { + var d []int + return h.hid.Encode(append(d, x...)) +} + +func NewIdGenerator() (*hashId, error) { + data := hd.NewData() + data.MinLength = minLength + data.Salt = salt + data.Alphabet = alphabet + hid, err := hd.NewWithData(data) + if err != nil { + return nil, err + } + + return &hashId{hid}, nil +} diff --git a/web/pkg/id/hashids_test.go b/web/pkg/id/hashids_test.go new file mode 100644 index 0000000..237791f --- /dev/null +++ b/web/pkg/id/hashids_test.go @@ -0,0 +1,15 @@ +package id + +import ( + "github.com/stretchr/testify/require" + "testing" +) + +func TestEncode(t *testing.T) { + hid, err := NewIdGenerator() + require.NoError(t, err) + + hash, err := hid.Encode(1) + require.NoError(t, err) + require.NotEmpty(t, hash) +}