package initialize import ( "reflect" "verification/internal/client" "verification/internal/controllers" ) type Controller interface { GetRoutes() []controllers.Route } type Controllers struct { Verification *controllers.VerificationController } func (c *Controllers) List() []Controller { fields := reflect.ValueOf(c).Elem() var controllersArr []Controller for i := 0; i < fields.NumField(); i++ { vf := fields.Field(i) if vf.Type().Implements(reflect.TypeOf((*Controller)(nil)).Elem()) { controllersArr = append(controllersArr, vf.Interface().(Controller)) } } return controllersArr } func NewControllers(reps *Repositories, telegram *client.Telegram, customer *client.Customer) *Controllers { return &Controllers{Verification: controllers.NewVerificationController(reps.Verification, telegram, customer)} }