184 lines
3.9 KiB
Go
184 lines
3.9 KiB
Go
![]() |
package mongos
|
||
|
|
||
|
import (
|
||
|
"context"
|
||
|
"errors"
|
||
|
"github.com/Pena-Co-Ltd/amocrm_templategen_back/dal/model"
|
||
|
"go.mongodb.org/mongo-driver/bson"
|
||
|
"go.mongodb.org/mongo-driver/bson/primitive"
|
||
|
"go.mongodb.org/mongo-driver/mongo"
|
||
|
"go.uber.org/zap"
|
||
|
"time"
|
||
|
)
|
||
|
|
||
|
type TemplateGroup struct {
|
||
|
coll *mongo.Collection
|
||
|
logger *zap.Logger
|
||
|
}
|
||
|
|
||
|
func InitTemplateGroup(db *mongo.Database, logger *zap.Logger) *TemplateGroup {
|
||
|
return &TemplateGroup{coll: db.Collection("template_group"), logger: logger}
|
||
|
}
|
||
|
|
||
|
func (d *TemplateGroup) Insert(ctx context.Context, record *model.TemplateGroup) (string, error) {
|
||
|
now := time.Now()
|
||
|
record.CreatedAt = now
|
||
|
record.UpdatedAt = now
|
||
|
|
||
|
if record.UserID == "" {
|
||
|
err := errors.New("user_id required")
|
||
|
d.logger.Error("ErrorInsertTemplateGroup", zap.Error(err))
|
||
|
return "", err
|
||
|
}
|
||
|
|
||
|
if record.Name == "" {
|
||
|
err := errors.New("name required")
|
||
|
d.logger.Error("ErrorInsertTemplateGroup", zap.Error(err))
|
||
|
return "", err
|
||
|
}
|
||
|
|
||
|
result, err := d.coll.InsertOne(ctx, record)
|
||
|
|
||
|
if err != nil {
|
||
|
d.logger.Error("ErrorInsertTemplateGroup", zap.Error(err))
|
||
|
return "", err
|
||
|
}
|
||
|
|
||
|
id := result.InsertedID.(primitive.ObjectID).Hex()
|
||
|
|
||
|
d.logger.Info("InfoInsertTemplateGroup", zap.String("_id", id))
|
||
|
|
||
|
return id, nil
|
||
|
}
|
||
|
|
||
|
func (d *TemplateGroup) GetByID(ctx context.Context, id string) (*model.TemplateGroup, error) {
|
||
|
objID, err := primitive.ObjectIDFromHex(id)
|
||
|
|
||
|
if err != nil {
|
||
|
d.logger.Error("ErrorGetTemplateGroup", zap.Error(err))
|
||
|
return nil, err
|
||
|
}
|
||
|
|
||
|
filter := bson.M{"_id": objID}
|
||
|
|
||
|
var result model.TemplateGroup
|
||
|
err = d.coll.FindOne(ctx, filter).Decode(&result)
|
||
|
|
||
|
if err == mongo.ErrNoDocuments {
|
||
|
return nil, nil
|
||
|
} else {
|
||
|
if err != nil {
|
||
|
d.logger.Error("ErrorGetTemplateGroup", zap.Error(err))
|
||
|
return nil, err
|
||
|
}
|
||
|
}
|
||
|
|
||
|
d.logger.Info("ErrorGetTemplateGroup", zap.String("id", result.ID))
|
||
|
|
||
|
return &result, nil
|
||
|
}
|
||
|
|
||
|
func (d *TemplateGroup) GetListByUserID(ctx context.Context, userID string) ([]model.TemplateGroup, error) {
|
||
|
if userID == "" {
|
||
|
err := errors.New("user_id required")
|
||
|
d.logger.Error("ErrorGetListTemplateGroup")
|
||
|
return nil, err
|
||
|
}
|
||
|
|
||
|
filter := bson.M{"user_id": userID}
|
||
|
|
||
|
var result []model.TemplateGroup
|
||
|
|
||
|
cur, err := d.coll.Find(ctx, filter)
|
||
|
|
||
|
if err == mongo.ErrNoDocuments {
|
||
|
return nil, nil
|
||
|
} else {
|
||
|
if err != nil {
|
||
|
d.logger.Error("ErrorGetTemplateGroup", zap.Error(err))
|
||
|
return nil, err
|
||
|
}
|
||
|
}
|
||
|
|
||
|
err = cur.All(ctx, &result)
|
||
|
|
||
|
if err != nil {
|
||
|
d.logger.Error("ErrorGetListTemplateGroup", zap.Error(err))
|
||
|
return nil, err
|
||
|
}
|
||
|
|
||
|
d.logger.Info("InfoGetListTemplateGroup")
|
||
|
|
||
|
return result, err
|
||
|
}
|
||
|
|
||
|
func (d *TemplateGroup) Update(ctx context.Context, record *model.TemplateGroup) error {
|
||
|
objID, err := primitive.ObjectIDFromHex(record.ID)
|
||
|
|
||
|
if err != nil {
|
||
|
d.logger.Error("ErrorUpdateTemplateGroup", zap.Error(err))
|
||
|
return err
|
||
|
}
|
||
|
|
||
|
filter := bson.M{"_id": objID}
|
||
|
|
||
|
if record.UserID != "" {
|
||
|
filter["user_id"] = record.UserID
|
||
|
}
|
||
|
|
||
|
update := bson.M{"updated_at": time.Now()}
|
||
|
|
||
|
if record.Name != "" {
|
||
|
update["name"] = record.Name
|
||
|
}
|
||
|
|
||
|
_, err = d.coll.UpdateOne(ctx, filter, bson.D{{"$set", update}})
|
||
|
|
||
|
if err != nil {
|
||
|
d.logger.Error("ErrorUpdateTemplateGroup")
|
||
|
return err
|
||
|
}
|
||
|
|
||
|
d.logger.Info("InfoUpdateTemplateGroup", zap.String("_id", record.ID))
|
||
|
|
||
|
return nil
|
||
|
}
|
||
|
|
||
|
func (d *TemplateGroup) Delete(ctx context.Context, id string) error {
|
||
|
objID, err := primitive.ObjectIDFromHex(id)
|
||
|
|
||
|
if err != nil {
|
||
|
d.logger.Error("ErrorDeleteTemplateGroup", zap.Error(err))
|
||
|
return err
|
||
|
}
|
||
|
|
||
|
filter := bson.M{"_id": objID}
|
||
|
_, err = d.coll.DeleteOne(ctx, filter)
|
||
|
|
||
|
if err != nil {
|
||
|
d.logger.Error("ErrorDeleteTemplateGroup", zap.Error(err))
|
||
|
return err
|
||
|
}
|
||
|
|
||
|
return nil
|
||
|
}
|
||
|
|
||
|
func (d *TemplateGroup) DeleteByUserID(ctx context.Context, userID string) error {
|
||
|
if userID == "" {
|
||
|
err := errors.New("user_id required")
|
||
|
d.logger.Error("ErrorDeleteTemplateGroup", zap.Error(err))
|
||
|
return err
|
||
|
}
|
||
|
|
||
|
filter := bson.M{"user_id": userID}
|
||
|
|
||
|
_, err := d.coll.DeleteMany(ctx, filter)
|
||
|
|
||
|
if err != nil {
|
||
|
d.logger.Error("ErrorDeleteTemplateGroup", zap.Error(err))
|
||
|
return err
|
||
|
}
|
||
|
|
||
|
return nil
|
||
|
}
|