amocrm/internal/repository/fields.go
2024-04-12 19:39:51 +03:00

128 lines
2.9 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 amo.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)
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
}
func (r *Repository) GetFieldByID(ctx context.Context, accountID string, amoid int) (*models.Field, error) {
var field models.Field
filter := bson.M{"id": accountID, "amoid": amoid}
err := r.fields.FindOne(ctx, filter).Decode(&field)
if err == mongo.ErrNoDocuments {
return nil, nil
}
if err != nil {
return nil, err
}
return &field, nil
}
func (r *Repository) UpdateField(ctx context.Context, field *models.Field) error {
filter := bson.M{"id": field.ID, "amoid": field.Amoid}
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
}
func (r *Repository) InsertField(ctx context.Context, field *models.Field) error {
_, err := r.fields.InsertOne(ctx, field)
return err
}