short_url.go 1.8 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768
  1. // Copyright (c) [2022] [巴拉迪维 BaratSemet]
  2. // [ohUrlShortener] is licensed under Mulan PSL v2.
  3. // You can use this software according to the terms and conditions of the Mulan PSL v2.
  4. // You may obtain a copy of Mulan PSL v2 at:
  5. // http://license.coscl.org.cn/MulanPSL2
  6. // THIS SOFTWARE IS PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OF ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO NON-INFRINGEMENT, MERCHANTABILITY OR FIT FOR A PARTICULAR PURPOSE.
  7. // See the Mulan PSL v2 for more details.
  8. package core
  9. import (
  10. "database/sql"
  11. "fmt"
  12. "reflect"
  13. "time"
  14. "ohurlshortener/utils"
  15. )
  16. type OpenType int
  17. const (
  18. OpenInAll OpenType = iota
  19. OpenInWeChat
  20. OpenInDingTalk
  21. OpenInIPhone
  22. OpenInAndroid
  23. OpenInIPad
  24. OpenInSafari
  25. OpenInChrome
  26. OpenInFirefox
  27. )
  28. // ShortUrl 短链接
  29. type ShortUrl struct {
  30. ID int64 `db:"id" json:"id"`
  31. ShortUrl string `db:"short_url" json:"short_url"`
  32. DestUrl string `db:"dest_url" json:"desc_url"`
  33. CreatedAt time.Time `db:"created_at" json:"created_at"`
  34. Valid bool `db:"is_valid" json:"is_valid"`
  35. Memo sql.NullString `db:"memo" json:"memo"`
  36. OpenType OpenType `db:"open_type" json:"open_type"`
  37. }
  38. type MemShortUrl struct {
  39. DestUrl string
  40. OpenType OpenType
  41. }
  42. // IsEmpty 判断是否为空
  43. func (url ShortUrl) IsEmpty() bool {
  44. return reflect.DeepEqual(url, ShortUrl{})
  45. }
  46. // GenerateShortLink 生成短链接
  47. func GenerateShortLink(initialLink string) (string, error) {
  48. if utils.EmptyString(initialLink) {
  49. return "", fmt.Errorf("empty string")
  50. }
  51. urlHash, err := utils.Sha256Of(initialLink)
  52. if err != nil {
  53. return "", err
  54. }
  55. // number := new(big.Int).SetBytes(urlHash).Uint64()
  56. // str := utils.Base58Encode([]byte(fmt.Sprintf("%d", number)))
  57. str := utils.Base58Encode(urlHash)
  58. return str[:8], nil
  59. }