2025-03-02 17:41:18 +08:00
|
|
|
package impl
|
|
|
|
|
|
|
|
import (
|
|
|
|
"context"
|
|
|
|
|
|
|
|
"gitlab.com/go-course-project/go17/devcloud-mini/cmdb/apps/resource"
|
2025-03-09 10:05:28 +08:00
|
|
|
"go.mongodb.org/mongo-driver/bson"
|
|
|
|
"go.mongodb.org/mongo-driver/mongo/options"
|
2025-03-02 17:41:18 +08:00
|
|
|
)
|
|
|
|
|
2025-03-09 10:05:28 +08:00
|
|
|
func (s *ResourceServiceImpl) Search(ctx context.Context, in *resource.SearchRequest) (*resource.ResourceSet, error) {
|
|
|
|
set := resource.NewResourceSet()
|
|
|
|
filter := bson.M{}
|
|
|
|
|
|
|
|
if in.Keywords != "" {
|
|
|
|
filter["name"] = bson.M{"$regex": in.Keywords, "$options": "im"}
|
|
|
|
}
|
|
|
|
if in.Type != nil {
|
|
|
|
filter["type"] = *in.Type
|
|
|
|
}
|
|
|
|
for k, v := range in.Tag {
|
|
|
|
filter[k] = v
|
|
|
|
}
|
|
|
|
|
|
|
|
// mongodb query
|
|
|
|
result, err := s.col.Find(ctx, filter, options.Find().SetLimit(in.PageSize).SetSkip(in.Skip()))
|
|
|
|
if err != nil {
|
|
|
|
return nil, err
|
|
|
|
}
|
|
|
|
for result.Next(ctx) {
|
|
|
|
res := &resource.Resource{}
|
|
|
|
if err := result.Decode(res); err != nil {
|
|
|
|
return nil, err
|
|
|
|
}
|
|
|
|
set.Items = append(set.Items, res)
|
|
|
|
}
|
|
|
|
|
|
|
|
return set, nil
|
2025-03-02 17:41:18 +08:00
|
|
|
}
|
|
|
|
|
|
|
|
func (s *ResourceServiceImpl) Save(ctx context.Context, in *resource.Resource) (*resource.Resource, error) {
|
|
|
|
if err := in.Validate(); err != nil {
|
|
|
|
return nil, err
|
|
|
|
}
|
|
|
|
|
|
|
|
// 保持数据, 需要从ioc里面获取一个mongodb实例
|
|
|
|
_, err := s.col.InsertOne(ctx, in)
|
|
|
|
if err != nil {
|
|
|
|
return nil, err
|
|
|
|
}
|
|
|
|
|
|
|
|
return in, nil
|
|
|
|
}
|
|
|
|
|
2025-03-09 10:05:28 +08:00
|
|
|
// $in
|
|
|
|
func (s *ResourceServiceImpl) DeleteResource(ctx context.Context, in *resource.DeleteResourceRequest) error {
|
|
|
|
_, err := s.col.DeleteMany(ctx, bson.M{"_id": bson.M{"$in": in.ResourceIds}})
|
|
|
|
return err
|
2025-03-02 17:41:18 +08:00
|
|
|
}
|