12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485 |
- package strategy
- import (
- "github.com/FGM/kurz/storage"
- "github.com/FGM/kurz/url"
- "log"
- "time"
- )
- type AliasingStrategy interface {
- Name() string
- Alias(url url.LongUrl, s storage.Storage, options ...interface{}) (url.ShortUrl, error)
- UseCount(storage storage.Storage) int
- }
- type baseStrategy struct{}
- func (y baseStrategy) Name() string {
- return "base"
- }
- func (y baseStrategy) Alias(long url.LongUrl, s storage.Storage, options ...interface{}) (url.ShortUrl, error) {
- var short url.ShortUrl
- var err error
-
- short = url.ShortUrl{
- Value: long.Value,
- ShortFor: long,
- Domain: long.Domain(),
- Strategy: y.Name(),
- SubmittedBy: storage.CurrentUser(),
- SubmittedOn: time.Now().UTC().Unix(),
- IsEnabled: true,
- }
- sql := `
- INSERT INTO shorturl(url, domain, strategy, submittedBy, submittedInfo, isEnabled)
- VALUES (?, ?, ?, ?, ?, ?)
- `
- result, err := s.DB.Exec(sql, short.Value, short.Domain, short.Strategy, short.SubmittedBy.Id, short.SubmittedOn, short.IsEnabled)
- if err != nil {
- log.Printf("Failed inserting %s: %#V", short.Value, err)
- } else {
- short.Id, _ = result.LastInsertId()
- }
- return short, err
- }
- func (y baseStrategy) UseCount(s storage.Storage) int {
- sql := `
- SELECT COUNT(*)
- FROM shorturl
- WHERE strategy = ?
- `
- var count int
- err := s.DB.QueryRow(sql, y.Name()).Scan(&count)
- if err != nil {
- count = 0
- log.Printf("Failed querying database for base strategy use count: %v\n", err)
- }
- return count
- }
|