mirror of
https://github.com/crawlab-team/crawlab.git
synced 2026-01-21 17:21:09 +01:00
feat: added modules
This commit is contained in:
118
core/ds/mongo.go
Normal file
118
core/ds/mongo.go
Normal file
@@ -0,0 +1,118 @@
|
||||
package ds
|
||||
|
||||
import (
|
||||
"github.com/crawlab-team/crawlab-db/generic"
|
||||
"github.com/crawlab-team/crawlab-db/mongo"
|
||||
"github.com/crawlab-team/crawlab/core/constants"
|
||||
"github.com/crawlab-team/crawlab/core/interfaces"
|
||||
"github.com/crawlab-team/crawlab/core/models/models"
|
||||
"github.com/crawlab-team/crawlab/core/models/service"
|
||||
"github.com/crawlab-team/crawlab/core/utils"
|
||||
utils2 "github.com/crawlab-team/crawlab/core/utils"
|
||||
"go.mongodb.org/mongo-driver/bson/primitive"
|
||||
mongo2 "go.mongodb.org/mongo-driver/mongo"
|
||||
"time"
|
||||
)
|
||||
|
||||
type MongoService struct {
|
||||
// dependencies
|
||||
modelSvc service.ModelService
|
||||
|
||||
// internals
|
||||
dc *models.DataCollection // models.DataCollection
|
||||
ds *models.DataSource // models.DataSource
|
||||
c *mongo2.Client
|
||||
db *mongo2.Database
|
||||
col *mongo.Col
|
||||
t time.Time
|
||||
}
|
||||
|
||||
func (svc *MongoService) Insert(records ...interface{}) (err error) {
|
||||
_, err = svc.col.InsertMany(records)
|
||||
return err
|
||||
}
|
||||
|
||||
func (svc *MongoService) List(query generic.ListQuery, opts *generic.ListOptions) (results []interface{}, err error) {
|
||||
var docs []models.Result
|
||||
if err := svc.col.Find(utils.GetMongoQuery(query), utils.GetMongoOpts(opts)).All(&docs); err != nil {
|
||||
return nil, err
|
||||
}
|
||||
for i := range docs {
|
||||
results = append(results, &docs[i])
|
||||
}
|
||||
return results, nil
|
||||
}
|
||||
|
||||
func (svc *MongoService) Count(query generic.ListQuery) (n int, err error) {
|
||||
return svc.col.Count(utils.GetMongoQuery(query))
|
||||
}
|
||||
|
||||
func NewDataSourceMongoService(colId primitive.ObjectID, dsId primitive.ObjectID) (svc2 interfaces.ResultService, err error) {
|
||||
// service
|
||||
svc := &MongoService{}
|
||||
|
||||
// dependency injection
|
||||
svc.modelSvc, err = service.GetService()
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
// data source
|
||||
if dsId.IsZero() {
|
||||
svc.ds = &models.DataSource{}
|
||||
} else {
|
||||
svc.ds, err = svc.modelSvc.GetDataSourceById(dsId)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
}
|
||||
|
||||
// data source defaults
|
||||
if svc.ds.Host == "" {
|
||||
svc.ds.Host = constants.DefaultHost
|
||||
}
|
||||
if svc.ds.Port == "" {
|
||||
svc.ds.Port = constants.DefaultMongoPort
|
||||
}
|
||||
|
||||
// data source password
|
||||
pwd, err := svc.modelSvc.GetPasswordById(svc.ds.Id)
|
||||
if err == nil {
|
||||
svc.ds.Password, err = utils.DecryptAES(pwd.Password)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
}
|
||||
|
||||
// data collection
|
||||
svc.dc, err = svc.modelSvc.GetDataCollectionById(colId)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
// mongo client
|
||||
svc.c, err = utils2.GetMongoClient(svc.ds)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
// mongo database
|
||||
svc.db = mongo.GetMongoDb(svc.ds.Database, mongo.WithDbClient(svc.c))
|
||||
|
||||
// mongo col
|
||||
svc.col = mongo.GetMongoColWithDb(svc.dc.Name, svc.db)
|
||||
|
||||
return svc, nil
|
||||
}
|
||||
|
||||
func (svc *MongoService) Index(fields []string) {
|
||||
// TODO: implement me
|
||||
}
|
||||
|
||||
func (svc *MongoService) SetTime(t time.Time) {
|
||||
svc.t = t
|
||||
}
|
||||
|
||||
func (svc *MongoService) GetTime() (t time.Time) {
|
||||
return svc.t
|
||||
}
|
||||
Reference in New Issue
Block a user