package web_api import ( "context" "strconv" "git.itzana.me/strafesnet/maps-service/pkg/api" "git.itzana.me/strafesnet/maps-service/pkg/roblox" ) // BatchAssetThumbnails handles batch fetching of asset thumbnails func (svc *Service) BatchAssetThumbnails(ctx context.Context, req *api.BatchAssetThumbnailsReq) (*api.BatchAssetThumbnailsOK, error) { if len(req.AssetIds) == 0 { return &api.BatchAssetThumbnailsOK{ Thumbnails: api.NewOptBatchAssetThumbnailsOKThumbnails(map[string]string{}), }, nil } // Convert size string to enum size := roblox.Size420x420 if req.Size.IsSet() { sizeStr := req.Size.Value switch api.BatchAssetThumbnailsReqSize(sizeStr) { case api.BatchAssetThumbnailsReqSize150x150: size = roblox.Size150x150 case api.BatchAssetThumbnailsReqSize768x432: size = roblox.Size768x432 } } // Fetch thumbnails from service thumbnails, err := svc.inner.GetAssetThumbnails(ctx, req.AssetIds, size) if err != nil { return nil, err } // Convert map[uint64]string to map[string]string for JSON result := make(map[string]string, len(thumbnails)) for assetID, url := range thumbnails { result[strconv.FormatUint(assetID, 10)] = url } return &api.BatchAssetThumbnailsOK{ Thumbnails: api.NewOptBatchAssetThumbnailsOKThumbnails(result), }, nil } // GetAssetThumbnail handles single asset thumbnail fetch (with redirect) func (svc *Service) GetAssetThumbnail(ctx context.Context, params api.GetAssetThumbnailParams) (*api.GetAssetThumbnailFound, error) { // Convert size string to enum size := roblox.Size420x420 if params.Size.IsSet() { sizeStr := params.Size.Value switch api.GetAssetThumbnailSize(sizeStr) { case api.GetAssetThumbnailSize150x150: size = roblox.Size150x150 case api.GetAssetThumbnailSize768x432: size = roblox.Size768x432 } } // Fetch thumbnail thumbnailURL, err := svc.inner.GetSingleAssetThumbnail(ctx, params.AssetID, size) if err != nil { return nil, err } // Return redirect response return &api.GetAssetThumbnailFound{ Location: api.NewOptString(thumbnailURL), }, nil } // BatchUserThumbnails handles batch fetching of user avatar thumbnails func (svc *Service) BatchUserThumbnails(ctx context.Context, req *api.BatchUserThumbnailsReq) (*api.BatchUserThumbnailsOK, error) { if len(req.UserIds) == 0 { return &api.BatchUserThumbnailsOK{ Thumbnails: api.NewOptBatchUserThumbnailsOKThumbnails(map[string]string{}), }, nil } // Convert size string to enum size := roblox.Size150x150 if req.Size.IsSet() { sizeStr := req.Size.Value switch api.BatchUserThumbnailsReqSize(sizeStr) { case api.BatchUserThumbnailsReqSize420x420: size = roblox.Size420x420 case api.BatchUserThumbnailsReqSize768x432: size = roblox.Size768x432 } } // Fetch thumbnails from service thumbnails, err := svc.inner.GetUserAvatarThumbnails(ctx, req.UserIds, size) if err != nil { return nil, err } // Convert map[uint64]string to map[string]string for JSON result := make(map[string]string, len(thumbnails)) for userID, url := range thumbnails { result[strconv.FormatUint(userID, 10)] = url } return &api.BatchUserThumbnailsOK{ Thumbnails: api.NewOptBatchUserThumbnailsOKThumbnails(result), }, nil } // GetUserThumbnail handles single user avatar thumbnail fetch (with redirect) func (svc *Service) GetUserThumbnail(ctx context.Context, params api.GetUserThumbnailParams) (*api.GetUserThumbnailFound, error) { // Convert size string to enum size := roblox.Size150x150 if params.Size.IsSet() { sizeStr := params.Size.Value switch api.GetUserThumbnailSize(sizeStr) { case api.GetUserThumbnailSize420x420: size = roblox.Size420x420 case api.GetUserThumbnailSize768x432: size = roblox.Size768x432 } } // Fetch thumbnail thumbnailURL, err := svc.inner.GetSingleUserAvatarThumbnail(ctx, params.UserID, size) if err != nil { return nil, err } // Return redirect response return &api.GetUserThumbnailFound{ Location: api.NewOptString(thumbnailURL), }, nil }