76 lines
1.7 KiB
Go
76 lines
1.7 KiB
Go
package db
|
|
|
|
import (
|
|
"database/sql"
|
|
"errors"
|
|
"strconv"
|
|
)
|
|
|
|
var ErrNoData = errors.New("no badge found with the provided data")
|
|
|
|
type CoverageData struct {
|
|
Namespace string
|
|
Project string
|
|
Coverage float64
|
|
HTML string
|
|
}
|
|
|
|
// QueryByBranch returns CoverageData for the provided branch for the project.
|
|
// If there is no such data, it returns ErrNoData.
|
|
func QueryByBranch(namespace, project, branch string) (CoverageData, error) {
|
|
result, err := db.Query(`SELECT coverage,html FROM badge WHERE
|
|
namespace=? AND
|
|
project_name=? AND
|
|
branch=?`,
|
|
namespace, project, branch)
|
|
if err != nil {
|
|
return CoverageData{}, err
|
|
}
|
|
|
|
return parseRows(result, namespace, project)
|
|
}
|
|
|
|
// QueryByBranch returns CoverageData for the provided pull request of the project.
|
|
// If there is no such data, it returns ErrNoData.
|
|
func QueryByPull(namespace, project, pullStr string) (CoverageData, error) {
|
|
pull, err := strconv.Atoi(pullStr)
|
|
if err != nil {
|
|
return CoverageData{}, ErrNoData
|
|
}
|
|
|
|
result, err := db.Query(`SELECT coverage, html FROM badge WHERE
|
|
namespace=? AND
|
|
project_name=? AND
|
|
pull=?`,
|
|
namespace, project, pull)
|
|
if err != nil {
|
|
return CoverageData{}, err
|
|
}
|
|
|
|
return parseRows(result, namespace, project)
|
|
}
|
|
|
|
func parseRows(result *sql.Rows, namespace, project string) (CoverageData, error) {
|
|
if !result.Next() {
|
|
return CoverageData{}, ErrNoData
|
|
}
|
|
|
|
var coverage float64
|
|
var html string
|
|
err := result.Scan(&coverage, &html)
|
|
if err != nil {
|
|
return CoverageData{}, err
|
|
}
|
|
|
|
if err = result.Close(); err != nil {
|
|
return CoverageData{}, ErrNoData
|
|
}
|
|
|
|
return CoverageData{
|
|
Namespace: namespace,
|
|
Project: project,
|
|
Coverage: coverage,
|
|
HTML: html,
|
|
}, nil
|
|
}
|