first commit

This commit is contained in:
kenneth
2023-12-25 11:08:11 +08:00
parent 4cbf61f542
commit d41908ded5
8 changed files with 286 additions and 0 deletions

35
shortener/shortener.go Normal file
View File

@@ -0,0 +1,35 @@
package shortener
import (
"crypto/sha256"
"fmt"
"math/big"
"github.com/itchyny/base58-go"
)
func sha256Of(input string) []byte {
algorithm := sha256.New()
algorithm.Write([]byte(input))
return algorithm.Sum(nil)
}
func base58Encoded(bytes []byte) (string, error) {
encoded, err := base58.BitcoinEncoding.Encode(bytes)
if err != nil {
return "", err
}
return string(encoded), nil
}
func GenerateShortLink(originUrl string, userId string) (string, error) {
urlHashByte := sha256Of(originUrl + userId)
generateNumber := new(big.Int).SetBytes(urlHashByte).Uint64()
result, err := base58Encoded([]byte(fmt.Sprintf("%d", generateNumber)))
if err != nil {
return "", err
}
return result, nil
}

View File

@@ -0,0 +1,26 @@
package shortener
import (
"testing"
"github.com/stretchr/testify/assert"
)
const userId = "7c729139-7ff4-445f-976b-2d842f55cb0e"
func TestGenerateShortLink(t *testing.T) {
link1 := "https://www.baidu.com/"
short1, err := GenerateShortLink(link1, userId)
assert.NoError(t, err)
assert.Equal(t, short1, "egtq236P5f3")
link2 := "https://www.163.com/"
short2, err := GenerateShortLink(link2, userId)
assert.NoError(t, err)
assert.Equal(t, short2, "DiCqg9YpV89")
link3 := "https://www.qq.com/"
short3, err := GenerateShortLink(link3, userId)
assert.NoError(t, err)
assert.Equal(t, short3, "4QhQ62cZem1")
}