package appapi import ( "context" "io" "net/http" "hyapp/services/gateway-service/internal/appconfig" "hyapp/services/gateway-service/internal/client" ) // ConfigReader 是 gateway 对后台 App 配置的只读依赖。 type ConfigReader interface { ListH5Links(ctx context.Context) ([]appconfig.H5Link, error) ListExploreTabs(ctx context.Context, appCode string) ([]appconfig.ExploreTab, error) ListBanners(ctx context.Context, query appconfig.BannerQuery) ([]appconfig.Banner, error) LatestVersion(ctx context.Context, query appconfig.VersionQuery) (appconfig.Version, error) } // ObjectUploader 是 gateway 上传接口依赖的对象存储最小能力。 type ObjectUploader interface { PutObject(ctx context.Context, key string, reader io.Reader, sizeBytes int64, contentType string) (string, error) } // Handler owns app platform endpoints such as bootstrap, config, upload and device token binding. // It does not own user identity or resource semantics; those remain in their owner services/packages. type Handler struct { appConfigReader ConfigReader userDeviceClient client.UserDeviceClient objectUploader ObjectUploader } type Config struct { AppConfigReader ConfigReader UserDeviceClient client.UserDeviceClient ObjectUploader ObjectUploader } func New(config Config) *Handler { return &Handler{ appConfigReader: config.AppConfigReader, userDeviceClient: config.UserDeviceClient, objectUploader: config.ObjectUploader, } } func (h *Handler) GetAppBootstrap(writer http.ResponseWriter, request *http.Request) { h.getAppBootstrap(writer, request) } func (h *Handler) ListH5Links(writer http.ResponseWriter, request *http.Request) { h.listH5Links(writer, request) } func (h *Handler) ListExploreTabs(writer http.ResponseWriter, request *http.Request) { h.listExploreTabs(writer, request) } func (h *Handler) ListAppBanners(writer http.ResponseWriter, request *http.Request) { h.listAppBanners(writer, request) } func (h *Handler) GetAppVersion(writer http.ResponseWriter, request *http.Request) { h.getAppVersion(writer, request) } func (h *Handler) UploadFile(writer http.ResponseWriter, request *http.Request) { h.uploadFile(writer, request) } func (h *Handler) UploadAvatar(writer http.ResponseWriter, request *http.Request) { h.uploadAvatar(writer, request) } func (h *Handler) ProxyEffectMedia(writer http.ResponseWriter, request *http.Request) { h.proxyEffectMedia(writer, request) } func (h *Handler) HandlePushToken(writer http.ResponseWriter, request *http.Request) { h.handlePushToken(writer, request) }