diff --git a/arcgis.go b/arcgis.go index ed8a21fe..471dc258 100644 --- a/arcgis.go +++ b/arcgis.go @@ -85,6 +85,31 @@ func buildArcGISAuthURL(clientID string) string { return baseURL + "?" + params.Encode() } +func downloadFieldseekerSchema(ctx context.Context, fieldseekerClient *fieldseeker.FieldSeeker, arcgis_id string) { + for _, layer := range fieldseekerClient.FeatureServerLayers() { + err := os.MkdirAll(filepath.Join(FieldseekerSchemaDirectory, arcgis_id), os.ModePerm) + if err != nil { + log.Error().Err(err).Msg("Failed to create parent directory") + return + } + output, err := os.Create(fmt.Sprintf("%s/%s/%s.json", FieldseekerSchemaDirectory, arcgis_id, layer.Name)) + if err != nil { + log.Error().Err(err).Msg("Failed to open output") + return + } + schema, err := fieldseekerClient.Schema(layer.ID) + if err != nil { + log.Error().Err(err).Msg("Failed to get schema") + return + } + _, err = output.Write(schema) + if err != nil { + log.Error().Err(err).Msg("Failed to write schema file") + continue + } + } +} + func futureUTCTimestamp(secondsFromNow int) time.Time { return time.Now().UTC().Add(time.Duration(secondsFromNow) * time.Second) } @@ -195,6 +220,7 @@ func updateArcgisUserData(ctx context.Context, user *models.User, access_token s } client.Context = &arcgis_id maybeCreateWebhook(ctx, fieldseekerClient) + downloadFieldseekerSchema(ctx, fieldseekerClient, arcgis_id) clearNotificationsOauth(ctx, user) NewOAuthTokenChannel <- struct{}{} } diff --git a/db/bob b/db/bob index 96da65fd..8e41efed 160000 --- a/db/bob +++ b/db/bob @@ -1 +1 @@ -Subproject commit 96da65fd88a50ae532079e8ea69746183f4af3a1 +Subproject commit 8e41efed4f7ea4782ee7c2d06e2643967cce71d7 diff --git a/main.go b/main.go index 811e44ba..ae38c383 100644 --- a/main.go +++ b/main.go @@ -21,7 +21,7 @@ import ( var sessionManager *scs.SessionManager -var BaseURL, ClientID, ClientSecret, Environment, MapboxToken string +var BaseURL, ClientID, ClientSecret, Environment, FieldseekerSchemaDirectory, MapboxToken string func main() { zerolog.TimeFieldFormat = zerolog.TimeFormatUnix @@ -65,6 +65,11 @@ func main() { log.Error().Msg("You must specify a non-empty POSTGRES_DSN") os.Exit(1) } + FieldseekerSchemaDirectory = os.Getenv("FIELDSEEKER_SCHEMA_DIRECTORY") + if FieldseekerSchemaDirectory == "" { + log.Error().Msg("You must specify a non-empty FIELDSEEKER_SCHEMA_DIRECTORY") + os.Exit(1) + } log.Info().Msg("Starting...") err := db.InitializeDatabase(context.TODO(), pg_dsn)