feat: Add API
feat: Add DB-backed time provider
This commit is contained in:
1 parent
415a6c8337
commit
d1f67fbdb4
12 files changed
+8839
-13
No files matched your search
@@ -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
|
||||
}
|
||||
Reference in new issue
Block a user