mvp
This commit is contained in:
@@ -2,7 +2,9 @@ package links
|
||||
|
||||
import (
|
||||
"crypto/rand"
|
||||
"fmt"
|
||||
"math/big"
|
||||
"regexp"
|
||||
)
|
||||
|
||||
const codeLength = 5
|
||||
@@ -10,6 +12,7 @@ const codeLength = 5
|
||||
var (
|
||||
alphabet = "ABCDEFGHJKMNPQRSTUVWXYZ23456789"
|
||||
alphabetLength = big.NewInt(int64(len(alphabet)))
|
||||
ValidShortCode = regexp.MustCompile(fmt.Sprintf(`^/[%s]{%d}$`, alphabet, codeLength))
|
||||
)
|
||||
|
||||
func randInt() int {
|
||||
|
||||
@@ -35,7 +35,7 @@ func connString(user, pass, host, name, port string) string {
|
||||
func Connect(ctx context.Context) (*pgxpool.Pool, error) {
|
||||
driver := config.GetDefault(kDriver, defaultDriver)
|
||||
if driver != defaultDriver {
|
||||
return nil, errors.F("database: unsupported driver %s", driver)
|
||||
return nil, fmt.Errorf("database: unsupported driver %s", driver)
|
||||
}
|
||||
|
||||
user := config.GetDefault(kUser, defaultUser)
|
||||
|
||||
29
links/url.go
29
links/url.go
@@ -2,6 +2,7 @@ package links
|
||||
|
||||
import (
|
||||
"context"
|
||||
"log"
|
||||
"net/url"
|
||||
"time"
|
||||
|
||||
@@ -21,16 +22,16 @@ type URL struct {
|
||||
CreatedAt time.Time
|
||||
}
|
||||
|
||||
func (u *URL) StoreURL(ctx context.Context, db *pgxpool.Pool) error {
|
||||
func (u *URL) Store(ctx context.Context, db *pgxpool.Pool) error {
|
||||
stmt := psql.Insert("urls").
|
||||
Columns("id", "url", "nurl", "short", "created_at").
|
||||
Values(u.ID, u.URL, u.NURL, u.Short, u.Short, u.CreatedAt)
|
||||
Values(u.ID, u.URL, u.NURL, u.Short, u.CreatedAt)
|
||||
query, args, err := stmt.ToSql()
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
_, err := db.Exec(ctx, query, args...)
|
||||
_, err = db.Exec(ctx, query, args...)
|
||||
return err
|
||||
}
|
||||
|
||||
@@ -56,7 +57,7 @@ func NormalizeString(s string) (string, error) {
|
||||
}
|
||||
|
||||
func New(u *url.URL) *URL {
|
||||
link := URL{
|
||||
link := &URL{
|
||||
ID: uuid.NewString(),
|
||||
URL: u.String(),
|
||||
NURL: Normalize(u).String(),
|
||||
@@ -93,9 +94,9 @@ func Lookup(ctx context.Context, db *pgxpool.Pool, s string) (string, error) {
|
||||
row := db.QueryRow(ctx, query, args...)
|
||||
|
||||
var short string
|
||||
err := row.Scan(&short)
|
||||
err = row.Scan(&short)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
return "", err
|
||||
}
|
||||
|
||||
return short, nil
|
||||
@@ -125,5 +126,21 @@ func StoreURL(ctx context.Context, db *pgxpool.Pool, s string) (string, error) {
|
||||
}
|
||||
|
||||
func RetrieveURL(ctx context.Context, db *pgxpool.Pool, short string) (string, error) {
|
||||
log.Printf("look up url for short code %s", short)
|
||||
stmt := psql.Select("url").From("urls").
|
||||
Where(squirrel.Eq{"short": short})
|
||||
query, args, err := stmt.ToSql()
|
||||
if err != nil {
|
||||
return "", err
|
||||
}
|
||||
|
||||
row := db.QueryRow(ctx, query, args...)
|
||||
var url string
|
||||
|
||||
err = row.Scan(&url)
|
||||
if err != nil {
|
||||
return "", err
|
||||
}
|
||||
|
||||
return url, nil
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user