85 lines
2.0 KiB
Go
85 lines
2.0 KiB
Go
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
|
||
}
|