feat: Add API
feat: Add DB-backed time provider
This commit is contained in:
+8
-3
@@ -2,13 +2,14 @@ package api
|
||||
|
||||
import (
|
||||
"errors"
|
||||
"fmt"
|
||||
"net/http"
|
||||
"time"
|
||||
|
||||
"github.com/gofiber/fiber/v2"
|
||||
"github.com/gofiber/fiber/v2/middleware/cache"
|
||||
"github.com/gofiber/fiber/v2/middleware/cors"
|
||||
"github.com/gofiber/fiber/v2/middleware/favicon"
|
||||
"github.com/gofiber/fiber/v2/middleware/logger"
|
||||
recover "github.com/gofiber/fiber/v2/middleware/recover"
|
||||
|
||||
"prayertimes/pkg/prayer"
|
||||
@@ -40,14 +41,16 @@ func New(services Services) *fiber.App {
|
||||
})
|
||||
|
||||
app.Use(
|
||||
favicon.New(),
|
||||
recover.New(recover.Config{
|
||||
EnableStackTrace: true,
|
||||
}),
|
||||
favicon.New(),
|
||||
logger.New(),
|
||||
cors.New(),
|
||||
)
|
||||
|
||||
app.Get("/diyanet/prayertimes", cache.New(), func(ctx *fiber.Ctx) error {
|
||||
cacheHeader := fmt.Sprintf("max-age=%0f", (time.Hour * 24).Seconds())
|
||||
app.Get("/diyanet/prayertimes", func(ctx *fiber.Ctx) error {
|
||||
locationID := ctx.Query("location_id")
|
||||
|
||||
times, err := services.PrayerTimesProvider.Get(ctx.Context(), locationID)
|
||||
@@ -55,6 +58,8 @@ func New(services Services) *fiber.App {
|
||||
return err
|
||||
}
|
||||
|
||||
ctx.Response().Header.Add(fiber.HeaderCacheControl, cacheHeader)
|
||||
|
||||
return ctx.JSON(times)
|
||||
})
|
||||
|
||||
|
||||
@@ -0,0 +1,38 @@
|
||||
package database
|
||||
|
||||
import (
|
||||
"database/sql"
|
||||
"fmt"
|
||||
"net/url"
|
||||
|
||||
"github.com/doug-martin/goqu/v9"
|
||||
goqusqlite3 "github.com/doug-martin/goqu/v9/dialect/sqlite3"
|
||||
_ "modernc.org/sqlite"
|
||||
)
|
||||
|
||||
func init() {
|
||||
goqu.RegisterDialect("sqlite3", func() *goqu.SQLDialectOptions {
|
||||
do := goqusqlite3.DialectOptions()
|
||||
do.SupportsReturn = true
|
||||
return do
|
||||
}())
|
||||
}
|
||||
|
||||
func NewSqliteDB(filename string) (*goqu.Database, error) {
|
||||
pragmas := url.Values{
|
||||
"_pragma": {
|
||||
"journal_mode(WAL)",
|
||||
"foreign_keys(1)",
|
||||
"synchronous(NORMAL)",
|
||||
"busy_timeout(5000)",
|
||||
},
|
||||
}.Encode()
|
||||
dsn := fmt.Sprintf("%s?%s", filename, pragmas)
|
||||
|
||||
conn, err := sql.Open("sqlite", dsn)
|
||||
if err != nil {
|
||||
return nil, fmt.Errorf("failed to open database: %w", err)
|
||||
}
|
||||
|
||||
return goqu.New("sqlite3", conn), nil
|
||||
}
|
||||
Reference in New Issue
Block a user