@@ -2,68 +2,43 @@ package storage
|
||||
|
||||
import (
|
||||
"context"
|
||||
"database/sql"
|
||||
"embed"
|
||||
"errors"
|
||||
"time"
|
||||
|
||||
"git.unistack.org/unistack-org/pkgdash/internal/models"
|
||||
// "git.unistack.org/unistack-org/pkgdash/internal/storage/postgres"
|
||||
|
||||
"git.unistack.org/unistack-org/pkgdash/internal/storage/sqlite"
|
||||
pb "git.unistack.org/unistack-org/pkgdash/proto"
|
||||
"github.com/jmoiron/sqlx"
|
||||
)
|
||||
|
||||
//go:embed migrations
|
||||
var fs embed.FS
|
||||
|
||||
var storages = map[string]func(*sql.DB, embed.FS) interface{}{
|
||||
//"postgres": postgres.NewStorage(),
|
||||
"sqlite": sqlite.NewStorage(),
|
||||
func RegisterStorage(name string, fn func(*sqlx.DB) interface{}) {
|
||||
storages[name] = fn
|
||||
}
|
||||
|
||||
type contextKey string
|
||||
|
||||
var storeIdent = contextKey("store")
|
||||
|
||||
type Migrate interface {
|
||||
MigrateUp() error
|
||||
MigrateDown() error
|
||||
}
|
||||
var storages = map[string]func(*sqlx.DB) interface{}{}
|
||||
|
||||
type Storage interface {
|
||||
Migrate
|
||||
PackagesCreate(ctx context.Context, req *pb.PackagesCreateReq) error
|
||||
PackagesProcess(ctx context.Context, td time.Duration) ([]*models.Package, error)
|
||||
PackagesCreate(ctx context.Context, req *pb.PackagesCreateReq) (*models.Package, error)
|
||||
PackagesList(ctx context.Context, req *pb.PackagesListReq) ([]*models.Package, error)
|
||||
PackagesUpdate(ctx context.Context, req *pb.PackagesUpdateReq) error
|
||||
PackagesLookup(ctx context.Context, req *pb.PackagesLookupReq) (*models.Package, error)
|
||||
PackagesUpdate(ctx context.Context, req *pb.PackagesUpdateReq) (*models.Package, error)
|
||||
PackagesDelete(ctx context.Context, req *pb.PackagesDeleteReq) error
|
||||
CommentsCreate(ctx context.Context, req *pb.CommentsCreateReq) (*models.Comment, error)
|
||||
CommentsDelete(ctx context.Context, req *pb.CommentsDeleteReq) error
|
||||
CommentsList(ctx context.Context, req *pb.CommentsListReq) ([]*models.Comment, error)
|
||||
InsertButchModules(ctx context.Context, req []models.Module) ([]uint64, error)
|
||||
ModulesList(ctx context.Context, req *pb.ModulesListReq) ([]*models.Module, error)
|
||||
PackagesModulesCreate(ctx context.Context, pkg *models.Package, modules []*models.Module) error
|
||||
}
|
||||
|
||||
func NewStorage(name string, db *sql.DB) (Storage, error) {
|
||||
func NewStorage(name string, db *sqlx.DB) (Storage, error) {
|
||||
function, ok := storages[name]
|
||||
if !ok {
|
||||
return nil, errors.New("incorrect name store")
|
||||
}
|
||||
store := function(db, fs)
|
||||
store := function(db)
|
||||
database, ok := store.(Storage)
|
||||
if !ok {
|
||||
return nil, errors.New("dont implements interface Storage")
|
||||
}
|
||||
return database, nil
|
||||
}
|
||||
|
||||
func InContext(ctx context.Context, val Storage) context.Context {
|
||||
return context.WithValue(ctx, storeIdent, val)
|
||||
}
|
||||
|
||||
func FromContext(ctx context.Context) (Storage, error) {
|
||||
if store, ok := ctx.Value(storeIdent).(Storage); !ok {
|
||||
return nil, errors.New("empty store")
|
||||
} else {
|
||||
return store, nil
|
||||
}
|
||||
}
|
||||
|
Reference in New Issue
Block a user