short_url.go 552 B

12345678910111213141516171819202122232425262728293031
  1. package domain
  2. import (
  3. "errors"
  4. "math/rand"
  5. "strconv"
  6. )
  7. type ShortURL struct {
  8. URL
  9. target TargetURL
  10. }
  11. func (su ShortURL) Target() TargetURL {
  12. return su.target
  13. }
  14. /*
  15. MakeShortURL creates a ShortURL instance from a given RedirectURL/target pair.
  16. */
  17. func NewUnspecifiedShortURL(target TargetURL) (ShortURL, error) {
  18. var su ShortURL
  19. if target.IsEmpty() {
  20. return su, errors.New("cannot target empty RedirectURL")
  21. }
  22. // FIXME: will cause collisions.
  23. url := URL(strconv.Itoa(rand.Intn(1 << 31)))
  24. su = ShortURL{url, target}
  25. return su, nil
  26. }