精简后的项目:仅保留 api/ui 源码、文档、构建依赖
This commit is contained in:
@@ -0,0 +1,48 @@
|
||||
package dataloader
|
||||
|
||||
import (
|
||||
"context"
|
||||
"net/http"
|
||||
|
||||
"github.com/gorilla/mux"
|
||||
"gorm.io/gorm"
|
||||
)
|
||||
|
||||
type contextKey string
|
||||
|
||||
const loadersKey contextKey = "dataloaders"
|
||||
|
||||
type Loaders struct {
|
||||
MediaThumbnail *MediaURLLoader
|
||||
MediaHighres *MediaURLLoader
|
||||
MediaVideoWeb *MediaURLLoader
|
||||
UserFromAccessToken *UserLoader
|
||||
UserMediaFavorite *UserFavoritesLoader
|
||||
}
|
||||
|
||||
func Middleware(db *gorm.DB) mux.MiddlewareFunc {
|
||||
return mux.MiddlewareFunc(func(next http.Handler) http.Handler {
|
||||
return http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
|
||||
|
||||
ctx := context.WithValue(r.Context(), loadersKey, &Loaders{
|
||||
MediaThumbnail: NewThumbnailMediaURLLoader(db),
|
||||
MediaHighres: NewHighresMediaURLLoader(db),
|
||||
MediaVideoWeb: NewVideoWebMediaURLLoader(db),
|
||||
UserFromAccessToken: NewUserLoaderByToken(db),
|
||||
UserMediaFavorite: NewUserFavoriteLoader(db),
|
||||
})
|
||||
|
||||
r = r.WithContext(ctx)
|
||||
|
||||
next.ServeHTTP(w, r)
|
||||
})
|
||||
})
|
||||
}
|
||||
|
||||
func For(ctx context.Context) *Loaders {
|
||||
loaders, ok := ctx.Value(loadersKey).(*Loaders)
|
||||
if !ok {
|
||||
return nil
|
||||
}
|
||||
return loaders
|
||||
}
|
||||
Reference in New Issue
Block a user