131 lines
3.0 KiB
Go
131 lines
3.0 KiB
Go
package repository
|
|
|
|
import (
|
|
"amocrm/internal/models"
|
|
"amocrm/internal/models/amo"
|
|
"context"
|
|
"go.mongodb.org/mongo-driver/bson"
|
|
"go.mongodb.org/mongo-driver/mongo"
|
|
"go.mongodb.org/mongo-driver/mongo/options"
|
|
"time"
|
|
)
|
|
|
|
func (r *Repository) GettingFieldsFromCash(ctx context.Context, req *models.PaginationReq) (*models.UserListFieldsResp, error) {
|
|
offset := (req.Page - 1) * req.Size
|
|
|
|
totalFields, err := r.fields.CountDocuments(ctx, bson.M{"deleted": false})
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
|
|
var fields []models.Field
|
|
|
|
cursor, err := r.fields.Find(ctx, bson.M{"deleted": false}, options.Find().SetLimit(int64(req.Size)).SetSkip(int64(offset)))
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
defer cursor.Close(ctx)
|
|
|
|
for cursor.Next(ctx) {
|
|
var field models.Field
|
|
if err := cursor.Decode(&field); err != nil {
|
|
return nil, err
|
|
}
|
|
fields = append(fields, field)
|
|
}
|
|
if err := cursor.Err(); err != nil {
|
|
return nil, err
|
|
}
|
|
|
|
fieldListResp := &models.UserListFieldsResp{
|
|
Count: totalFields,
|
|
Items: fields,
|
|
}
|
|
|
|
return fieldListResp, nil
|
|
}
|
|
|
|
func (r *Repository) UpdateListCustom(ctx context.Context) error {
|
|
//TODO:IMPLEMENT ME
|
|
|
|
return nil
|
|
|
|
}
|
|
|
|
type CheckFieldsDeps struct {
|
|
AccountID string // id quiz
|
|
ID int // id amo
|
|
EntityType models.EntityType
|
|
Fields []amo.CustomField
|
|
}
|
|
|
|
func (r *Repository) CheckFields(ctx context.Context, deps CheckFieldsDeps) error {
|
|
for _, f := range deps.Fields {
|
|
field := models.Field{
|
|
ID: deps.AccountID,
|
|
Accountid: deps.ID,
|
|
Amoid: f.ID,
|
|
Name: f.Name,
|
|
Type: f.Type,
|
|
Code: f.Code,
|
|
Entity: deps.EntityType,
|
|
}
|
|
|
|
existingField, err := r.GetFieldByID(ctx, deps.AccountID, f.ID, deps.EntityType)
|
|
if err != nil {
|
|
return err
|
|
}
|
|
|
|
if existingField != nil {
|
|
field.UpdateAt = time.Now().Unix()
|
|
err = r.UpdateField(ctx, &field)
|
|
if err != nil {
|
|
return err
|
|
}
|
|
} else {
|
|
field.Createdat = time.Now().Unix()
|
|
err = r.InsertField(ctx, &field)
|
|
if err != nil {
|
|
return err
|
|
}
|
|
}
|
|
}
|
|
|
|
return nil
|
|
}
|
|
|
|
// test +
|
|
func (r *Repository) GetFieldByID(ctx context.Context, accountID string, amoid int, entity models.EntityType) (*models.Field, error) {
|
|
var field models.Field
|
|
filter := bson.M{"id": accountID, "amoid": amoid, "entity": entity}
|
|
err := r.fields.FindOne(ctx, filter).Decode(&field)
|
|
if err == mongo.ErrNoDocuments {
|
|
return nil, nil
|
|
}
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
return &field, nil
|
|
}
|
|
|
|
// test +
|
|
func (r *Repository) UpdateField(ctx context.Context, field *models.Field) error {
|
|
filter := bson.M{"id": field.ID, "amoid": field.Amoid, "entity": field.Entity}
|
|
update := bson.M{"$set": bson.M{
|
|
"accountid": field.Accountid,
|
|
"name": field.Name,
|
|
"updateAt": field.UpdateAt,
|
|
"type": field.Type,
|
|
"entity": field.Entity,
|
|
"code": field.Code,
|
|
}}
|
|
_, err := r.fields.UpdateOne(ctx, filter, update)
|
|
return err
|
|
}
|
|
|
|
// test +
|
|
func (r *Repository) InsertField(ctx context.Context, field *models.Field) error {
|
|
_, err := r.fields.InsertOne(ctx, field)
|
|
return err
|
|
}
|