tariffs/internal/repository/privilege/privilege.go

85 lines
2.0 KiB
Go
Raw Normal View History

package privilege
import (
"context"
"go.mongodb.org/mongo-driver/bson"
2024-05-29 17:06:28 +00:00
"go.mongodb.org/mongo-driver/bson/primitive"
"go.mongodb.org/mongo-driver/mongo"
"go.mongodb.org/mongo-driver/mongo/options"
"go.uber.org/zap"
2024-05-29 17:06:28 +00:00
"hub_admin_backend_service/internal/errors"
"hub_admin_backend_service/internal/models"
2024-05-29 17:06:28 +00:00
"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
}
2024-05-29 17:06:28 +00:00
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
}