package initialize import ( "github.com/gofiber/fiber/v2" "go.uber.org/zap" "gitea.pena/PenaSide/feedback/internal/client" "gitea.pena/PenaSide/feedback/internal/controller" "gitea.pena/PenaSide/feedback/internal/repository" "reflect" ) type Controller interface { Register() (method, path, name string, handler fiber.Handler) Handler(c *fiber.Ctx) error } type Controllers struct { Feedback *controller.FeedbackController } // List - возвращает список контроллеров func (c *Controllers) List() []Controller { fields := reflect.ValueOf(c).Elem() var controllers []Controller for i := 0; i < fields.NumField(); i++ { vf := fields.Field(i) if vf.Type().Implements(reflect.TypeOf((*Controller)(nil)).Elem()) { controllers = append(controllers, vf.Interface().(Controller)) } } return controllers } func NewControllers(logger *zap.Logger, rep *repository.FeedbackRepository, tg *client.Telegram) *Controllers { return &Controllers{ Feedback: controller.NewFeedbackController(logger, rep, tg), } }