Task (#862kbz8hr)
This commit is contained in:
parent
36684badfd
commit
ae7f7ccbd3
@ -67,8 +67,9 @@ func NewClientApp(clientID, clientSecret string, redirectURI string) *ClientApp
|
||||
}
|
||||
}
|
||||
|
||||
func (ca *ClientApp) GenerateOAuthURL(penaID, redirectURL string) (string, error) {
|
||||
func (ca *ClientApp) GenerateOAuthURL(amoID, penaID, redirectURL string) (string, error) {
|
||||
state, err := tools.EncryptTokenAES(tools.StateToken{
|
||||
AmoID: amoID,
|
||||
PenaID: penaID,
|
||||
Service: "amo",
|
||||
RedirectURL: redirectURL,
|
||||
|
@ -13,6 +13,8 @@ type GDisk struct {
|
||||
|
||||
PenaID string `bson:"pena_id" json:"pena_id"`
|
||||
|
||||
AmoID string `bson:"amo_id" json:"amo_id"`
|
||||
|
||||
/* Google email. Уникальное поле и закрепляется только за одним пользователем. */
|
||||
Email string `bson:"email" json:"email"`
|
||||
|
||||
|
@ -7,6 +7,8 @@ type PenaDisk struct {
|
||||
|
||||
PenaID string `bson:"pena_id" json:"pena_id"`
|
||||
|
||||
AmoID string `bson:"amo_id" json:"amo_id"`
|
||||
|
||||
/* Пользовательское название хранилища */
|
||||
Name string `bson:"name" json:"name"`
|
||||
|
||||
|
@ -7,6 +7,8 @@ import (
|
||||
type Template struct {
|
||||
ID string `bson:"_id,omitempty" json:"id"`
|
||||
|
||||
AmoID string `bson:"amo_id" json:"amo_id"`
|
||||
|
||||
PenaID string `bson:"pena_id" json:"pena_id"`
|
||||
|
||||
/* AMO lead */
|
||||
|
@ -6,6 +6,7 @@ import (
|
||||
|
||||
type TemplateGroup struct {
|
||||
ID string `bson:"_id,omitempty" json:"id"`
|
||||
AmoID string `bson:"amo_id" json:"amo_id"`
|
||||
PenaID string `bson:"pena_id" json:"pena_id"`
|
||||
Name string `bson:"name" json:"name"`
|
||||
CreatedAt time.Time `bson:"created_at" json:"created_at"`
|
||||
|
@ -14,6 +14,8 @@ YaDisk (StorageType) - хранит информацию о пользовате
|
||||
type YaDisk struct {
|
||||
ID string `bson:"_id,omitempty" json:"id"`
|
||||
|
||||
AmoID string `bson:"amo_id" json:"amo_id"`
|
||||
|
||||
PenaID string `bson:"pena_id" json:"pena_id"`
|
||||
|
||||
/* Yandex UID. уникальное поле и закрепляется только за одним пользователем */
|
||||
|
@ -121,6 +121,27 @@ func (d *GDisk) GetByEmail(ctx context.Context, email string) (*model.GDisk, err
|
||||
return &result, nil
|
||||
}
|
||||
|
||||
func (d *GDisk) GetByAmoID(ctx context.Context, amoID string) (*model.GDisk, error) {
|
||||
filter := bson.M{"amo_id": amoID, "is_deleted": false}
|
||||
|
||||
var result model.GDisk
|
||||
|
||||
err := d.coll.FindOne(ctx, filter).Decode(&result)
|
||||
|
||||
if err != nil {
|
||||
if err == mongo.ErrNoDocuments {
|
||||
d.logger.Info("InfoGetGDisk", zap.String("id", "not found"))
|
||||
return nil, nil
|
||||
}
|
||||
|
||||
d.logger.Error("ErrorGetGDisk", zap.Error(err))
|
||||
return nil, err
|
||||
}
|
||||
|
||||
d.logger.Info("InfoGetGDisk", zap.String("id", result.ID))
|
||||
return &result, nil
|
||||
}
|
||||
|
||||
func (d *GDisk) GetListByPenaID(ctx context.Context, penaID string) ([]model.GDisk, error) {
|
||||
filter := bson.M{"pena_id": penaID, "is_deleted": false}
|
||||
|
||||
@ -148,6 +169,33 @@ func (d *GDisk) GetListByPenaID(ctx context.Context, penaID string) ([]model.GDi
|
||||
return result, nil
|
||||
}
|
||||
|
||||
func (d *GDisk) GetListByAmoID(ctx context.Context, amoID string) ([]model.GDisk, error) {
|
||||
filter := bson.M{"amo_id": amoID, "is_deleted": false}
|
||||
|
||||
var result []model.GDisk
|
||||
|
||||
cur, err := d.coll.Find(ctx, filter)
|
||||
|
||||
if err != nil {
|
||||
if err == mongo.ErrNoDocuments {
|
||||
d.logger.Info("InfoGetListGDisk", zap.String("id", "not found"))
|
||||
return nil, nil
|
||||
}
|
||||
|
||||
d.logger.Error("ErrorGetListGDisk", zap.Error(err))
|
||||
return nil, err
|
||||
}
|
||||
|
||||
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 {
|
||||
filter := bson.M{"is_deleted": false}
|
||||
|
||||
@ -239,6 +287,20 @@ func (d *GDisk) Update(ctx context.Context, record *model.GDisk) error {
|
||||
return nil
|
||||
}
|
||||
|
||||
func (d *GDisk) DeleteByAmoID(ctx context.Context, amoID string) error {
|
||||
filter := bson.M{"amo_id": amoID, "is_deleted": false}
|
||||
|
||||
update := bson.M{"updated_at": time.Now(), "is_deleted": true}
|
||||
|
||||
_, err := d.coll.UpdateOne(ctx, filter, bson.D{{Key: "$set", Value: update}})
|
||||
if err != nil {
|
||||
d.logger.Error("ErrorDeleteGDisk", zap.Error(err))
|
||||
return err
|
||||
}
|
||||
|
||||
return nil
|
||||
}
|
||||
|
||||
func (d *GDisk) DeleteByPenaID(ctx context.Context, penaID string) error {
|
||||
filter := bson.M{"pena_id": penaID, "is_deleted": false}
|
||||
|
||||
|
@ -26,7 +26,16 @@ func (d *PenaDisk) InsertOrUpdate(ctx context.Context, record *model.PenaDisk) (
|
||||
record.CreatedAt = time.Now()
|
||||
record.UpdatedAt = record.CreatedAt
|
||||
|
||||
found, err := d.GetByPenaID(ctx, record.PenaID)
|
||||
found, err := d.GetByAmoID(ctx, record.AmoID)
|
||||
|
||||
if err != nil {
|
||||
d.logger.Error("ErrorInsertOrUpdatePenaDisk", zap.Error(err))
|
||||
return "", err
|
||||
}
|
||||
|
||||
if found == nil {
|
||||
found, err = d.GetByAmoID(ctx, record.AmoID)
|
||||
}
|
||||
|
||||
if err != nil {
|
||||
d.logger.Error("ErrorInsertOrUpdatePenaDisk", zap.Error(err))
|
||||
@ -102,7 +111,28 @@ func (d *PenaDisk) GetByPenaID(ctx context.Context, penaID string) (*model.PenaD
|
||||
return &result, nil
|
||||
}
|
||||
|
||||
// Update - обновляет запись по её id или PenaID.
|
||||
func (d *PenaDisk) GetByAmoID(ctx context.Context, amoID string) (*model.PenaDisk, error) {
|
||||
filter := bson.M{"amo_id": amoID, "is_deleted": false}
|
||||
|
||||
var result model.PenaDisk
|
||||
|
||||
err := d.coll.FindOne(ctx, filter).Decode(&result)
|
||||
|
||||
if err != nil {
|
||||
if err == mongo.ErrNoDocuments {
|
||||
d.logger.Info("InfoGetPenaDisk", zap.String("id", "not found"))
|
||||
return nil, nil
|
||||
}
|
||||
|
||||
d.logger.Error("ErrorGetPenaDisk", zap.Error(err))
|
||||
return nil, err
|
||||
}
|
||||
|
||||
d.logger.Info("InfoGetPenaDisk", zap.String("id", result.ID))
|
||||
return &result, nil
|
||||
}
|
||||
|
||||
// Update - обновляет запись по её id, AmoID или PenaID.
|
||||
func (d *PenaDisk) Update(ctx context.Context, record *model.PenaDisk) error {
|
||||
filter := bson.M{"is_deleted": false}
|
||||
|
||||
@ -115,8 +145,10 @@ func (d *PenaDisk) Update(ctx context.Context, record *model.PenaDisk) error {
|
||||
filter["_id"] = objID
|
||||
} else if record.PenaID != "" {
|
||||
filter["pena_id"] = record.PenaID
|
||||
} else if record.AmoID != "" {
|
||||
filter["amo_id"] = record.AmoID
|
||||
} else {
|
||||
err := errors.New("got empty id and pena_id")
|
||||
err := errors.New("got empty id, amo_id and pena_id")
|
||||
d.logger.Error("ErrorUpdatePenaDisk", zap.Error(err))
|
||||
return err
|
||||
}
|
||||
@ -145,6 +177,20 @@ func (d *PenaDisk) Update(ctx context.Context, record *model.PenaDisk) error {
|
||||
return nil
|
||||
}
|
||||
|
||||
func (d *PenaDisk) DeleteByAmoID(ctx context.Context, amoID string) error {
|
||||
filter := bson.M{"amo_id": amoID, "is_deleted": false}
|
||||
|
||||
update := bson.M{"updated_at": time.Now(), "is_deleted": true}
|
||||
|
||||
_, err := d.coll.UpdateOne(ctx, filter, bson.D{{Key: "$set", Value: update}})
|
||||
if err != nil {
|
||||
d.logger.Error("ErrorDeletePenaDisk", zap.Error(err))
|
||||
return err
|
||||
}
|
||||
|
||||
return nil
|
||||
}
|
||||
|
||||
func (d *PenaDisk) DeleteByPenaID(ctx context.Context, penaID string) error {
|
||||
filter := bson.M{"pena_id": penaID, "is_deleted": false}
|
||||
|
||||
|
@ -28,12 +28,6 @@ func (d *Template) Insert(ctx context.Context, record *model.Template) (string,
|
||||
record.UpdatedAt = now
|
||||
record.IsDeleted = false
|
||||
|
||||
if record.PenaID == "" {
|
||||
err := errors.New("got empty pena_id")
|
||||
d.logger.Error("ErrorDeleteTemplate", zap.Error(err))
|
||||
return "", err
|
||||
}
|
||||
|
||||
if record.GroupIDs == nil {
|
||||
record.GroupIDs = []string{}
|
||||
}
|
||||
@ -125,6 +119,30 @@ func (d *Template) GetByNameAndPenaID(ctx context.Context, name, penaID string)
|
||||
return &result, nil
|
||||
}
|
||||
|
||||
func (d *Template) GetByNameAndAmoID(ctx context.Context, name, amoID string) (*model.Template, error) {
|
||||
filter := bson.M{"name": name, "amo_id": amoID, "is_deleted": false}
|
||||
|
||||
fmt.Println("-----------------------------------")
|
||||
fmt.Println(filter)
|
||||
|
||||
var result model.Template
|
||||
err := d.coll.FindOne(ctx, filter).Decode(&result)
|
||||
|
||||
if err != nil {
|
||||
if err == mongo.ErrNoDocuments {
|
||||
d.logger.Info("InfoGetTemplate", zap.String("id", "not found"))
|
||||
return nil, nil
|
||||
}
|
||||
|
||||
d.logger.Error("ErrorGetTemplate", zap.Error(err))
|
||||
return nil, err
|
||||
}
|
||||
|
||||
d.logger.Info("InfoGetTemplate", zap.String("id", result.ID))
|
||||
|
||||
return &result, nil
|
||||
}
|
||||
|
||||
func (d *Template) GetByFilenameAndPenaID(ctx context.Context, name, penaID string) (*model.Template, error) {
|
||||
filter := bson.M{"filename": name, "pena_id": penaID, "is_deleted": false}
|
||||
|
||||
@ -147,6 +165,28 @@ func (d *Template) GetByFilenameAndPenaID(ctx context.Context, name, penaID stri
|
||||
return &result, nil
|
||||
}
|
||||
|
||||
func (d *Template) GetByFilenameAndAmoID(ctx context.Context, name, amoID string) (*model.Template, error) {
|
||||
filter := bson.M{"filename": name, "amo_id": amoID, "is_deleted": false}
|
||||
|
||||
var result model.Template
|
||||
|
||||
err := d.coll.FindOne(ctx, filter).Decode(&result)
|
||||
|
||||
if err != nil {
|
||||
if err == mongo.ErrNoDocuments {
|
||||
d.logger.Info("InfoGetTemplate", zap.String("id", "not found"))
|
||||
return nil, nil
|
||||
}
|
||||
|
||||
d.logger.Error("ErrorGetTemplate", zap.Error(err))
|
||||
return nil, err
|
||||
}
|
||||
|
||||
d.logger.Info("InfoGetTemplate", zap.String("id", result.ID))
|
||||
|
||||
return &result, nil
|
||||
}
|
||||
|
||||
func (d *Template) GetListByPenaID(ctx context.Context, penaID string) ([]model.Template, error) {
|
||||
filter := bson.M{"pena_id": penaID, "is_deleted": false}
|
||||
|
||||
@ -176,6 +216,35 @@ func (d *Template) GetListByPenaID(ctx context.Context, penaID string) ([]model.
|
||||
return result, nil
|
||||
}
|
||||
|
||||
func (d *Template) GetListByAmoID(ctx context.Context, amoID string) ([]model.Template, error) {
|
||||
filter := bson.M{"amo_id": amoID, "is_deleted": false}
|
||||
|
||||
var result []model.Template
|
||||
|
||||
cursor, err := d.coll.Find(ctx, filter)
|
||||
|
||||
if err == mongo.ErrNoDocuments {
|
||||
return nil, nil
|
||||
} else if err != nil {
|
||||
d.logger.Error("ErrorGetTemplate", zap.Error(err))
|
||||
return nil, err
|
||||
}
|
||||
|
||||
err = cursor.All(ctx, &result)
|
||||
|
||||
if err != nil {
|
||||
if err == mongo.ErrNoDocuments {
|
||||
d.logger.Info("InfoGetTemplate", zap.String("id", "not found"))
|
||||
return nil, nil
|
||||
}
|
||||
|
||||
d.logger.Error("ErrorGetTemplate", zap.Error(err))
|
||||
return nil, err
|
||||
}
|
||||
|
||||
return result, nil
|
||||
}
|
||||
|
||||
func (d *Template) GetListByPenaIDAndStorageType(ctx context.Context, penaID, storageType string) ([]model.Template,
|
||||
error) {
|
||||
filter := bson.M{"pena_id": penaID, "storage_type": storageType, "is_deleted": false}
|
||||
@ -205,8 +274,37 @@ func (d *Template) GetListByPenaIDAndStorageType(ctx context.Context, penaID, st
|
||||
return result, nil
|
||||
}
|
||||
|
||||
func (d *Template) GetListByGroupID(ctx context.Context, groupID, penaID string) ([]model.Template, error) {
|
||||
filter := bson.M{"pena_id": penaID}
|
||||
func (d *Template) GetListByAmoIDAndStorageType(ctx context.Context, amoID, storageType string) ([]model.Template,
|
||||
error) {
|
||||
filter := bson.M{"amo_id": amoID, "storage_type": storageType, "is_deleted": false}
|
||||
|
||||
var result []model.Template
|
||||
|
||||
cursor, err := d.coll.Find(ctx, filter)
|
||||
|
||||
if err == mongo.ErrNoDocuments {
|
||||
return nil, nil
|
||||
} else if err != nil {
|
||||
d.logger.Error("ErrorGetTemplate", zap.Error(err))
|
||||
return nil, err
|
||||
}
|
||||
|
||||
err = cursor.All(ctx, &result)
|
||||
|
||||
if err != nil {
|
||||
if err == mongo.ErrNoDocuments {
|
||||
d.logger.Info("InfoGetTemplate", zap.String("id", "not found"))
|
||||
return nil, nil
|
||||
}
|
||||
|
||||
d.logger.Error("ErrorGetTemplate", zap.Error(err))
|
||||
return nil, err
|
||||
}
|
||||
return result, nil
|
||||
}
|
||||
|
||||
func (d *Template) GetListByGroupID(ctx context.Context, groupID, amoID, penaID string) ([]model.Template, error) {
|
||||
filter := bson.M{"pena_id": penaID, "amo_id": amoID}
|
||||
|
||||
if groupID == "" {
|
||||
filter["group_ids"] = []string{}
|
||||
@ -232,7 +330,7 @@ func (d *Template) GetListByGroupID(ctx context.Context, groupID, penaID string)
|
||||
return result, nil
|
||||
}
|
||||
|
||||
func (d *Template) PushGroup(ctx context.Context, id, groupID, penaID string) error {
|
||||
func (d *Template) PushGroup(ctx context.Context, id, groupID, amoID, penaID string) error {
|
||||
objID, err := primitive.ObjectIDFromHex(id)
|
||||
|
||||
if err != nil {
|
||||
@ -252,6 +350,10 @@ func (d *Template) PushGroup(ctx context.Context, id, groupID, penaID string) er
|
||||
filter["pena_id"] = penaID
|
||||
}
|
||||
|
||||
if amoID != "" {
|
||||
filter["amo_id"] = amoID
|
||||
}
|
||||
|
||||
update := bson.M{
|
||||
"$addToSet": bson.M{"group_ids": groupID},
|
||||
"$set": bson.M{"updated_at": time.Now()},
|
||||
@ -269,7 +371,7 @@ func (d *Template) PushGroup(ctx context.Context, id, groupID, penaID string) er
|
||||
return nil
|
||||
}
|
||||
|
||||
func (d *Template) PullGroup(ctx context.Context, id, groupID, penaID string) error {
|
||||
func (d *Template) PullGroup(ctx context.Context, id, groupID, amoID, penaID string) error {
|
||||
objID, err := primitive.ObjectIDFromHex(id)
|
||||
|
||||
if err != nil {
|
||||
@ -289,6 +391,10 @@ func (d *Template) PullGroup(ctx context.Context, id, groupID, penaID string) er
|
||||
filter["pena_id"] = penaID
|
||||
}
|
||||
|
||||
if amoID != "" {
|
||||
filter["amo_id"] = amoID
|
||||
}
|
||||
|
||||
update := bson.M{
|
||||
"$pull": bson.M{"group_ids": groupID},
|
||||
"$set": bson.M{"updated_at": time.Now()},
|
||||
|
@ -26,18 +26,6 @@ func (d *TemplateGroup) Insert(ctx context.Context, record *model.TemplateGroup)
|
||||
record.CreatedAt = now
|
||||
record.UpdatedAt = now
|
||||
|
||||
if record.PenaID == "" {
|
||||
err := errors.New("pena_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 {
|
||||
@ -115,6 +103,41 @@ func (d *TemplateGroup) GetListByPenaID(ctx context.Context, penaID string) ([]m
|
||||
return result, err
|
||||
}
|
||||
|
||||
func (d *TemplateGroup) GetListByAmoID(ctx context.Context, amoID string) ([]model.TemplateGroup, error) {
|
||||
if amoID == "" {
|
||||
err := errors.New("amo_id required")
|
||||
d.logger.Error("ErrorGetListTemplateGroup")
|
||||
return nil, err
|
||||
}
|
||||
|
||||
filter := bson.M{"amo_id": amoID}
|
||||
|
||||
var result []model.TemplateGroup
|
||||
|
||||
cur, err := d.coll.Find(ctx, filter)
|
||||
|
||||
if err != nil {
|
||||
if err == mongo.ErrNoDocuments {
|
||||
d.logger.Info("InfoGetTemplateGroup", zap.String("id", "not found"))
|
||||
return nil, 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)
|
||||
|
||||
@ -129,6 +152,10 @@ func (d *TemplateGroup) Update(ctx context.Context, record *model.TemplateGroup)
|
||||
filter["pena_id"] = record.PenaID
|
||||
}
|
||||
|
||||
if record.AmoID != "" {
|
||||
filter["amo_id"] = record.AmoID
|
||||
}
|
||||
|
||||
update := bson.M{"updated_at": time.Now()}
|
||||
|
||||
if record.Name != "" {
|
||||
@ -178,3 +205,16 @@ func (d *TemplateGroup) DeleteByPenaID(ctx context.Context, penaID string) error
|
||||
|
||||
return nil
|
||||
}
|
||||
|
||||
func (d *TemplateGroup) DeleteByAmoID(ctx context.Context, amoID string) error {
|
||||
filter := bson.M{"amo_id": amoID}
|
||||
|
||||
_, err := d.coll.DeleteMany(ctx, filter)
|
||||
|
||||
if err != nil {
|
||||
d.logger.Error("ErrorDeleteTemplateGroup", zap.Error(err))
|
||||
return err
|
||||
}
|
||||
|
||||
return nil
|
||||
}
|
||||
|
@ -145,6 +145,29 @@ func (d *YaDisk) GetListByPenaID(ctx context.Context, penaID string) ([]model.Ya
|
||||
return result, nil
|
||||
}
|
||||
|
||||
func (d *YaDisk) GetListByAmoID(ctx context.Context, amoID string) ([]model.YaDisk, error) {
|
||||
filter := bson.M{"amo_id": amoID, "is_deleted": false}
|
||||
|
||||
result := []model.YaDisk{}
|
||||
|
||||
cur, err := d.coll.Find(ctx, filter)
|
||||
|
||||
if err == mongo.ErrNoDocuments {
|
||||
return nil, nil
|
||||
} else if err != nil {
|
||||
d.logger.Error("ErrorGetListYaDisk", zap.Error(err))
|
||||
return nil, err
|
||||
}
|
||||
|
||||
err = cur.All(ctx, &result)
|
||||
if err != nil {
|
||||
d.logger.Error("ErrorGetListYaDisk", zap.Error(err))
|
||||
}
|
||||
|
||||
d.logger.Info("InfoGetListYaDisk")
|
||||
return result, nil
|
||||
}
|
||||
|
||||
// Update - обновляет запись по её id или логину Yandex.
|
||||
func (d *YaDisk) Update(ctx context.Context, record *model.YaDisk) error {
|
||||
filter := bson.M{"is_deleted": false}
|
||||
@ -226,3 +249,17 @@ func (d *YaDisk) DeleteByPenaID(ctx context.Context, penaID string) error {
|
||||
|
||||
return nil
|
||||
}
|
||||
|
||||
func (d *YaDisk) DeleteByAmoID(ctx context.Context, amoID string) error {
|
||||
filter := bson.M{"amo_id": amoID, "is_deleted": false}
|
||||
|
||||
update := bson.M{"updated_at": time.Now(), "is_deleted": true}
|
||||
|
||||
_, err := d.coll.UpdateMany(ctx, filter, bson.D{{Key: "$set", Value: update}})
|
||||
if err != nil {
|
||||
d.logger.Error("ErrorDeleteYaDisk", zap.Error(err))
|
||||
return err
|
||||
}
|
||||
|
||||
return nil
|
||||
}
|
||||
|
@ -54,8 +54,9 @@ func NewClientApp(credentials string) (*ClientApp, error) {
|
||||
return &ClientApp{Config: config}, nil
|
||||
}
|
||||
|
||||
func (ca *ClientApp) GenerateOAuthURL(penaID, redirectURL string) (string, error) {
|
||||
func (ca *ClientApp) GenerateOAuthURL(amoID, penaID, redirectURL string) (string, error) {
|
||||
state, err := tools.EncryptTokenAES(tools.StateToken{
|
||||
AmoID: amoID,
|
||||
PenaID: penaID,
|
||||
Service: "google",
|
||||
RedirectURL: redirectURL,
|
||||
|
@ -144,47 +144,19 @@ func (h *Handlers) AmoState(w http.ResponseWriter, r *http.Request) {
|
||||
|
||||
amoData := middleware.GetAmoData(r)
|
||||
|
||||
if amoData == nil {
|
||||
h.reportError(w, http.StatusUnauthorized, ErrorUnauthorized)
|
||||
return
|
||||
}
|
||||
|
||||
account, err := h.dal.Amo.GetByAccountID(ctx, amoData.AccountID)
|
||||
if err != nil {
|
||||
h.reportError(w, http.StatusInternalServerError, fmt.Errorf("db unexpected error %s", err.Error()))
|
||||
return
|
||||
}
|
||||
|
||||
if account == nil {
|
||||
account = &model.Amo{
|
||||
AccountID: amoData.AccountID,
|
||||
PenaID: middleware.GetPenaUserID(r),
|
||||
}
|
||||
|
||||
var id string
|
||||
|
||||
id, err = h.dal.Amo.InsertOrUpdate(ctx, account)
|
||||
if err != nil {
|
||||
h.reportError(w, http.StatusInternalServerError, fmt.Errorf("db unexpected error %s", err.Error()))
|
||||
return
|
||||
}
|
||||
|
||||
account.ID = id
|
||||
}
|
||||
|
||||
yaStorages, err := h.dal.YaDisk.GetListByPenaID(r.Context(), account.PenaID)
|
||||
yaStorages, err := h.dal.YaDisk.GetListByPenaID(r.Context(), amoData.PenaID)
|
||||
if err != nil {
|
||||
h.reportError(w, http.StatusInternalServerError, err)
|
||||
return
|
||||
}
|
||||
|
||||
gStorages, err := h.dal.GDisk.GetListByPenaID(r.Context(), account.PenaID)
|
||||
gStorages, err := h.dal.GDisk.GetListByAmoID(r.Context(), amoData.ID)
|
||||
if err != nil {
|
||||
h.reportError(w, http.StatusInternalServerError, err)
|
||||
return
|
||||
}
|
||||
|
||||
penaStorage, err := h.dal.PenaDisk.GetByPenaID(ctx, account.PenaID)
|
||||
penaStorage, err := h.dal.PenaDisk.GetByPenaID(ctx, amoData.PenaID)
|
||||
if err != nil {
|
||||
h.reportError(w, http.StatusInternalServerError, err)
|
||||
return
|
||||
@ -197,19 +169,19 @@ func (h *Handlers) AmoState(w http.ResponseWriter, r *http.Request) {
|
||||
}
|
||||
|
||||
redirectURI := "https://" + amoData.Referer + h.opts.AmoRedirectUrn
|
||||
authYandexURL, err := h.YaDisk.GenerateOAuthURL(account.PenaID, redirectURI)
|
||||
authYandexURL, err := h.YaDisk.GenerateOAuthURL(amoData.ID, amoData.PenaID, redirectURI)
|
||||
if err != nil {
|
||||
h.reportError(w, http.StatusInternalServerError, err)
|
||||
return
|
||||
}
|
||||
|
||||
authGoogleURL, err := h.GDisk.GenerateOAuthURL(account.PenaID, redirectURI)
|
||||
authGoogleURL, err := h.GDisk.GenerateOAuthURL(amoData.ID, amoData.PenaID, redirectURI)
|
||||
if err != nil {
|
||||
h.reportError(w, http.StatusInternalServerError, err)
|
||||
return
|
||||
}
|
||||
|
||||
authAmoURL, err := h.Amo.GenerateOAuthURL(account.PenaID, redirectURI)
|
||||
authAmoURL, err := h.Amo.GenerateOAuthURL(amoData.ID, amoData.PenaID, redirectURI)
|
||||
if err != nil {
|
||||
h.reportError(w, http.StatusInternalServerError, err)
|
||||
return
|
||||
@ -303,36 +275,55 @@ func (h *Handlers) AmoState(w http.ResponseWriter, r *http.Request) {
|
||||
}
|
||||
|
||||
// Amo tokens
|
||||
amoList, err := h.dal.Amo.GetListByPenaID(r.Context(), amoData.PenaID)
|
||||
// amoList, err := h.dal.Amo.GetListByPenaID(r.Context(), amoData.PenaID)
|
||||
|
||||
// if err != nil {
|
||||
// h.reportError(w, http.StatusInternalServerError, err)
|
||||
// return
|
||||
// }
|
||||
|
||||
// for _, amo := range amoList {
|
||||
// if amo.Token().Valid() {
|
||||
// continue
|
||||
// }
|
||||
|
||||
// var token *oauth2.Token
|
||||
// token, err = h.Amo.RefreshToken(r.Context(), amo.Token(), amo.Referer)
|
||||
|
||||
// if err == nil {
|
||||
// _, err = h.dal.Amo.InsertOrUpdate(r.Context(), &model.Amo{
|
||||
// ID: amo.ID,
|
||||
// AccountID: amo.AccountID,
|
||||
// AccessToken: token.AccessToken,
|
||||
// RefreshToken: token.RefreshToken,
|
||||
// ExpiresIn: token.Expiry,
|
||||
// TokenType: token.TokenType,
|
||||
// })
|
||||
// }
|
||||
|
||||
// if err != nil {
|
||||
// h.logger.Error("ErrorCheckAmoTokens", zap.Error(err))
|
||||
// invalidTokens["amo"] = amo
|
||||
// }
|
||||
// }
|
||||
|
||||
if !amoData.Token().Valid() {
|
||||
token, err := h.Amo.RefreshToken(r.Context(), amoData.Token(), amoData.Referer)
|
||||
if err != nil {
|
||||
h.reportError(w, http.StatusInternalServerError, err)
|
||||
return
|
||||
h.logger.Error("ErrorCheckAmoTokens", zap.Error(err))
|
||||
invalidTokens["amo"] = amoData
|
||||
}
|
||||
|
||||
for _, amo := range amoList {
|
||||
if amo.Token().Valid() {
|
||||
continue
|
||||
}
|
||||
|
||||
var token *oauth2.Token
|
||||
token, err = h.Amo.RefreshToken(r.Context(), amo.Token(), amo.Referer)
|
||||
|
||||
if err == nil {
|
||||
_, err = h.dal.Amo.InsertOrUpdate(r.Context(), &model.Amo{
|
||||
ID: amo.ID,
|
||||
AccountID: amo.AccountID,
|
||||
ID: amoData.ID,
|
||||
AccountID: amoData.AccountID,
|
||||
AccessToken: token.AccessToken,
|
||||
RefreshToken: token.RefreshToken,
|
||||
ExpiresIn: token.Expiry,
|
||||
TokenType: token.TokenType,
|
||||
})
|
||||
}
|
||||
|
||||
if err != nil {
|
||||
h.logger.Error("ErrorCheckAmoTokens", zap.Error(err))
|
||||
invalidTokens["amo"] = amo
|
||||
}
|
||||
}
|
||||
|
||||
resp := RespAmoState{
|
||||
|
@ -107,6 +107,7 @@ func (h *Handlers) GDiskSaveToken(w http.ResponseWriter, r *http.Request) {
|
||||
|
||||
// Insert/Update token in DB
|
||||
_, err = h.dal.GDisk.InsertOrUpdate(r.Context(), &model.GDisk{
|
||||
AmoID: state.AmoID,
|
||||
PenaID: state.PenaID,
|
||||
Name: fmt.Sprintf("Google Disk (%v)", gUser.EmailAddress),
|
||||
DisplayName: gUser.DisplayName,
|
||||
@ -314,7 +315,7 @@ func (h *Handlers) GDiskGetList(w http.ResponseWriter, r *http.Request) {
|
||||
return
|
||||
}
|
||||
|
||||
gdiskInfo, err := h.dal.GDisk.GetListByPenaID(r.Context(), amoData.PenaID)
|
||||
gdiskInfo, err := h.dal.GDisk.GetListByAmoID(r.Context(), amoData.ID)
|
||||
if err != nil {
|
||||
h.reportError(w, http.StatusInternalServerError, err)
|
||||
return
|
||||
|
@ -226,7 +226,7 @@ func (h *Handlers) GeneratorByData(w http.ResponseWriter, r *http.Request) {
|
||||
name = request.Name
|
||||
}
|
||||
|
||||
exportURL, err := h.generate(r, file, name, storageID, storageType, amoData.PenaID, history, request.Data)
|
||||
exportURL, err := h.generate(r, file, name, storageID, storageType, amoData.ID, history, request.Data)
|
||||
if err != nil {
|
||||
history.AddError(err)
|
||||
h.sendResponse(w, http.StatusInternalServerError, err)
|
||||
@ -322,7 +322,7 @@ func (h *Handlers) GeneratorByAmoWebhook(w http.ResponseWriter, r *http.Request)
|
||||
task := &model.WorkerTask{
|
||||
PenaID: amoData.PenaID,
|
||||
AmoID: amoData.ID,
|
||||
AmoUserID: 0,
|
||||
AmoUserID: middleware.GetAmoUserID(r),
|
||||
Status: model.WorkerTaskStatusNew,
|
||||
LeadID: convertedLeadID,
|
||||
TemplateID: templateID,
|
||||
@ -353,8 +353,8 @@ func (h *Handlers) GeneratorByAmoWebhook(w http.ResponseWriter, r *http.Request)
|
||||
|
||||
// generate - локальная функция, для генерации файла, возвращает ссылку для скачивания сгенерированного файла.
|
||||
func (h *Handlers) generate(r *http.Request, file, name, storageID, storageType,
|
||||
penaID string, history *model.History, data any) (string, error) {
|
||||
amoData, err := h.dal.Amo.GetByPenaID(r.Context(), penaID)
|
||||
amoID string, history *model.History, data any) (string, error) {
|
||||
amoData, err := h.dal.Amo.GetByID(r.Context(), amoID)
|
||||
if err != nil {
|
||||
return "", err
|
||||
}
|
||||
@ -452,7 +452,7 @@ func (h *Handlers) generate(r *http.Request, file, name, storageID, storageType,
|
||||
exportURL = fmt.Sprintf("https://%v/%v", h.opts.Domain, generatedFile)
|
||||
|
||||
case "penadisk":
|
||||
client := penadisk.NewClient(penaID)
|
||||
client := penadisk.NewClient(amoID)
|
||||
|
||||
saveFolder := "templategen/saved"
|
||||
history.Target.File, exportURL, err = templategen.PenaDiskGenerateDocBytes(r.Context(), file, name, saveFolder,
|
||||
|
@ -69,7 +69,7 @@ func (h *Handlers) GetHistoryListByFilter(w http.ResponseWriter, r *http.Request
|
||||
request.AmoUserID = amoUserID
|
||||
}
|
||||
|
||||
request.AmoID = amoData.AccountID
|
||||
request.AmoID = amoData.ID
|
||||
|
||||
result, err := h.dal.History.GetByFilter(r.Context(), &request)
|
||||
if err != nil {
|
||||
|
@ -33,6 +33,7 @@ func (h *Handlers) PenaDiskSetSettings(w http.ResponseWriter, r *http.Request) {
|
||||
|
||||
err = h.dal.PenaDisk.Update(r.Context(), &model.PenaDisk{
|
||||
PenaID: amoData.PenaID,
|
||||
AmoID: amoData.ID,
|
||||
Name: request.Name,
|
||||
TemplateFolder: request.TemplateFolder,
|
||||
SaveFolder: request.SaveFolder})
|
||||
@ -48,7 +49,7 @@ func (h *Handlers) PenaDiskSetSettings(w http.ResponseWriter, r *http.Request) {
|
||||
type ReqPenaDiskGetResources struct {
|
||||
Path string `json:"path"`
|
||||
Recursive bool `json:"recursive"`
|
||||
WIthVersions bool `json:"w_ith_versions"`
|
||||
WithVersions bool `json:"with_versions"`
|
||||
}
|
||||
|
||||
func (h *Handlers) PenaDiskGetResources(w http.ResponseWriter, r *http.Request) {
|
||||
@ -67,9 +68,9 @@ func (h *Handlers) PenaDiskGetResources(w http.ResponseWriter, r *http.Request)
|
||||
return
|
||||
}
|
||||
|
||||
client := penadisk.NewClient(amoData.PenaID)
|
||||
client := penadisk.NewClient(amoData.ID)
|
||||
|
||||
resource, err := client.GetResources(r.Context(), request.Path, request.Recursive, request.WIthVersions)
|
||||
resource, err := client.GetResources(r.Context(), request.Path, request.Recursive, request.WithVersions)
|
||||
if err != nil {
|
||||
h.reportError(w, http.StatusInternalServerError, err)
|
||||
return
|
||||
@ -101,7 +102,7 @@ func (h *Handlers) PenaDiskPutResources(w http.ResponseWriter, r *http.Request)
|
||||
h.reportError(w, http.StatusBadRequest, errors.New("path required"))
|
||||
}
|
||||
|
||||
client := penadisk.NewClient(amoData.PenaID)
|
||||
client := penadisk.NewClient(amoData.ID)
|
||||
|
||||
err = client.PutResources(r.Context(), request.Path)
|
||||
if err != nil {
|
||||
@ -137,7 +138,7 @@ func (h *Handlers) PenaDiskDeleteResources(w http.ResponseWriter, r *http.Reques
|
||||
h.reportError(w, http.StatusBadRequest, errors.New("path required"))
|
||||
}
|
||||
|
||||
client := penadisk.NewClient(amoData.PenaID)
|
||||
client := penadisk.NewClient(amoData.ID)
|
||||
|
||||
err = client.DeleteResources(r.Context(), request.Path, request.Permanently)
|
||||
if err != nil {
|
||||
@ -194,7 +195,7 @@ func (h *Handlers) PenaDiskUploadResources(w http.ResponseWriter, r *http.Reques
|
||||
}
|
||||
|
||||
// Upload file to the storage
|
||||
client := penadisk.NewClient(pd.PenaID)
|
||||
client := penadisk.NewClient(pd.AmoID)
|
||||
|
||||
_, _, err = client.UploadResources(r.Context(), request.Path, fileHeader.Filename, false, fileData)
|
||||
if err != nil {
|
||||
@ -229,7 +230,7 @@ func (h *Handlers) PenaDiskDownloadLink(w http.ResponseWriter, r *http.Request)
|
||||
h.reportError(w, http.StatusBadRequest, errors.New("path required"))
|
||||
}
|
||||
|
||||
client := penadisk.NewClient(amoData.PenaID)
|
||||
client := penadisk.NewClient(amoData.ID)
|
||||
|
||||
href, err := client.GetPublicDownloadURL(r.Context(), request.Path)
|
||||
if err != nil {
|
||||
|
@ -58,6 +58,7 @@ func (h *Handlers) TemplateSet(w http.ResponseWriter, r *http.Request) {
|
||||
|
||||
update := &model.Template{
|
||||
ID: request.TemplateID,
|
||||
AmoID: amoData.ID,
|
||||
PenaID: amoData.PenaID,
|
||||
LeadID: request.LeadID,
|
||||
Name: request.Name,
|
||||
@ -93,7 +94,7 @@ func (h *Handlers) TemplateGetListByUser(w http.ResponseWriter, r *http.Request)
|
||||
h.reportError(w, http.StatusUnauthorized, ErrorUnauthorized)
|
||||
return
|
||||
}
|
||||
result, err := h.dal.Template.GetListByPenaID(r.Context(), amoData.PenaID)
|
||||
result, err := h.dal.Template.GetListByAmoID(r.Context(), amoData.ID)
|
||||
if err != nil {
|
||||
h.reportError(w, http.StatusInternalServerError, err)
|
||||
return
|
||||
@ -123,7 +124,7 @@ func (h *Handlers) TemplateGetListByGroup(w http.ResponseWriter, r *http.Request
|
||||
return
|
||||
}
|
||||
|
||||
resp, err := h.dal.Template.GetListByGroupID(r.Context(), request.GroupID, amoData.PenaID)
|
||||
resp, err := h.dal.Template.GetListByGroupID(r.Context(), request.GroupID, amoData.ID, amoData.PenaID)
|
||||
|
||||
if err != nil {
|
||||
h.reportError(w, http.StatusInternalServerError, err)
|
||||
@ -180,6 +181,7 @@ func (h *Handlers) TemplateGet(w http.ResponseWriter, r *http.Request) {
|
||||
if template == nil {
|
||||
var templateID string
|
||||
templateID, err = h.dal.Template.Insert(r.Context(), &model.Template{
|
||||
AmoID: amoData.ID,
|
||||
PenaID: amoData.PenaID,
|
||||
LeadID: request.LeadID,
|
||||
})
|
||||
@ -223,6 +225,7 @@ func (h *Handlers) TemplateUpdate(w http.ResponseWriter, r *http.Request) {
|
||||
|
||||
record := &model.Template{
|
||||
ID: request.ID,
|
||||
AmoID: amoData.ID,
|
||||
PenaID: amoData.PenaID,
|
||||
Name: request.Name,
|
||||
File: request.File,
|
||||
|
@ -39,7 +39,8 @@ func (h *Handlers) TemplateGroupCreate(w http.ResponseWriter, r *http.Request) {
|
||||
}
|
||||
|
||||
groupID, err := h.dal.TemplateGroup.Insert(r.Context(), &model.TemplateGroup{
|
||||
PenaID: amoData.AccountID,
|
||||
AmoID: amoData.ID,
|
||||
PenaID: amoData.PenaID,
|
||||
Name: request.Name,
|
||||
})
|
||||
|
||||
@ -77,7 +78,7 @@ func (h *Handlers) TemplateGroupGetList(w http.ResponseWriter, r *http.Request)
|
||||
return
|
||||
}
|
||||
|
||||
resp, err := h.dal.TemplateGroup.GetListByPenaID(r.Context(), amoData.AccountID)
|
||||
resp, err := h.dal.TemplateGroup.GetListByAmoID(r.Context(), amoData.ID)
|
||||
|
||||
if err != nil {
|
||||
h.reportError(w, http.StatusInternalServerError, err)
|
||||
@ -120,7 +121,8 @@ func (h *Handlers) TemplateGroupEdit(w http.ResponseWriter, r *http.Request) {
|
||||
|
||||
err = h.dal.TemplateGroup.Update(r.Context(), &model.TemplateGroup{
|
||||
ID: request.ID,
|
||||
PenaID: amoData.AccountID,
|
||||
AmoID: amoData.ID,
|
||||
PenaID: amoData.PenaID,
|
||||
Name: request.Name,
|
||||
})
|
||||
|
||||
@ -206,7 +208,7 @@ func (h *Handlers) TemplateGroupPut(w http.ResponseWriter, r *http.Request) {
|
||||
return
|
||||
}
|
||||
|
||||
err = h.dal.Template.PushGroup(r.Context(), request.TemplateID, request.GroupID, amoData.AccountID)
|
||||
err = h.dal.Template.PushGroup(r.Context(), request.TemplateID, request.GroupID, amoData.ID, amoData.PenaID)
|
||||
|
||||
if err != nil {
|
||||
h.reportError(w, http.StatusInternalServerError, err)
|
||||
@ -247,7 +249,7 @@ func (h *Handlers) TemplateGroupRemove(w http.ResponseWriter, r *http.Request) {
|
||||
return
|
||||
}
|
||||
|
||||
err = h.dal.Template.PullGroup(r.Context(), request.TemplateID, request.GroupID, amoData.AccountID)
|
||||
err = h.dal.Template.PullGroup(r.Context(), request.TemplateID, request.GroupID, amoData.ID, amoData.PenaID)
|
||||
|
||||
if err != nil {
|
||||
h.reportError(w, http.StatusInternalServerError, err)
|
||||
|
@ -93,6 +93,7 @@ func (h *Handlers) YaDiskSaveToken(w http.ResponseWriter, r *http.Request) {
|
||||
// Insert/Update token in DB
|
||||
_, err = h.dal.YaDisk.InsertOrUpdate(r.Context(), &model.YaDisk{
|
||||
PenaID: state.PenaID,
|
||||
AmoID: state.AmoID,
|
||||
Name: fmt.Sprintf("Yandex Disk (%v)", yaUser.Login),
|
||||
UID: yaUser.UID,
|
||||
Login: yaUser.Login,
|
||||
@ -179,7 +180,7 @@ func (h *Handlers) YaDiskGetList(w http.ResponseWriter, r *http.Request) {
|
||||
return
|
||||
}
|
||||
|
||||
yadiskInfo, err := h.dal.YaDisk.GetListByPenaID(r.Context(), amoData.PenaID)
|
||||
yadiskInfo, err := h.dal.YaDisk.GetListByAmoID(r.Context(), amoData.ID)
|
||||
if err != nil {
|
||||
h.reportError(w, http.StatusInternalServerError, err)
|
||||
return
|
||||
|
@ -16,6 +16,7 @@ func SetToken(token string) {
|
||||
}
|
||||
|
||||
type StateToken struct {
|
||||
AmoID string `json:"amo_id"`
|
||||
PenaID string `json:"pena_id"`
|
||||
Service string `json:"service"` // yandex, google, etc
|
||||
RedirectURL string `json:"redirect_url"`
|
||||
|
@ -54,8 +54,9 @@ func NewClientApp(clientID, clientSecret, redirectURI, serviceURL string) *Clien
|
||||
}
|
||||
}
|
||||
|
||||
func (ca *ClientApp) GenerateOAuthURL(penaID, redirectURL string) (string, error) {
|
||||
func (ca *ClientApp) GenerateOAuthURL(amoID, penaID, redirectURL string) (string, error) {
|
||||
state, err := tools.EncryptTokenAES(tools.StateToken{
|
||||
AmoID: amoID,
|
||||
PenaID: penaID,
|
||||
Service: "yandex",
|
||||
RedirectURL: redirectURL,
|
||||
|
Loading…
Reference in New Issue
Block a user