refactor: integrated database services into task data insert

This commit is contained in:
Marvin Zhang
2024-10-08 18:41:36 +08:00
parent 7fb9fc7d9f
commit 4652d27e0a
12 changed files with 161 additions and 264 deletions

View File

@@ -0,0 +1,61 @@
package entity
type DatabaseMetadata struct {
Databases []Database `json:"databases"`
}
type Database struct {
Name string `json:"name"`
Tables []DatabaseTable `json:"tables"`
}
type DatabaseTable struct {
Name string `json:"name"`
Columns []DatabaseColumn `json:"columns"`
Indexes []DatabaseIndex `json:"indexes"`
}
type DatabaseColumn struct {
Name string `json:"name"`
Type string `json:"type"`
Primary bool `json:"primary,omitempty"`
NotNull bool `json:"not_null,omitempty"`
Key string `json:"key,omitempty"`
Default string `json:"default,omitempty"`
Extra string `json:"extra,omitempty"`
AutoIncrement bool `json:"auto_increment,omitempty"`
Children []DatabaseColumn `json:"children,omitempty"`
Hash string `json:"hash,omitempty"`
OriginalName string `json:"original_name,omitempty"`
Status string `json:"status,omitempty"`
}
type DatabaseIndex struct {
Name string `json:"name"`
Type string `json:"type,omitempty"`
Columns []DatabaseIndexColumn `json:"columns"`
Unique bool `json:"unique"`
Hash string `json:"hash,omitempty"`
OriginalName string `json:"original_name,omitempty"`
Status string `json:"status,omitempty"`
}
type DatabaseIndexColumn struct {
Name string `json:"name"`
Order int `json:"order"`
}
func (col *DatabaseIndexColumn) OrderString() string {
if col.Order < 0 {
return "DESC"
} else {
return "ASC"
}
}
type DatabaseQueryResults struct {
Columns []DatabaseColumn `json:"columns,omitempty"`
Rows []map[string]interface{} `json:"rows,omitempty"`
Output string `json:"output,omitempty"`
Error string `json:"error,omitempty"`
}

View File

@@ -0,0 +1,11 @@
package interfaces
import (
"go.mongodb.org/mongo-driver/bson/primitive"
)
type DatabaseRegistryService interface {
Start()
CheckStatus()
GetDatabaseService(id primitive.ObjectID) (res DatabaseService, err error)
}

View File

@@ -0,0 +1,27 @@
package interfaces
import (
"github.com/crawlab-team/crawlab/core/database/entity"
"github.com/crawlab-team/crawlab/core/models/models/v2"
"go.mongodb.org/mongo-driver/bson/primitive"
)
type DatabaseService interface {
TestConnection(id primitive.ObjectID) (err error)
GetMetadata(id primitive.ObjectID) (m *entity.DatabaseMetadata, err error)
GetMetadataAllDb(id primitive.ObjectID) (m *entity.DatabaseMetadata, err error)
CreateDatabase(id primitive.ObjectID, databaseName string) (err error)
DropDatabase(id primitive.ObjectID, databaseName string) (err error)
GetTableMetadata(id primitive.ObjectID, databaseName, tableName string) (table *entity.DatabaseTable, err error)
CreateTable(id primitive.ObjectID, databaseName string, table *entity.DatabaseTable) (err error)
ModifyTable(id primitive.ObjectID, databaseName string, table *entity.DatabaseTable) (err error)
DropTable(id primitive.ObjectID, databaseName, tableName string) (err error)
RenameTable(id primitive.ObjectID, databaseName, oldTableName, newTableName string) (err error)
GetColumnTypes(query string) (types []string)
ReadRows(id primitive.ObjectID, databaseName, tableName string, filter map[string]interface{}, skip, limit int) ([]map[string]interface{}, int64, error)
CreateRow(id primitive.ObjectID, databaseName, tableName string, row map[string]interface{}) error
UpdateRow(id primitive.ObjectID, databaseName, tableName string, filter map[string]interface{}, update map[string]interface{}) error
DeleteRow(id primitive.ObjectID, databaseName, tableName string, filter map[string]interface{}) error
Query(id primitive.ObjectID, databaseName, query string) (results *entity.DatabaseQueryResults, err error)
GetCurrentMetric(id primitive.ObjectID) (m *models.DatabaseMetricV2, err error)
}

View File

@@ -0,0 +1,15 @@
package database
import (
"github.com/crawlab-team/crawlab/core/database/interfaces"
)
var serviceInstance interfaces.DatabaseRegistryService
func SetDatabaseRegistryService(svc interfaces.DatabaseRegistryService) {
serviceInstance = svc
}
func GetDatabaseRegistryService() interfaces.DatabaseRegistryService {
return serviceInstance
}