feat: Add API

feat: Add DB-backed time provider
This commit is contained in:
abdus committed 2023-03-04 23:08:48 +01:00
1 parent 415a6c8337
commit d1f67fbdb4
12 files changed
+8839 -13

No files matched your search

+37 -9
View File
@@ -1,33 +1,61 @@
package main
import (
"database/sql"
"fmt"
"os"
"github.com/rs/zerolog/log"
"prayertimes/internal/api"
"prayertimes/internal/database"
"prayertimes/internal/scrapeutils"
"prayertimes/pkg/dbtimesprovider"
"prayertimes/pkg/diyanet"
)
func main() {
port, ok := os.LookupEnv("PORT")
if !ok {
port = "8000"
port := getDefaultEnv("PORT", "8000")
services, shutdown, err := newServices()
if err != nil {
log.Fatal().Err(err).Msg("failed to init services")
}
services := newServices()
defer shutdown()
app := api.New(services)
err := app.Listen(":" + port)
err = app.Listen(":" + port)
if err != nil {
log.Fatal().Err(err).Msg("exit with an error")
}
}
func newServices() api.Services {
d := diyanet.Diyanet{
func newServices() (api.Services, func(), error) {
diyanetProvider := diyanet.Diyanet{
FetcherFunc: scrapeutils.GetParsed,
}
return api.Services{
PrayerTimesProvider: d,
db, err := database.NewSqliteDB(getDefaultEnv("DATABASE_URL", "app.sqlite3"))
if err != nil {
return api.Services{}, nil, fmt.Errorf("failed to init db: %w", err)
}
dbProvider := dbtimesprovider.New(db, diyanetProvider)
if err := dbtimesprovider.Migrate(db.Db.(*sql.DB)); err != nil {
return api.Services{}, nil, fmt.Errorf("failed to migrate database: %w", err)
}
return api.Services{
PrayerTimesProvider: dbProvider,
}, func() {
defer db.Db.(*sql.DB).Close()
}, nil
}
func getDefaultEnv(name string, defaultValue string) string {
v, ok := os.LookupEnv(name)
if !ok {
return defaultValue
}
return v
}