add get by id and get by service key privilege methods

This commit is contained in:
Pavel 2024-06-04 13:15:09 +03:00
parent 70fd6535f7
commit b3a689e447
3 changed files with 94 additions and 4 deletions

@ -1,8 +1,10 @@
package privilege_external
import (
"errors"
"github.com/gofiber/fiber/v2"
"go.uber.org/zap"
our_errors "hub_admin_backend_service/internal/errors"
"hub_admin_backend_service/internal/repository/privilege"
"hub_admin_backend_service/internal/tools"
)
@ -28,7 +30,12 @@ func NewPrivilegeExternal(deps Deps) *PrivilegeExternal {
func (p *PrivilegeExternal) GetAllService(c *fiber.Ctx) error {
privileges, err := p.repo.GetAllPrivileges(c.Context())
if err != nil {
return c.Status(fiber.StatusInternalServerError).JSON(fiber.Map{"error": err.Error()})
switch {
case errors.Is(err, our_errors.ErrNotFound):
return c.Status(fiber.StatusNotFound).JSON(fiber.Map{"error": "Privileges not found"})
default:
return c.Status(fiber.StatusInternalServerError).JSON(fiber.Map{"error": err.Error()})
}
}
return c.Status(fiber.StatusOK).JSON(tools.ConvertPrivilegesToMap(privileges))
}

@ -32,8 +32,14 @@ func NewPrivilegeInternal(deps Deps) *PrivilegeInternal {
func (p *PrivilegeInternal) Get(c *fiber.Ctx) error {
privileges, err := p.repo.GetAllPrivileges(c.Context())
if err != nil {
return c.Status(fiber.StatusInternalServerError).JSON(fiber.Map{"error": err.Error()})
switch {
case errors.Is(err, our_errors.ErrNotFound):
return c.Status(fiber.StatusNotFound).JSON(fiber.Map{"error": "Privileges not found"})
default:
return c.Status(fiber.StatusInternalServerError).JSON(fiber.Map{"error": err.Error()})
}
}
return c.Status(fiber.StatusOK).JSON(privileges)
}
@ -114,12 +120,41 @@ func (p *PrivilegeInternal) Delete(c *fiber.Ctx) error {
// хаб нода getPrivilege
func (p *PrivilegeInternal) GetByID(c *fiber.Ctx) error {
return c.SendStatus(http.StatusOK)
privilegeID := c.Params("privilegeId")
if privilegeID == "" {
return c.Status(fiber.StatusBadRequest).JSON(fiber.Map{"error": "Privilege ID is required"})
}
result, err := p.repo.GetByID(c.Context(), privilegeID)
if err != nil {
switch {
case errors.Is(err, our_errors.ErrNotFound):
return c.Status(fiber.StatusNotFound).JSON(fiber.Map{"error": "Privilege not found"})
default:
return c.Status(fiber.StatusInternalServerError).JSON(fiber.Map{"error": err.Error()})
}
}
return c.Status(fiber.StatusOK).JSON(result)
}
// хаб нода getServicePrivileges
func (p *PrivilegeInternal) GetByService(c *fiber.Ctx) error {
return c.SendStatus(http.StatusOK)
serviceKey := c.Params("serviceKey")
if serviceKey == "" {
return c.Status(fiber.StatusBadRequest).JSON(fiber.Map{"error": "Service key is required"})
}
result, err := p.repo.GetByServiceKey(c.Context(), serviceKey)
if err != nil {
switch {
case errors.Is(err, our_errors.ErrNotFound):
return c.Status(fiber.StatusNotFound).JSON(fiber.Map{"error": "Privileges not found"})
default:
return c.Status(fiber.StatusInternalServerError).JSON(fiber.Map{"error": err.Error()})
}
}
return c.Status(fiber.StatusOK).JSON(result)
}
// хаб нода registerPrivileges

@ -35,6 +35,9 @@ func (p *Privilege) GetAllPrivileges(ctx context.Context) ([]models.Privilege, e
cursor, err := p.mdb.Find(ctx, filter, opts)
if err != nil {
if err == mongo.ErrNoDocuments {
return nil, errors.ErrNotFound
}
p.logger.Error("failed to find privileges", zap.Error(err))
return nil, err
}
@ -143,3 +146,48 @@ func (p *Privilege) Delete(ctx context.Context, id string) (models.Privilege, er
return privilege, nil
}
func (p *Privilege) GetByID(ctx context.Context, id string) (models.Privilege, error) {
var privilege models.Privilege
filter := bson.M{
"privilegeId": id,
"isDeleted": false,
}
err := p.mdb.FindOne(ctx, filter).Decode(&privilege)
if err != nil {
if err == mongo.ErrNoDocuments {
return models.Privilege{}, errors.ErrNotFound
}
p.logger.Error("failed to get privilege by privilege id", zap.Error(err))
return models.Privilege{}, err
}
return privilege, nil
}
func (p *Privilege) GetByServiceKey(ctx context.Context, serviceKey string) ([]models.Privilege, error) {
filter := bson.M{
"serviceKey": serviceKey,
"isDeleted": false,
}
opts := options.Find()
cursor, err := p.mdb.Find(ctx, filter, opts)
if err != nil {
if err == mongo.ErrNoDocuments {
return nil, errors.ErrNotFound
}
p.logger.Error("failed to find privileges by service key", 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
}