Implement Database Migrations (#12)

* feat: enhance modularity by relocating core packages

* refactor: move chart components to dashboard package

* refactor: restructure database access layer

* refactor: rename credential descriptor to credentials for clarity

* feat: enhance development environment configuration for database interactions

* feat: integrate go-task for database migrations

* feat: introduce middleware for market data and WebAuthn
This commit is contained in:
2025-05-29 15:07:20 -04:00
committed by GitHub
parent 7fdfd5f570
commit 786fef8399
93 changed files with 2036 additions and 1046 deletions

View File

@@ -4,19 +4,63 @@
package main
import (
"context"
"fmt"
"net/http"
"github.com/labstack/echo/v4"
"github.com/sonr-io/motr/pkg/database"
"github.com/sonr-io/motr/pkg/session"
"github.com/sonr-io/motr/middleware/database"
"github.com/sonr-io/motr/middleware/marketapi"
"github.com/sonr-io/motr/middleware/session"
"github.com/sonr-io/motr/routes"
"github.com/syumai/workers"
"github.com/syumai/workers/cloudflare/cron"
_ "github.com/syumai/workers/cloudflare/d1"
)
func main() {
e := echo.New()
e.Use(session.Middleware(), database.Middleware())
// ╭──────────────────────────────────────────────────╮
// │ Initialization │
// ╰──────────────────────────────────────────────────╯
// Setup the HTTP handler
func loadHandler() http.Handler {
e := echo.New()
e.Use(session.Middleware(), database.Middleware(), marketapi.Middleware())
routes.SetupViews(e)
routes.SetupPartials(e)
workers.Serve(e)
return e
}
// Setup the cron task
func loadTask() cron.Task {
return func(ctx context.Context) error {
e, err := cron.NewEvent(ctx)
if err != nil {
return err
}
fmt.Println(e.ScheduledTime.Unix())
return nil
}
}
// ╭─────────────────────────────────────────────────╮
// │ Main Function │
// ╰─────────────────────────────────────────────────╯
func main() {
// Setup CRON jobs
e := loadHandler()
t := loadTask()
// Configure Worker
workers.ServeNonBlock(e)
cron.ScheduleTaskNonBlock(t)
workers.Ready()
// Block until handler/task is done
select {
case <-workers.Done():
case <-cron.Done():
}
}

View File

@@ -16,17 +16,31 @@ port = 4242
[observability]
enabled = true
[triggers]
crons = ["0 */1 * * *"]
[[d1_databases]]
binding = "DB" # available in your Worker on env.DB
database_name = "motr-controller-db"
database_id = "872a4b08-7e07-4978-b227-5b60940238ed"
binding = "ACTIVITY_DB"
database_name = "motr-activity"
database_id = "a7ccb4bb-c529-4f42-8029-92564a3aecb8"
[[d1_databases]]
binding = "NETWORK_DB"
database_name = "motr-network"
database_id = "acb75499-3502-4052-9604-263a913e077a"
[[d1_databases]]
binding = "USERS_DB"
database_name = "motr-users"
database_id = "8ed4d399-5932-419c-b92f-9c20d7a36ad2"
[[kv_namespaces]]
binding = "SESSIONS" # available in your Worker on env.KV
binding = "SESSIONS_KV"
id = "ea5de66fcfc14b5eba170395e29432ee"
[[kv_namespaces]]
binding = "HANDLES" # available in your Worker on env.KV
binding = "HANDLES_KV"
id = "271d47087a8842b2aac5ee79cf7bb203"
[[r2_buckets]]

View File

@@ -4,20 +4,64 @@
package main
import (
"context"
"fmt"
"net/http"
"github.com/labstack/echo/v4"
"github.com/sonr-io/motr/pkg/database"
"github.com/sonr-io/motr/pkg/session"
"github.com/sonr-io/motr/middleware/database"
"github.com/sonr-io/motr/middleware/session"
"github.com/sonr-io/motr/middleware/sonrapi"
"github.com/sonr-io/motr/middleware/webauthn"
"github.com/sonr-io/motr/routes"
"github.com/syumai/workers"
"github.com/syumai/workers/cloudflare/cron"
_ "github.com/syumai/workers/cloudflare/d1"
)
func main() {
e := echo.New()
e.Use(session.Middleware(), database.Middleware())
// ╭──────────────────────────────────────────────────╮
// │ Initialization │
// ╰──────────────────────────────────────────────────╯
// Setup the HTTP handler
func loadHandler() http.Handler {
e := echo.New()
e.Use(session.Middleware(), database.Middleware(), sonrapi.Middleware(), webauthn.Middleware())
routes.SetupViews(e)
routes.SetupPartials(e)
workers.Serve(e)
return e
}
// Setup the cron task
func loadTask() cron.Task {
return func(ctx context.Context) error {
e, err := cron.NewEvent(ctx)
if err != nil {
return err
}
fmt.Println(e.ScheduledTime.Unix())
return nil
}
}
// ╭─────────────────────────────────────────────────╮
// │ Main Function │
// ╰─────────────────────────────────────────────────╯
func main() {
// Setup CRON jobs
e := loadHandler()
t := loadTask()
// Configure Worker
workers.ServeNonBlock(e)
cron.ScheduleTaskNonBlock(t)
workers.Ready()
// Block until handler/task is done
select {
case <-workers.Done():
case <-cron.Done():
}
}

View File

@@ -16,17 +16,30 @@ port = 6969
[observability]
enabled = true
[triggers]
crons = ["0 */1 * * *"]
[[d1_databases]]
binding = "DB" # available in your Worker on env.DB
database_name = "motr-controller-db"
database_id = "872a4b08-7e07-4978-b227-5b60940238ed"
binding = "ACTIVITY_DB"
database_name = "motr-activity"
database_id = "a7ccb4bb-c529-4f42-8029-92564a3aecb8"
[[d1_databases]]
binding = "NETWORK_DB"
database_name = "motr-network"
database_id = "acb75499-3502-4052-9604-263a913e077a"
[[d1_databases]]
binding = "USERS_DB"
database_name = "motr-users"
database_id = "8ed4d399-5932-419c-b92f-9c20d7a36ad2"
[[kv_namespaces]]
binding = "SESSIONS" # available in your Worker on env.KV
binding = "SESSIONS_KV"
id = "ea5de66fcfc14b5eba170395e29432ee"
[[kv_namespaces]]
binding = "HANDLES" # available in your Worker on env.KV
binding = "HANDLES_KV"
id = "271d47087a8842b2aac5ee79cf7bb203"
[[r2_buckets]]