docxTemplater/dal/mongos/yadisk.go
Danil Solovyov 9ecf809b73 Tasks: MAIN - права доступа
Changes:
- добавил ключи и сертификат для домена tempgen.pena.digital
- внес исправления dal.Amo - при создании не указывал _id и createdAt
- внес исправления dal.GDisk, dal.YaDisk - не указывал createdAt
- какие-то еще мелкие правки
2022-08-22 09:23:47 +05:00

189 lines
4.2 KiB
Go

package mongos
import (
"amocrm_templategen_back/dal/model"
"context"
"errors"
"go.mongodb.org/mongo-driver/bson"
"go.mongodb.org/mongo-driver/bson/primitive"
"go.mongodb.org/mongo-driver/mongo"
"go.mongodb.org/mongo-driver/mongo/options"
"go.uber.org/zap"
"time"
)
type YaDisk struct {
coll *mongo.Collection
logger *zap.Logger
}
func InitYaDisk(db *mongo.Database, logger *zap.Logger) *YaDisk {
return &YaDisk{coll: db.Collection("yaDisk"), logger: logger}
}
func (d *YaDisk) InsertOrUpdate(ctx context.Context, record *model.YaDisk) (string, error) {
record.CreatedAt = time.Now()
if record.UserID == "" {
err := errors.New("got empty user id")
d.logger.Error("ErrorDeleteYaDisk", zap.Error(err))
return "", err
}
found, err := d.GetByUserID(ctx, record.UserID)
if err != nil {
return "", err
}
if found == nil {
// Set default TemplateFolder && SaveFolder
if record.TemplateFolder == "" {
record.TemplateFolder = "disk:/templategen/templates"
}
if record.SaveFolder == "" {
record.SaveFolder = "disk:/templategen/saved"
}
result, err := d.coll.InsertOne(ctx, record)
if err != nil {
d.logger.Error("ErrorInsertOrUpdateYaDisk", zap.Error(err))
return "", err
}
return result.InsertedID.(primitive.ObjectID).Hex(), nil
}
err = d.Update(ctx, record)
if err != nil {
d.logger.Error("ErrorInsertOrUpdateYaDisk", zap.Error(err))
return "", err
}
return found.ID, nil
}
func (d *YaDisk) InsertOrUpdateOLD(ctx context.Context, record *model.YaDisk) (string, error) {
now := time.Now()
record.UpdatedAt = now
record.CreatedAt = now
record.IsDeleted = false
if record.UserID == "" {
err := errors.New("got empty user id")
d.logger.Error("ErrorDeleteYaDisk", zap.Error(err))
return "", err
}
filter := bson.M{"user_id": record.UserID, "is_deleted": false}
opts := options.FindOneAndUpdate().SetUpsert(true)
var result model.YaDisk
err := d.coll.FindOneAndUpdate(ctx, filter, bson.D{{"$set", record}}, opts).Decode(&result)
if err != nil {
if err != mongo.ErrNoDocuments {
d.logger.Error("ErrorInsertOrUpdateYaDisk", zap.Error(err))
return "", err
}
}
return result.ID, nil
}
func (d *YaDisk) GetByUserID(ctx context.Context, userID string) (*model.YaDisk, error) {
filter := bson.M{"user_id": userID, "is_deleted": false}
var result model.YaDisk
err := d.coll.FindOne(ctx, filter).Decode(&result)
if err == mongo.ErrNoDocuments {
return nil, nil
} else {
if err != nil {
d.logger.Error("ErrorGetYaDisk", zap.Error(err))
return nil, err
}
}
d.logger.Info("InfoGetYaDisk", zap.String("id", result.ID))
return &result, nil
}
func (d *YaDisk) Update(ctx context.Context, record *model.YaDisk) error {
if record.UserID == "" && record.ID == "" {
err := errors.New("got empty id and user id")
d.logger.Error("ErrorUpdateYaDisk", zap.Error(err))
return err
}
filter := bson.M{"is_deleted": false}
if record.ID != "" {
objID, err := primitive.ObjectIDFromHex(record.ID)
if err != nil {
d.logger.Error("ErrorUpdateYaDisk", zap.Error(err))
return err
}
filter["_id"] = objID
}
if record.UserID != "" {
filter["user_id"] = record.UserID
}
update := bson.M{"updated_at": time.Now()}
if record.AccessToken != "" {
update["access_token"] = record.AccessToken
}
if !record.ExpiresIn.IsZero() {
update["expires_in"] = record.ExpiresIn
}
if record.TokenType != "" {
update["token_type"] = record.TokenType
}
if record.TemplateFolder != "" {
update["save_folder"] = record.TemplateFolder
}
if record.SaveFolder != "" {
update["save_folder"] = record.SaveFolder
}
_, err := d.coll.UpdateOne(ctx, filter, bson.D{{"$set", update}})
if err != nil {
d.logger.Error("ErrorUpdateYaDisk", zap.Error(err))
return err
}
return nil
}
func (d *YaDisk) DeleteByUserID(ctx context.Context, userID string) error {
if userID == "" {
err := errors.New("got empty user id")
d.logger.Error("ErrorDeleteYaDisk", 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("ErrorDeleteYaDisk", zap.Error(err))
return err
}
return nil
}