1. Move region seed into migration
2. Remove region seeding from API startup
3. Modify worker to:
	- read REGION_NAME
	- resolve region_id
	- retry if not found

Step 1 : Move region seed into migration

cd apps/api-go

migrate create -ext sql -dir migrations seed_region

Create migration files

20260225060018_seed_region.up.sql

-- Seed regions (idempotent)
INSERT INTO region (name)
VALUES
  ('ap-south-1'),
  ('us-east-1'),
  ('eu-west-1')
ON CONFLICT (name) DO NOTHING;

20260225060018_seed_region.down.sql

DELETE FROM region
WHERE name IN ('ap-south-1', 'us-east-1', 'eu-west-1');

Run Migrations

 migrate -database "postgres://postgres:postgres@localhost:5432/postgres?sslmode=disable" -path migrations up

Step 2 : Remove region seeding from API startup

internal/app/app.go

// if err := seed.SeedRegion(dbConn); err != nil {
		// 	log.Fatal("failed to seed region:", err)
		// }

After this, API becomes “pure app”, and static data lives in migrations.

Step 3 : Modify worker-monitoring to use REGION_NAME → resolve region_id (with retry)

1. Create internal/repository/region_repository.go

package repository

import "context"

type RegionRepository interface {
	GetRegionIDByName(ctx context.Context, name string) (string, error)
}

2. Create internal/repository/region_repository_pg.go

package repository

import (
	"context"
	"database/sql"

	"github.com/jmoiron/sqlx"
)

type regionRepository struct {
	db *sqlx.DB
}

func NewRegionRepository(db *sqlx.DB) RegionRepository {
	return &regionRepository{db: db}
}

func (r *regionRepository) GetRegionIDByName(
	ctx context.Context,
	name string,
) (string, error) {
	var regionID string
	query := `
	SELECT id FROM region
	WHERE name = $1
	`
	err := r.db.QueryRowxContext(ctx, query, name).Scan(&regionID)
	if err != nil {
		if err == sql.ErrNoRows {
			return "", err // let caller decide retry vs crash
		}
		return "", err
	}
	return regionID, nil
}

3. Create resolveRegionIDWithRetry function at worker monitoring startup