Skip to content
This repository has been archived by the owner on Oct 17, 2020. It is now read-only.

Added GetByAliases function in db and repository #539

Merged
merged 21 commits into from Mar 12, 2020
Merged
Show file tree
Hide file tree
Changes from 2 commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Jump to
Jump to file
Failed to load files.
Diff view
Diff view
24 changes: 0 additions & 24 deletions backend/.env.dist

This file was deleted.

6 changes: 3 additions & 3 deletions backend/app/adapter/db/.env
@@ -1,7 +1,7 @@
DB_HOST=localhost
DB_PORT=5432
DB_PORT=5433
DB_USER=postgres
DB_PASSWORD=password
DB_NAME=short-test
DB_PASSWORD=123456
DB_NAME=tom

MIGRATION_ROOT=./migration
dawntomm marked this conversation as resolved.
Show resolved Hide resolved
25 changes: 20 additions & 5 deletions backend/app/adapter/db/url.go
Expand Up @@ -3,6 +3,7 @@ package db
import (
"database/sql"
"fmt"
"strings"

"github.com/short-d/short/app/adapter/db/table"
"github.com/short-d/short/app/entity"
Expand Down Expand Up @@ -98,28 +99,42 @@ WHERE "%s"=$1;`,

// GetByAliases finds URLs for a list of aliases
func (u URLSql) GetByAliases(aliases []string) ([]entity.URL, error) {
// create a string for aliases parameters
// it looks like: $1, $2, $3, ......
params := make([]string, 0, len(aliases))
for i := range aliases {
params = append(params, fmt.Sprintf("$%d", i+1))
}
parameterStr := strings.Join(params, ", ")
magicoder10 marked this conversation as resolved.
Show resolved Hide resolved

// create a list of interface{} to hold aliases for db.Query()
aliasesInterface := []interface{}{}
for _, alias := range aliases {
aliasesInterface = append(aliasesInterface, alias)
}
dawntomm marked this conversation as resolved.
Show resolved Hide resolved

var urls []entity.URL

statement := fmt.Sprintf(`
SELECT "%s","%s","%s","%s","%s"
FROM "%s"
WHERE "%s" IN ("%v");`,
FROM "%s"
WHERE "%s" IN (%s);`,
dawntomm marked this conversation as resolved.
Show resolved Hide resolved
table.URL.ColumnAlias,
table.URL.ColumnOriginalURL,
table.URL.ColumnExpireAt,
table.URL.ColumnCreatedAt,
table.URL.ColumnUpdatedAt,
table.URL.TableName,
table.URL.ColumnAlias,
aliases,
parameterStr,
)

rows, err := u.db.Query(statement)
defer rows.Close()
rows, err := u.db.Query(statement, aliasesInterface...)
if err != nil {
return urls, nil
}

defer rows.Close()
for rows.Next() {
url := entity.URL{}
err := rows.Scan(
Expand Down
2 changes: 1 addition & 1 deletion backend/app/adapter/db/url_integration_test.go
Expand Up @@ -257,7 +257,7 @@ func TestURLSql_GetByAliases(t *testing.T) {
name: "alias not found",
tableRows: []urlTableRow{},
aliases: []string{"220uFicCJj"},
hasErr: true,
hasErr: false,
},
{
name: "found url",
Expand Down