2022-07-28 15:00:43 +00:00
|
|
|
package mongos
|
|
|
|
|
|
|
|
import (
|
|
|
|
"context"
|
|
|
|
"errors"
|
2022-09-15 13:53:55 +00:00
|
|
|
"github.com/Pena-Co-Ltd/amocrm_templategen_back/dal/model"
|
2022-07-28 15:00:43 +00:00
|
|
|
"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 GDisk struct {
|
|
|
|
coll *mongo.Collection
|
|
|
|
logger *zap.Logger
|
|
|
|
}
|
|
|
|
|
|
|
|
func InitGDisk(db *mongo.Database, logger *zap.Logger) *GDisk {
|
|
|
|
return &GDisk{coll: db.Collection("gDisk"), logger: logger}
|
|
|
|
}
|
|
|
|
|
|
|
|
func (d *GDisk) InsertOrUpdate(ctx context.Context, record *model.GDisk) (string, error) {
|
2022-08-22 04:23:47 +00:00
|
|
|
record.CreatedAt = time.Now()
|
2022-09-15 13:53:55 +00:00
|
|
|
record.UpdatedAt = record.CreatedAt
|
2022-08-22 04:23:47 +00:00
|
|
|
|
2022-09-15 13:53:55 +00:00
|
|
|
var found *model.GDisk
|
|
|
|
var err error
|
|
|
|
|
|
|
|
if record.ID != "" {
|
|
|
|
found, err = d.GetByID(ctx, record.ID)
|
|
|
|
} else if record.Email != "" {
|
|
|
|
found, err = d.GetByEmail(ctx, record.Email)
|
|
|
|
} else {
|
|
|
|
err = errors.New("got empty id and email")
|
2022-07-28 15:00:43 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
if err != nil {
|
2022-09-15 13:53:55 +00:00
|
|
|
d.logger.Error("ErrorInsertOrUpdateGDisk", zap.Error(err))
|
2022-07-28 15:00:43 +00:00
|
|
|
return "", err
|
|
|
|
}
|
|
|
|
|
|
|
|
if found == nil {
|
|
|
|
// Set default TemplateFolder && SaveFolder
|
|
|
|
if record.TemplateFolder == "" {
|
|
|
|
record.TemplateFolder = "templategen/templates"
|
|
|
|
}
|
|
|
|
if record.SaveFolder == "" {
|
|
|
|
record.SaveFolder = "templategen/saved"
|
|
|
|
}
|
|
|
|
|
|
|
|
result, err := d.coll.InsertOne(ctx, record)
|
|
|
|
if err != nil {
|
|
|
|
d.logger.Error("ErrorInsertOrUpdateGDisk", zap.Error(err))
|
|
|
|
return "", err
|
|
|
|
}
|
|
|
|
|
|
|
|
return result.InsertedID.(primitive.ObjectID).Hex(), nil
|
|
|
|
}
|
|
|
|
|
|
|
|
record.CreatedAt = found.CreatedAt
|
|
|
|
|
|
|
|
err = d.Update(ctx, record)
|
|
|
|
if err != nil {
|
|
|
|
d.logger.Error("ErrorInsertOrUpdateGDisk", zap.Error(err))
|
|
|
|
return "", err
|
|
|
|
}
|
|
|
|
|
|
|
|
return found.ID, nil
|
|
|
|
}
|
|
|
|
|
2022-09-15 13:53:55 +00:00
|
|
|
func (d *GDisk) GetByID(ctx context.Context, id string) (*model.GDisk, error) {
|
|
|
|
objID, err := primitive.ObjectIDFromHex(id)
|
|
|
|
if err != nil {
|
|
|
|
d.logger.Error("ErrorGetGDisk", zap.Error(err))
|
|
|
|
return nil, err
|
2022-07-28 15:00:43 +00:00
|
|
|
}
|
|
|
|
|
2022-09-15 13:53:55 +00:00
|
|
|
filter := bson.M{"_id": objID, "is_deleted": false}
|
2022-07-28 15:00:43 +00:00
|
|
|
|
|
|
|
var result model.GDisk
|
|
|
|
|
2022-09-15 13:53:55 +00:00
|
|
|
err = d.coll.FindOne(ctx, filter).Decode(&result)
|
2022-07-28 15:00:43 +00:00
|
|
|
|
2022-09-15 13:53:55 +00:00
|
|
|
if err == mongo.ErrNoDocuments {
|
|
|
|
return nil, nil
|
|
|
|
} else {
|
|
|
|
if err != nil {
|
|
|
|
d.logger.Error("ErrorGetGDisk", zap.Error(err))
|
|
|
|
return nil, err
|
2022-07-28 15:00:43 +00:00
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2022-09-15 13:53:55 +00:00
|
|
|
d.logger.Info("InfoGetGDisk", zap.String("id", result.ID))
|
|
|
|
return &result, nil
|
2022-07-28 15:00:43 +00:00
|
|
|
}
|
|
|
|
|
2022-09-15 13:53:55 +00:00
|
|
|
func (d *GDisk) GetByEmail(ctx context.Context, email string) (*model.GDisk, error) {
|
|
|
|
filter := bson.M{"email": email, "is_deleted": false}
|
2022-07-28 15:00:43 +00:00
|
|
|
|
|
|
|
var result model.GDisk
|
|
|
|
|
|
|
|
err := d.coll.FindOne(ctx, filter).Decode(&result)
|
|
|
|
|
|
|
|
if err == mongo.ErrNoDocuments {
|
|
|
|
return nil, nil
|
|
|
|
} else {
|
|
|
|
if err != nil {
|
|
|
|
d.logger.Error("ErrorGetGDisk", zap.Error(err))
|
|
|
|
return nil, err
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
d.logger.Info("InfoGetGDisk", zap.String("id", result.ID))
|
|
|
|
return &result, nil
|
|
|
|
}
|
|
|
|
|
2022-09-15 13:53:55 +00:00
|
|
|
func (d *GDisk) GetListByUserID(ctx context.Context, userID string) ([]model.GDisk, error) {
|
|
|
|
filter := bson.M{"user_id": userID, "is_deleted": false}
|
|
|
|
|
|
|
|
var result []model.GDisk
|
|
|
|
|
|
|
|
cur, err := d.coll.Find(ctx, filter)
|
|
|
|
|
|
|
|
if err == mongo.ErrNoDocuments {
|
|
|
|
return nil, nil
|
|
|
|
} else {
|
|
|
|
if err != nil {
|
|
|
|
d.logger.Error("ErrorGetListGDisk", zap.Error(err))
|
|
|
|
return nil, err
|
|
|
|
}
|
2022-07-28 15:00:43 +00:00
|
|
|
}
|
|
|
|
|
2022-09-15 13:53:55 +00:00
|
|
|
err = cur.All(ctx, &result)
|
|
|
|
if err != nil {
|
|
|
|
d.logger.Error("ErrorGetListGDisk", zap.Error(err))
|
|
|
|
return nil, err
|
|
|
|
}
|
|
|
|
|
|
|
|
d.logger.Info("InfoGetListGDisk")
|
|
|
|
return result, nil
|
|
|
|
}
|
|
|
|
|
|
|
|
func (d *GDisk) Update(ctx context.Context, record *model.GDisk) error {
|
2022-07-28 15:00:43 +00:00
|
|
|
filter := bson.M{"is_deleted": false}
|
|
|
|
|
|
|
|
if record.ID != "" {
|
2022-08-10 13:53:34 +00:00
|
|
|
objID, err := primitive.ObjectIDFromHex(record.ID)
|
|
|
|
|
|
|
|
if err != nil {
|
|
|
|
d.logger.Error("ErrorUpdateGDisk", zap.Error(err))
|
|
|
|
return err
|
|
|
|
}
|
|
|
|
filter["_id"] = objID
|
2022-09-15 13:53:55 +00:00
|
|
|
} else if record.Email != "" {
|
|
|
|
filter["email"] = record.Email
|
|
|
|
} else {
|
|
|
|
err := errors.New("got empty id and email")
|
|
|
|
d.logger.Error("ErrorUpdateGDisk", zap.Error(err))
|
|
|
|
return err
|
|
|
|
}
|
2022-08-10 13:53:34 +00:00
|
|
|
|
2022-09-15 13:53:55 +00:00
|
|
|
update := bson.M{"updated_at": time.Now()}
|
|
|
|
|
2022-10-11 10:07:29 +00:00
|
|
|
if record.Name != "" {
|
|
|
|
update["name"] = record.Name
|
|
|
|
}
|
|
|
|
|
2022-09-15 13:53:55 +00:00
|
|
|
if record.DisplayName != "" {
|
|
|
|
update["display_name"] = record.DisplayName
|
2022-07-28 15:00:43 +00:00
|
|
|
}
|
|
|
|
|
2022-09-15 13:53:55 +00:00
|
|
|
if record.Email != "" {
|
|
|
|
update["email"] = record.Email
|
2022-07-28 15:00:43 +00:00
|
|
|
}
|
|
|
|
|
2022-09-15 13:53:55 +00:00
|
|
|
if record.PhotoLink != "" {
|
|
|
|
update["photo_link"] = record.PhotoLink
|
|
|
|
}
|
2022-07-28 15:00:43 +00:00
|
|
|
|
|
|
|
if record.AccessToken != "" {
|
|
|
|
update["access_token"] = record.AccessToken
|
|
|
|
}
|
|
|
|
|
2022-09-15 13:53:55 +00:00
|
|
|
if record.RefreshToken != "" {
|
|
|
|
update["refresh_token"] = record.RefreshToken
|
|
|
|
}
|
|
|
|
|
2022-07-28 15:00:43 +00:00
|
|
|
if !record.ExpiresIn.IsZero() {
|
|
|
|
update["expires_in"] = record.ExpiresIn
|
|
|
|
}
|
|
|
|
|
|
|
|
if record.TokenType != "" {
|
|
|
|
update["token_type"] = record.TokenType
|
|
|
|
}
|
|
|
|
|
2022-10-11 10:07:29 +00:00
|
|
|
if record.DefaultFolder != "" {
|
|
|
|
update["default_folder"] = record.DefaultFolder
|
|
|
|
}
|
|
|
|
|
|
|
|
if record.DefaultFolderID != "" {
|
|
|
|
update["default_folder_id"] = record.DefaultFolderID
|
|
|
|
}
|
|
|
|
|
|
|
|
if record.TemplateFolderID != "" {
|
|
|
|
update["template_folder_id"] = record.TemplateFolderID
|
|
|
|
}
|
|
|
|
|
2022-07-28 15:00:43 +00:00
|
|
|
if record.TemplateFolder != "" {
|
2022-09-15 13:53:55 +00:00
|
|
|
update["template_folder"] = record.TemplateFolder
|
|
|
|
}
|
|
|
|
|
|
|
|
if record.TemplateFolderID != "" {
|
|
|
|
update["template_folder_id"] = record.TemplateFolderID
|
2022-07-28 15:00:43 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
if record.SaveFolder != "" {
|
|
|
|
update["save_folder"] = record.SaveFolder
|
|
|
|
}
|
|
|
|
|
2022-09-15 13:53:55 +00:00
|
|
|
if record.SaveFolderID != "" {
|
|
|
|
update["save_folder_id"] = record.SaveFolderID
|
|
|
|
}
|
|
|
|
|
2022-07-28 15:00:43 +00:00
|
|
|
_, err := d.coll.UpdateOne(ctx, filter, bson.D{{"$set", update}})
|
|
|
|
|
|
|
|
if err != nil {
|
|
|
|
d.logger.Error("ErrorUpdateGDisk", zap.Error(err))
|
|
|
|
return err
|
|
|
|
}
|
|
|
|
|
|
|
|
return nil
|
|
|
|
}
|
|
|
|
|
|
|
|
func (d *GDisk) DeleteByUserID(ctx context.Context, userID string) error {
|
|
|
|
if userID == "" {
|
|
|
|
err := errors.New("got empty user id")
|
|
|
|
d.logger.Error("ErrorDeleteGDisk", zap.Error(err))
|
|
|
|
return err
|
|
|
|
}
|
|
|
|
|
|
|
|
filter := bson.M{"user_id": userID, "is_deleted": false}
|
|
|
|
|
|
|
|
update := bson.M{"updated_at": time.Now(), "is_deleted": true}
|
|
|
|
|
|
|
|
_, err := d.coll.UpdateOne(ctx, filter, bson.D{{"$set", update}})
|
|
|
|
if err != nil {
|
|
|
|
d.logger.Error("ErrorDeleteGDisk", zap.Error(err))
|
|
|
|
return err
|
|
|
|
}
|
|
|
|
|
|
|
|
return nil
|
|
|
|
}
|