1
0
mirror of https://github.com/raseels-repos/golang-saas-starter-kit.git synced 2025-06-08 23:56:37 +02:00

90 lines
1.9 KiB
Go

package geonames
import (
"context"
"github.com/huandu/go-sqlbuilder"
"github.com/pkg/errors"
"gopkg.in/DataDog/dd-trace-go.v1/ddtrace/tracer"
)
const (
// The database table for CountryTimezone
countrieTimezonesTableName = "country_timezones"
)
// FindCountryTimezones ....
func (repo *Repository) FindCountryTimezones(ctx context.Context, orderBy, where string, args ...interface{}) ([]*CountryTimezone, error) {
span, ctx := tracer.StartSpanFromContext(ctx, "internal.geonames.FindCountryTimezones")
defer span.Finish()
query := sqlbuilder.NewSelectBuilder()
query.Select("country_code,timezone_id")
query.From(countrieTimezonesTableName)
if orderBy == "" {
orderBy = "timezone_id"
}
query.OrderBy(orderBy)
if where != "" {
query.Where(where)
}
queryStr, queryArgs := query.Build()
queryStr = repo.DbConn.Rebind(queryStr)
args = append(args, queryArgs...)
// Fetch all country timezones from the db.
rows, err := repo.DbConn.QueryContext(ctx, queryStr, args...)
if err != nil {
err = errors.Wrapf(err, "query - %s", query.String())
err = errors.WithMessage(err, "find country timezones failed")
return nil, err
}
// iterate over each row
resp := []*CountryTimezone{}
for rows.Next() {
var (
v CountryTimezone
err error
)
err = rows.Scan(&v.CountryCode, &v.TimezoneId)
if err != nil {
err = errors.Wrapf(err, "query - %s", query.String())
return nil, err
} else if v.CountryCode == "" || v.TimezoneId == "" {
continue
}
resp = append(resp, &v)
}
return resp, nil
}
func (repo *Repository) ListTimezones(ctx context.Context) ([]string, error) {
res, err := repo.FindCountryTimezones(ctx, "timezone_id", "")
if err != nil {
return nil, err
}
resp := []string{}
for _, ct := range res {
var exists bool
for _, t := range resp {
if ct.TimezoneId == t {
exists = true
break
}
}
if !exists {
resp = append(resp, ct.TimezoneId)
}
}
return resp, nil
}