Update project structure and enhance frontend functionality
- Added a new AGENTS.md file to document the project structure and conventions. - Updated .gitignore to include node_modules and refined cursor rules. - Introduced new backend and frontend components for improved map interactions, including context menus and controls. - Enhanced API composables for better admin and authentication functionalities. - Refactored existing components for cleaner code and improved user experience. - Updated README.md to clarify production asset serving and user setup instructions.
This commit is contained in:
@@ -7,22 +7,23 @@ import (
|
||||
"strings"
|
||||
"time"
|
||||
|
||||
"github.com/andyleap/hnh-map/internal/app/store"
|
||||
"go.etcd.io/bbolt"
|
||||
)
|
||||
|
||||
var migrations = []func(tx *bbolt.Tx) error{
|
||||
func(tx *bbolt.Tx) error {
|
||||
if tx.Bucket([]byte("markers")) != nil {
|
||||
return tx.DeleteBucket([]byte("markers"))
|
||||
if tx.Bucket(store.BucketMarkers) != nil {
|
||||
return tx.DeleteBucket(store.BucketMarkers)
|
||||
}
|
||||
return nil
|
||||
},
|
||||
func(tx *bbolt.Tx) error {
|
||||
grids, err := tx.CreateBucketIfNotExists([]byte("grids"))
|
||||
grids, err := tx.CreateBucketIfNotExists(store.BucketGrids)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
tiles, err := tx.CreateBucketIfNotExists([]byte("tiles"))
|
||||
tiles, err := tx.CreateBucketIfNotExists(store.BucketTiles)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
@@ -51,22 +52,20 @@ var migrations = []func(tx *bbolt.Tx) error{
|
||||
})
|
||||
},
|
||||
func(tx *bbolt.Tx) error {
|
||||
b, err := tx.CreateBucketIfNotExists([]byte("config"))
|
||||
b, err := tx.CreateBucketIfNotExists(store.BucketConfig)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
return b.Put([]byte("title"), []byte("HnH Automapper Server"))
|
||||
},
|
||||
func(tx *bbolt.Tx) error {
|
||||
if tx.Bucket([]byte("markers")) != nil {
|
||||
return tx.DeleteBucket([]byte("markers"))
|
||||
}
|
||||
// No-op: markers deletion already in migration 0
|
||||
return nil
|
||||
},
|
||||
func(tx *bbolt.Tx) error {
|
||||
if tx.Bucket([]byte("tiles")) != nil {
|
||||
if tx.Bucket(store.BucketTiles) != nil {
|
||||
allTiles := map[string]map[string]TileData{}
|
||||
tiles := tx.Bucket([]byte("tiles"))
|
||||
tiles := tx.Bucket(store.BucketTiles)
|
||||
err := tiles.ForEach(func(k, v []byte) error {
|
||||
zoom := tiles.Bucket(k)
|
||||
zoomTiles := map[string]TileData{}
|
||||
@@ -82,11 +81,11 @@ var migrations = []func(tx *bbolt.Tx) error{
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
err = tx.DeleteBucket([]byte("tiles"))
|
||||
err = tx.DeleteBucket(store.BucketTiles)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
tiles, err = tx.CreateBucket([]byte("tiles"))
|
||||
tiles, err = tx.CreateBucket(store.BucketTiles)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
@@ -115,18 +114,16 @@ var migrations = []func(tx *bbolt.Tx) error{
|
||||
return nil
|
||||
},
|
||||
func(tx *bbolt.Tx) error {
|
||||
if tx.Bucket([]byte("markers")) != nil {
|
||||
return tx.DeleteBucket([]byte("markers"))
|
||||
}
|
||||
// No-op: markers deletion already in migration 0
|
||||
return nil
|
||||
},
|
||||
func(tx *bbolt.Tx) error {
|
||||
highest := uint64(0)
|
||||
maps, err := tx.CreateBucketIfNotExists([]byte("maps"))
|
||||
maps, err := tx.CreateBucketIfNotExists(store.BucketMaps)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
grids, err := tx.CreateBucketIfNotExists([]byte("grids"))
|
||||
grids, err := tx.CreateBucketIfNotExists(store.BucketGrids)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
@@ -138,6 +135,7 @@ var migrations = []func(tx *bbolt.Tx) error{
|
||||
return err
|
||||
}
|
||||
if _, ok := mapsFound[gd.Map]; !ok {
|
||||
mapsFound[gd.Map] = struct{}{}
|
||||
if uint64(gd.Map) > highest {
|
||||
highest = uint64(gd.Map)
|
||||
}
|
||||
@@ -157,7 +155,7 @@ var migrations = []func(tx *bbolt.Tx) error{
|
||||
return maps.SetSequence(highest + 1)
|
||||
},
|
||||
func(tx *bbolt.Tx) error {
|
||||
users := tx.Bucket([]byte("users"))
|
||||
users := tx.Bucket(store.BucketUsers)
|
||||
if users == nil {
|
||||
return nil
|
||||
}
|
||||
@@ -176,7 +174,7 @@ var migrations = []func(tx *bbolt.Tx) error{
|
||||
})
|
||||
},
|
||||
func(tx *bbolt.Tx) error {
|
||||
_, err := tx.CreateBucketIfNotExists([]byte("oauth_states"))
|
||||
_, err := tx.CreateBucketIfNotExists(store.BucketOAuthStates)
|
||||
return err
|
||||
},
|
||||
}
|
||||
@@ -184,7 +182,7 @@ var migrations = []func(tx *bbolt.Tx) error{
|
||||
// RunMigrations runs all pending migrations on the database.
|
||||
func RunMigrations(db *bbolt.DB) error {
|
||||
return db.Update(func(tx *bbolt.Tx) error {
|
||||
b, err := tx.CreateBucketIfNotExists([]byte("config"))
|
||||
b, err := tx.CreateBucketIfNotExists(store.BucketConfig)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user