From 63193c5324df0b7e97a25a36485d7d4ab8c8d310 Mon Sep 17 00:00:00 2001 From: Eli Ribble Date: Mon, 9 Feb 2026 21:40:24 +0000 Subject: [PATCH] Add test for doing geocoding directly from esri It works at this point. --- background/arcgis.go | 36 ++++++++++----------- cmd/geocode-test/main.go | 68 ++++++++++++++++++++++++++++++++++++++++ 2 files changed, 86 insertions(+), 18 deletions(-) create mode 100644 cmd/geocode-test/main.go diff --git a/background/arcgis.go b/background/arcgis.go index dad150a7..2c6108f0 100644 --- a/background/arcgis.go +++ b/background/arcgis.go @@ -63,6 +63,23 @@ type OAuthTokenResponse struct { Username string `json:"username"` } +func GetOAuthForOrg(ctx context.Context, org *models.Organization) (*models.OauthToken, error) { + users, err := org.User().All(ctx, db.PGInstance.BobDB) + if err != nil { + return nil, fmt.Errorf("Failed to query all users for org: %w", err) + } + for _, user := range users { + oauths, err := user.UserOauthTokens(models.SelectWhere.OauthTokens.InvalidatedAt.IsNull()).All(ctx, db.PGInstance.BobDB) + if err != nil { + return nil, fmt.Errorf("Failed to query all oauth tokens for org: %w", err) + } + for _, oauth := range oauths { + return oauth, nil + } + } + return nil, &NoOAuthForOrg{} +} + func HandleOauthAccessCode(ctx context.Context, user *models.User, code string) error { baseURL := "https://www.arcgis.com/sharing/rest/oauth2/token/" @@ -415,23 +432,6 @@ func maybeCreateWebhook(ctx context.Context, client *fieldseeker.FieldSeeker) { } } -func getOAuthForOrg(ctx context.Context, org *models.Organization) (*models.OauthToken, error) { - users, err := org.User().All(ctx, db.PGInstance.BobDB) - if err != nil { - return nil, fmt.Errorf("Failed to query all users for org: %w", err) - } - for _, user := range users { - oauths, err := user.UserOauthTokens(models.SelectWhere.OauthTokens.InvalidatedAt.IsNull()).All(ctx, db.PGInstance.BobDB) - if err != nil { - return nil, fmt.Errorf("Failed to query all oauth tokens for org: %w", err) - } - for _, oauth := range oauths { - return oauth, nil - } - } - return nil, &NoOAuthForOrg{} -} - func periodicallyExportFieldseeker(ctx context.Context, org *models.Organization) error { pollTicker := time.NewTicker(1) for { @@ -439,7 +439,7 @@ func periodicallyExportFieldseeker(ctx context.Context, org *models.Organization case <-ctx.Done(): return nil case <-pollTicker.C: - oauth, err := getOAuthForOrg(ctx, org) + oauth, err := GetOAuthForOrg(ctx, org) if err != nil { return fmt.Errorf("Failed to get oauth for org: %w", err) } diff --git a/cmd/geocode-test/main.go b/cmd/geocode-test/main.go new file mode 100644 index 00000000..790082bd --- /dev/null +++ b/cmd/geocode-test/main.go @@ -0,0 +1,68 @@ +package main + +import ( + "context" + "flag" + //"fmt" + "os" + + "github.com/Gleipnir-Technology/arcgis-go" + //fslayer "github.com/Gleipnir-Technology/arcgis-go/fieldseeker/layer" + "github.com/Gleipnir-Technology/nidus-sync/background" + "github.com/Gleipnir-Technology/nidus-sync/config" + "github.com/Gleipnir-Technology/nidus-sync/db" + "github.com/Gleipnir-Technology/nidus-sync/db/models" + "github.com/alexedwards/scs/v2" + //"github.com/google/uuid" + "github.com/rs/zerolog" + "github.com/rs/zerolog/log" +) + +var sessionManager *scs.SessionManager + +var BaseURL, ClientID, ClientSecret, Environment, FieldseekerSchemaDirectory, MapboxToken string + +func main() { + org_id := flag.Int("org", 0, "The ID of the organization to use") + flag.Parse() + if org_id == nil || *org_id == 0 { + log.Error().Msg("You must specify -org_id") + os.Exit(1) + } + err := config.Parse() + if err != nil { + log.Error().Err(err).Msg("Failed to parse config") + os.Exit(2) + } + log.Info().Msg("Starting...") + zerolog.TimeFieldFormat = zerolog.TimeFormatUnix + log.Logger = log.Output(zerolog.ConsoleWriter{Out: os.Stderr}) + + err = db.InitializeDatabase(context.TODO(), config.PGDSN) + if err != nil { + log.Error().Err(err).Msg("Failed to connect to database") + os.Exit(3) + } + + ctx := context.TODO() + org, err := models.FindOrganization(ctx, db.PGInstance.BobDB, int32(*org_id)) + if err != nil { + log.Error().Err(err).Msg("Failed to get org") + os.Exit(4) + } + + oauth, err := background.GetOAuthForOrg(ctx, org) + if err != nil { + log.Error().Err(err).Msg("Failed to get oauth for org") + os.Exit(5) + } + ar := arcgis.NewArcGIS( + arcgis.AuthenticatorOAuth{ + AccessToken: oauth.AccessToken, + AccessTokenExpires: oauth.AccessTokenExpires, + RefreshToken: oauth.RefreshToken, + RefreshTokenExpires: oauth.RefreshTokenExpires, + }, + ) + ar.GeocodeFindAddressCandidates("1 Infinite Loop, Cupertino, CA") +}