diff --git a/internal/controller/privilege_external/controller.go b/internal/controller/privilege_external/controller.go index 234cfcd..cecf522 100644 --- a/internal/controller/privilege_external/controller.go +++ b/internal/controller/privilege_external/controller.go @@ -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)) } diff --git a/internal/controller/privilege_internal/controller.go b/internal/controller/privilege_internal/controller.go index 716fd5a..a6b8050 100644 --- a/internal/controller/privilege_internal/controller.go +++ b/internal/controller/privilege_internal/controller.go @@ -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 diff --git a/internal/repository/privilege/privilege.go b/internal/repository/privilege/privilege.go index f8f9900..3fae0de 100644 --- a/internal/repository/privilege/privilege.go +++ b/internal/repository/privilege/privilege.go @@ -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 +}