package privilege import ( "context" "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" "hub_admin_backend_service/internal/errors" "hub_admin_backend_service/internal/models" "time" ) type Deps struct { Mdb *mongo.Collection Logger *zap.Logger } type Privilege struct { mdb *mongo.Collection logger *zap.Logger } func NewPrivilegeRepo(deps Deps) *Privilege { return &Privilege{ mdb: deps.Mdb, logger: deps.Logger, } } func (p *Privilege) GetAllPrivileges(ctx context.Context) ([]models.Privilege, error) { filter := bson.M{"isDeleted": false} opts := options.Find() cursor, err := p.mdb.Find(ctx, filter, opts) if err != nil { p.logger.Error("failed to find privileges", zap.Error(err)) return nil, err } defer cursor.Close(ctx) var privileges []models.Privilege if err = cursor.All(ctx, &privileges); err != nil { p.logger.Error("failed to decode privileges", zap.Error(err)) return nil, err } return privileges, nil } func (p *Privilege) Create(ctx context.Context, req *models.CreateUpdateReq) (*models.Privilege, error) { exist := &models.Privilege{} err := p.mdb.FindOne(ctx, bson.M{"privilegeId": req.PrivilegeId}).Decode(exist) if err == nil { return nil, errors.ErrAlreadyExist } else if err != mongo.ErrNoDocuments { p.logger.Error("Failed to check existing privilege", zap.Error(err)) return nil, err } privilege := &models.Privilege{ ID: primitive.NewObjectID(), Name: req.Name, PrivilegeID: req.PrivilegeId, ServiceKey: req.ServiceKey, Description: req.Description, Type: req.Type, Value: req.Value, Price: req.Price, // amount в хабе не вставляется Amount: req.Amount, CreatedAt: time.Now(), IsDeleted: false, } _, err = p.mdb.InsertOne(ctx, privilege) if err != nil { p.logger.Error("Failed to create privilege", zap.Error(err)) return nil, err } return privilege, nil }