0
storage/migrations/postgres/.gitkeep
Normal file
0
storage/migrations/postgres/.gitkeep
Normal file
0
storage/migrations/sqlite/.gitkeep
Normal file
0
storage/migrations/sqlite/.gitkeep
Normal file
3
storage/models.go
Normal file
3
storage/models.go
Normal file
@@ -0,0 +1,3 @@
|
||||
package storage
|
||||
|
||||
// TODO: create models
|
75
storage/postgres/postgres.go
Normal file
75
storage/postgres/postgres.go
Normal file
@@ -0,0 +1,75 @@
|
||||
// go:build postgres
|
||||
|
||||
package postgres
|
||||
|
||||
import (
|
||||
"database/sql"
|
||||
"embed"
|
||||
|
||||
"github.com/golang-migrate/migrate/v4"
|
||||
"github.com/golang-migrate/migrate/v4/database/postgres"
|
||||
"github.com/golang-migrate/migrate/v4/source/iofs"
|
||||
)
|
||||
|
||||
type PostgresStorage struct {
|
||||
db *sql.DB
|
||||
fs embed.FS
|
||||
}
|
||||
|
||||
func NewStoragePostgres(fs embed.FS) func(*sql.DB) (interface{}, error) {
|
||||
return func(db *sql.DB) (interface{}, error) {
|
||||
return &PostgresStorage{db: db, fs: fs}, nil
|
||||
}
|
||||
}
|
||||
|
||||
func (s *PostgresStorage) MigrateUp() error {
|
||||
driver, err := postgres.WithInstance(s.db, &postgres.Config{
|
||||
MigrationsTable: postgres.DefaultMigrationsTable,
|
||||
DatabaseName: "template",
|
||||
})
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
source, err := iofs.New(s.fs, "migrations/postgres")
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
// TODO: pass own logger
|
||||
m, err := migrate.NewWithInstance("fs", source, "template", driver)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
if err = m.Up(); err != nil && err != migrate.ErrNoChange {
|
||||
return err
|
||||
}
|
||||
|
||||
return nil
|
||||
}
|
||||
|
||||
func (s *PostgresStorage) MigrateDown() error {
|
||||
driver, err := postgres.WithInstance(s.db, &postgres.Config{
|
||||
MigrationsTable: postgres.DefaultMigrationsTable,
|
||||
DatabaseName: "template",
|
||||
})
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
source, err := iofs.New(s.fs, "migrations/postgres")
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
// TODO: pass own logger
|
||||
m, err := migrate.NewWithInstance("fs", source, "template", driver)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
if err = m.Down(); err != nil && err != migrate.ErrNoChange {
|
||||
return err
|
||||
}
|
||||
|
||||
return nil
|
||||
}
|
5
storage/postgres/query.go
Normal file
5
storage/postgres/query.go
Normal file
@@ -0,0 +1,5 @@
|
||||
package postgres
|
||||
|
||||
const (
|
||||
// TODO: fill queries
|
||||
)
|
5
storage/sqlite/query.go
Normal file
5
storage/sqlite/query.go
Normal file
@@ -0,0 +1,5 @@
|
||||
package sqlite
|
||||
|
||||
const (
|
||||
// TODO: fill queries
|
||||
)
|
75
storage/sqlite/sqlite.go
Normal file
75
storage/sqlite/sqlite.go
Normal file
@@ -0,0 +1,75 @@
|
||||
// go:build sqlite
|
||||
|
||||
package sqlite
|
||||
|
||||
import (
|
||||
"database/sql"
|
||||
"embed"
|
||||
|
||||
"github.com/golang-migrate/migrate/v4"
|
||||
"github.com/golang-migrate/migrate/v4/database/sqlite"
|
||||
"github.com/golang-migrate/migrate/v4/source/iofs"
|
||||
)
|
||||
|
||||
type SqliteStorage struct {
|
||||
db *sql.DB
|
||||
fs embed.FS
|
||||
}
|
||||
|
||||
func NewStorageSqlite(fs embed.FS) func(*sql.DB) (interface{}, error) {
|
||||
return func(db *sql.DB) (interface{}, error) {
|
||||
return &SqliteStorage{db: db, fs: fs}, nil
|
||||
}
|
||||
}
|
||||
|
||||
func (s *SqliteStorage) MigrateUp() error {
|
||||
driver, err := sqlite.WithInstance(s.db, &sqlite.Config{
|
||||
MigrationsTable: sqlite.DefaultMigrationsTable,
|
||||
DatabaseName: "template",
|
||||
})
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
source, err := iofs.New(s.fs, "migrations/sqlite")
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
// TODO: pass own logger
|
||||
m, err := migrate.NewWithInstance("fs", source, "template", driver)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
if err = m.Up(); err != nil && err != migrate.ErrNoChange {
|
||||
return err
|
||||
}
|
||||
|
||||
return nil
|
||||
}
|
||||
|
||||
func (s *SqliteStorage) MigrateDown() error {
|
||||
driver, err := sqlite.WithInstance(s.db, &sqlite.Config{
|
||||
MigrationsTable: sqlite.DefaultMigrationsTable,
|
||||
DatabaseName: "template",
|
||||
})
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
source, err := iofs.New(s.fs, "migrations/sqlite")
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
// TODO: pass own logger
|
||||
m, err := migrate.NewWithInstance("fs", source, "template", driver)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
if err = m.Down(); err != nil && err != migrate.ErrNoChange {
|
||||
return err
|
||||
}
|
||||
|
||||
return nil
|
||||
}
|
29
storage/storage.go
Normal file
29
storage/storage.go
Normal file
@@ -0,0 +1,29 @@
|
||||
package storage
|
||||
|
||||
import (
|
||||
"context"
|
||||
"database/sql"
|
||||
"embed"
|
||||
|
||||
store "go.unistack.org/cms-service/storage"
|
||||
"go.unistack.org/cms-template/storage/sqlite"
|
||||
)
|
||||
|
||||
//go:embed all:migrations
|
||||
var fs embed.FS
|
||||
|
||||
var storages = store.NewStorageInterface()
|
||||
|
||||
func init() {
|
||||
storages.RegisterStorage("sqlite", sqlite.NewStorageSqlite(fs))
|
||||
}
|
||||
|
||||
type Storage interface {
|
||||
Auth(ctx context.Context, login, passw string) error
|
||||
Delete(ctx context.Context, uuid string) error
|
||||
store.Migrator
|
||||
}
|
||||
|
||||
func NewStorage(name string, db *sql.DB) (interface{}, error) {
|
||||
return storages.NewStorage(name, db)
|
||||
}
|
Reference in New Issue
Block a user