memory.go 1001 B

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152
  1. package infrastructure
  2. import (
  3. "errors"
  4. "code.osinet.fr/fgm/kurz/domain"
  5. )
  6. type urlmap map[domain.URL]domain.URL
  7. var targets = make(urlmap)
  8. var shorts = make(urlmap)
  9. type MemoryShortURLRepository struct {
  10. }
  11. type MemoryTargetURLRepository struct {
  12. }
  13. func (r MemoryShortURLRepository) GetTarget(su domain.ShortURL) (domain.TargetURL, error) {
  14. var tu domain.TargetURL
  15. var err error
  16. if t, ok := targets[su.URL]; ok {
  17. tu = domain.TargetURL{URL: t}
  18. } else {
  19. err = errors.New("not found")
  20. }
  21. return tu, err
  22. }
  23. func (s MemoryTargetURLRepository) GetShort(tu domain.TargetURL) (su domain.ShortURL, isNew bool, err error) {
  24. // If short exists, just return it.
  25. if s, ok := shorts[tu.URL]; ok {
  26. su = domain.ShortURL{URL: s}
  27. return su, false, err
  28. }
  29. // If it doesn't exist, attempt to create it.
  30. su, err = domain.NewUnspecifiedShortURL(tu)
  31. if err != nil {
  32. // Creation failed.
  33. return su, false, err
  34. }
  35. shorts[tu.URL] = su.URL
  36. targets[su.URL] = tu.URL
  37. return su, true, err
  38. }