Add public GeoJSON features API and load public 3D objects on maps.
CI / test (push) Successful in 3s
CI / test (push) Successful in 3s
Expose GET /v1/features/public (optional kind filter) and update Leaflet/MapLibre demos to render all public 3D assets globally, while still merging owner collections after login. Made-with: Cursor
This commit is contained in:
@@ -395,6 +395,43 @@ func (s *Service) ListFeatures(ownerKey, collectionID string) ([]store.Feature,
|
||||
return features, nil
|
||||
}
|
||||
|
||||
func (s *Service) ListPublicFeatures(kind string) []store.Feature {
|
||||
filterKind := strings.TrimSpace(strings.ToLower(kind))
|
||||
features := s.store.ListFeaturesAll()
|
||||
result := make([]store.Feature, 0, len(features))
|
||||
for idx := range features {
|
||||
featureAssets := s.store.ListAssetsByFeature(features[idx].ID)
|
||||
assets := make([]map[string]interface{}, 0, len(featureAssets))
|
||||
for _, linkedAsset := range featureAssets {
|
||||
if !linkedAsset.IsPublic {
|
||||
continue
|
||||
}
|
||||
if filterKind != "" && linkedAsset.Kind != filterKind {
|
||||
continue
|
||||
}
|
||||
assets = append(assets, map[string]interface{}{
|
||||
"id": linkedAsset.ID,
|
||||
"kind": linkedAsset.Kind,
|
||||
"name": linkedAsset.Name,
|
||||
"description": linkedAsset.Description,
|
||||
"checksum": linkedAsset.Checksum,
|
||||
"ext": linkedAsset.Ext,
|
||||
"isPublic": linkedAsset.IsPublic,
|
||||
"link": "/v1/assets/" + linkedAsset.ID + "/download",
|
||||
})
|
||||
}
|
||||
if len(assets) == 0 {
|
||||
continue
|
||||
}
|
||||
if features[idx].Properties == nil {
|
||||
features[idx].Properties = map[string]interface{}{}
|
||||
}
|
||||
features[idx].Properties["assets"] = assets
|
||||
result = append(result, features[idx])
|
||||
}
|
||||
return result
|
||||
}
|
||||
|
||||
func (s *Service) DeleteFeature(ownerKey, featureID string) error {
|
||||
feature, err := s.store.GetFeature(featureID)
|
||||
if err != nil {
|
||||
|
||||
Reference in New Issue
Block a user