diff --git a/internal/controller/privilege_external/controller.go b/internal/controller/privilege_external/controller.go index 20a5a01..234cfcd 100644 --- a/internal/controller/privilege_external/controller.go +++ b/internal/controller/privilege_external/controller.go @@ -4,7 +4,7 @@ import ( "github.com/gofiber/fiber/v2" "go.uber.org/zap" "hub_admin_backend_service/internal/repository/privilege" - "net/http" + "hub_admin_backend_service/internal/tools" ) type Deps struct { @@ -24,6 +24,11 @@ func NewPrivilegeExternal(deps Deps) *PrivilegeExternal { } } +// хаб нода getAllPrivilegesMap func (p *PrivilegeExternal) GetAllService(c *fiber.Ctx) error { - return c.SendStatus(http.StatusOK) + privileges, err := p.repo.GetAllPrivileges(c.Context()) + if err != nil { + 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_external/route.go b/internal/controller/privilege_external/route.go index 1827ea9..0a6c147 100644 --- a/internal/controller/privilege_external/route.go +++ b/internal/controller/privilege_external/route.go @@ -5,9 +5,9 @@ import ( ) func (p *PrivilegeExternal) Register(router fiber.Router) { - router.Get("/privilege/service", p.GetAllService) + router.Get("/service", p.GetAllService) } func (p *PrivilegeExternal) Name() string { - return "" + return "privilege" } diff --git a/internal/controller/privilege_internal/controller.go b/internal/controller/privilege_internal/controller.go index a3fdc9f..8788794 100644 --- a/internal/controller/privilege_internal/controller.go +++ b/internal/controller/privilege_internal/controller.go @@ -24,38 +24,51 @@ func NewPrivilegeInternal(deps Deps) *PrivilegeInternal { } } +// хаб нода getAllPrivileges func (p *PrivilegeInternal) Get(c *fiber.Ctx) error { - return c.SendStatus(http.StatusOK) + privileges, err := p.repo.GetAllPrivileges(c.Context()) + if err != nil { + return c.Status(fiber.StatusInternalServerError).JSON(fiber.Map{"error": err.Error()}) + } + return c.Status(fiber.StatusOK).JSON(privileges) } +// хаб нода registerPrivilege func (p *PrivilegeInternal) Create(c *fiber.Ctx) error { return c.SendStatus(http.StatusCreated) } +// хаб нода replacePrivilege func (p *PrivilegeInternal) Update(c *fiber.Ctx) error { return c.SendStatus(http.StatusOK) } +// хаб нода removePrivilege func (p *PrivilegeInternal) Delete(c *fiber.Ctx) error { return c.SendStatus(http.StatusNoContent) } +// хаб нода getPrivilege func (p *PrivilegeInternal) GetByID(c *fiber.Ctx) error { return c.SendStatus(http.StatusOK) } +// хаб нода getServicePrivileges func (p *PrivilegeInternal) GetByService(c *fiber.Ctx) error { return c.SendStatus(http.StatusOK) } +// хаб нода registerPrivileges func (p *PrivilegeInternal) PostMany(c *fiber.Ctx) error { return c.SendStatus(http.StatusCreated) } +// хаб нода replacePrivileges func (p *PrivilegeInternal) UpdateMany(c *fiber.Ctx) error { return c.SendStatus(http.StatusOK) } +// хаб нода restorePrivilege func (p *PrivilegeInternal) Restore(c *fiber.Ctx) error { return c.SendStatus(http.StatusOK) } diff --git a/internal/controller/privilege_internal/route.go b/internal/controller/privilege_internal/route.go index 1fbc263..77de42b 100644 --- a/internal/controller/privilege_internal/route.go +++ b/internal/controller/privilege_internal/route.go @@ -3,18 +3,18 @@ package privilege_internal import "github.com/gofiber/fiber/v2" func (p *PrivilegeInternal) Register(router fiber.Router) { - router.Get("/privilege", p.Get) - router.Post("/privilege", p.Create) - router.Put("/privilege", p.Update) - router.Delete("/privilege", p.Delete) - router.Get("/privilege/:privilegeId", p.GetByID) - router.Get("/privilege/service/:serviceKey", p.GetByService) - router.Post("/privilege/many", p.PostMany) - router.Put("/privilege/many", p.UpdateMany) - router.Post("/privilege/restore", p.Restore) + router.Get("/", p.Get) + router.Post("/", p.Create) + router.Put("/", p.Update) + router.Delete("/", p.Delete) + router.Get("/:privilegeId", p.GetByID) + router.Get("/service/:serviceKey", p.GetByService) + router.Post("/many", p.PostMany) + router.Put("/many", p.UpdateMany) + router.Post("/restore", p.Restore) } func (p *PrivilegeInternal) Name() string { - return "" + return "privilege" } diff --git a/internal/initialize/repository.go b/internal/initialize/repository.go index 8f6654d..6f7f078 100644 --- a/internal/initialize/repository.go +++ b/internal/initialize/repository.go @@ -18,7 +18,7 @@ type Repository struct { func NewRepository(deps RepositoryDeps) *Repository { return &Repository{ PrivilegeRepo: privilege.NewPrivilegeRepo(privilege.Deps{ - Mdb: deps.Mdb.Collection(""), + Mdb: deps.Mdb.Collection("privileges"), Logger: deps.Logger, }), } diff --git a/internal/repository/privilege/privilege.go b/internal/repository/privilege/privilege.go index 7758eab..4fab428 100644 --- a/internal/repository/privilege/privilege.go +++ b/internal/repository/privilege/privilege.go @@ -1,8 +1,12 @@ package privilege import ( + "context" + "go.mongodb.org/mongo-driver/bson" "go.mongodb.org/mongo-driver/mongo" + "go.mongodb.org/mongo-driver/mongo/options" "go.uber.org/zap" + "hub_admin_backend_service/internal/models" ) type Deps struct { @@ -21,3 +25,23 @@ func NewPrivilegeRepo(deps Deps) *Privilege { 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 +} diff --git a/internal/tools/convertToMap.go b/internal/tools/convertToMap.go new file mode 100644 index 0000000..6b2d01b --- /dev/null +++ b/internal/tools/convertToMap.go @@ -0,0 +1,17 @@ +package tools + +import "hub_admin_backend_service/internal/models" + +func ConvertPrivilegesToMap(privileges []models.Privilege) map[string][]models.Privilege { + resultMap := make(map[string][]models.Privilege) + + for _, privilege := range privileges { + svcKey := privilege.ServiceKey + if _, ok := resultMap[svcKey]; !ok { + resultMap[svcKey] = []models.Privilege{} + } + resultMap[svcKey] = append(resultMap[svcKey], privilege) + } + + return resultMap +}