From 2c86bba235e16fe8e9f6d016b5c7047b21522f97 Mon Sep 17 00:00:00 2001 From: KS Jannette Date: Wed, 4 Mar 2026 23:29:58 -0500 Subject: [PATCH] general cleanup - removed old comments, enforced naming conventions etc --- .gitignore | 2 +- .prettierignore | 2 +- Makefile | 2 +- README.md | 8 +++---- backend-go/.env.example | 20 ------------------ {backend-go => backend}/.gitignore | 0 {backend-go => backend}/.golangci.yml | 0 {backend-go => backend}/ENV_TEMPLATE.md | 0 {backend-go => backend}/Makefile | 0 {backend-go => backend}/README.md | 8 +++---- {backend-go => backend}/api | Bin {backend-go => backend}/cmd/api/main.go | 14 ++++++------ {backend-go => backend}/cmd/poller/main.go | 10 ++++----- {backend-go => backend}/go.mod | 2 +- {backend-go => backend}/go.sum | 0 .../infra/migrations/001_add_user_id.sql | 0 .../002_add_notification_config.sql | 0 .../migrations/003_add_slack_webhook.sql | 0 .../migrations/004_alert_event_dedup.sql | 0 .../migrations/005_create_users_table.sql | 0 .../006_migrate_user_ids_to_uuid.sql | 0 .../migrations/007_add_stripe_to_users.sql | 0 {backend-go => backend}/infra/schema.sql | 0 .../internal/config/config.go | 0 .../internal/database/postgres.go | 0 .../internal/domain/types.go | 8 ++----- .../internal/firebase/admin.go | 0 .../internal/handlers/address.go | 6 +++--- .../internal/handlers/alert_event.go | 6 +++--- .../internal/handlers/alert_rule.go | 6 +++--- .../internal/handlers/alert_rule_test.go | 0 .../internal/handlers/email_digest.go | 6 +++--- .../internal/handlers/helpers.go | 0 .../internal/handlers/notification_config.go | 10 ++++----- .../internal/handlers/status.go | 2 +- .../internal/handlers/stripe.go | 6 +++--- .../internal/middleware/auth.go | 4 ++-- .../internal/models/address.go | 2 +- .../internal/models/alert_event.go | 2 +- .../internal/models/alert_rule.go | 2 +- .../internal/models/checkpoint.go | 2 +- .../internal/models/notification_config.go | 2 +- .../internal/models/user.go | 2 +- .../internal/notifications/discord.go | 5 +---- .../internal/notifications/email.go | 2 -- .../internal/notifications/notifier.go | 1 - .../internal/notifications/slack.go | 0 .../internal/notifications/telegram.go | 0 .../internal/protocols/ethereum/jsonrpc.go | 2 +- .../internal/protocols/ethereum/observer.go | 2 +- .../internal/protocols/ethereum/tokens.go | 0 .../internal/services/email_digest.go | 7 ++---- .../internal/services/evaluator.go | 10 ++++----- .../internal/services/observer.go | 6 +++--- .../internal/wei/converter.go | 0 55 files changed, 68 insertions(+), 101 deletions(-) delete mode 100644 backend-go/.env.example rename {backend-go => backend}/.gitignore (100%) rename {backend-go => backend}/.golangci.yml (100%) rename {backend-go => backend}/ENV_TEMPLATE.md (100%) rename {backend-go => backend}/Makefile (100%) rename {backend-go => backend}/README.md (55%) rename {backend-go => backend}/api (100%) rename {backend-go => backend}/cmd/api/main.go (92%) rename {backend-go => backend}/cmd/poller/main.go (92%) rename {backend-go => backend}/go.mod (98%) rename {backend-go => backend}/go.sum (100%) rename {backend-go => backend}/infra/migrations/001_add_user_id.sql (100%) rename {backend-go => backend}/infra/migrations/002_add_notification_config.sql (100%) rename {backend-go => backend}/infra/migrations/003_add_slack_webhook.sql (100%) rename {backend-go => backend}/infra/migrations/004_alert_event_dedup.sql (100%) rename {backend-go => backend}/infra/migrations/005_create_users_table.sql (100%) rename {backend-go => backend}/infra/migrations/006_migrate_user_ids_to_uuid.sql (100%) rename {backend-go => backend}/infra/migrations/007_add_stripe_to_users.sql (100%) rename {backend-go => backend}/infra/schema.sql (100%) rename {backend-go => backend}/internal/config/config.go (100%) rename {backend-go => backend}/internal/database/postgres.go (100%) rename {backend-go => backend}/internal/domain/types.go (92%) rename {backend-go => backend}/internal/firebase/admin.go (100%) rename {backend-go => backend}/internal/handlers/address.go (95%) rename {backend-go => backend}/internal/handlers/alert_event.go (87%) rename {backend-go => backend}/internal/handlers/alert_rule.go (97%) rename {backend-go => backend}/internal/handlers/alert_rule_test.go (100%) rename {backend-go => backend}/internal/handlers/email_digest.go (94%) rename {backend-go => backend}/internal/handlers/helpers.go (100%) rename {backend-go => backend}/internal/handlers/notification_config.go (95%) rename {backend-go => backend}/internal/handlers/status.go (96%) rename {backend-go => backend}/internal/handlers/stripe.go (97%) rename {backend-go => backend}/internal/middleware/auth.go (97%) rename {backend-go => backend}/internal/models/address.go (98%) rename {backend-go => backend}/internal/models/alert_event.go (97%) rename {backend-go => backend}/internal/models/alert_rule.go (98%) rename {backend-go => backend}/internal/models/checkpoint.go (97%) rename {backend-go => backend}/internal/models/notification_config.go (98%) rename {backend-go => backend}/internal/models/user.go (97%) rename {backend-go => backend}/internal/notifications/discord.go (94%) rename {backend-go => backend}/internal/notifications/email.go (97%) rename {backend-go => backend}/internal/notifications/notifier.go (81%) rename {backend-go => backend}/internal/notifications/slack.go (100%) rename {backend-go => backend}/internal/notifications/telegram.go (100%) rename {backend-go => backend}/internal/protocols/ethereum/jsonrpc.go (99%) rename {backend-go => backend}/internal/protocols/ethereum/observer.go (90%) rename {backend-go => backend}/internal/protocols/ethereum/tokens.go (100%) rename {backend-go => backend}/internal/services/email_digest.go (94%) rename {backend-go => backend}/internal/services/evaluator.go (96%) rename {backend-go => backend}/internal/services/observer.go (94%) rename {backend-go => backend}/internal/wei/converter.go (100%) diff --git a/.gitignore b/.gitignore index 74ca0af..57df8aa 100644 --- a/.gitignore +++ b/.gitignore @@ -21,7 +21,7 @@ node_modules/ *.key # Go build artifacts -backend-go/bin/ +backend/bin/ *.exe *.exe~ *.dll diff --git a/.prettierignore b/.prettierignore index 088f24d..6d5ad29 100644 --- a/.prettierignore +++ b/.prettierignore @@ -1,7 +1,7 @@ node_modules/ frontend/dist/ frontend/build/ -backend-go/bin/ +backend/bin/ *.lock Prompts/ .claude/ diff --git a/Makefile b/Makefile index a931fb6..ca19acf 100644 --- a/Makefile +++ b/Makefile @@ -2,7 +2,7 @@ test-go test-js lint-go lint-js fmt-go fmt-js fmt-check-go fmt-check-js \ build-go build-js -GODIR := backend-go +GODIR := backend JSDIR := frontend PRETTIER := $(JSDIR)/node_modules/.bin/prettier diff --git a/README.md b/README.md index eff10a1..848321a 100644 --- a/README.md +++ b/README.md @@ -28,8 +28,8 @@ make hooks cd frontend && npm install && cd .. # Copy and fill in environment variables -cp backend-go/.env.example backend-go/.env -# edit backend-go/.env with your DATABASE_URL, FIREBASE_PROJECT_ID, ETH_RPC_URL +cp backend/.env.example backend/.env +# edit backend/.env with your DATABASE_URL, FIREBASE_PROJECT_ID, ETH_RPC_URL # Run checks (requires golangci-lint) make check @@ -38,7 +38,7 @@ make check make run # Start the poller (separate terminal) -cd backend-go && go run ./cmd/poller +cd backend && go run ./cmd/poller # Start the frontend dev server (separate terminal) cd frontend && npm run dev @@ -63,7 +63,7 @@ frontend: ``` koin_ping_0.2.0/ -├── backend-go/ # Go monorepo root +├── backend/ # Go monorepo root │ ├── cmd/api/ # HTTP REST API server │ ├── cmd/poller/ # Blockchain polling daemon │ └── internal/ diff --git a/backend-go/.env.example b/backend-go/.env.example deleted file mode 100644 index 85f9ef6..0000000 --- a/backend-go/.env.example +++ /dev/null @@ -1,20 +0,0 @@ -# Server -PORT=3001 -API_BASE_PATH=/v1 -NODE_ENV=development - -# Database -DATABASE_URL=postgresql://user:password@localhost:5432/koin_ping - -# Ethereum JSON-RPC -ETH_RPC_URL=https://mainnet.infura.io/v3/YOUR-PROJECT-ID - -# Polling interval (ms, minimum 1000) -POLL_INTERVAL_MS=60000 - -# Firebase -FIREBASE_PROJECT_ID=koin-ping - -# Email notifications (Resend — https://resend.com) -# RESEND_API_KEY=re_xxxxxxxxxxxx -# EMAIL_FROM=Koin Ping diff --git a/backend-go/.gitignore b/backend/.gitignore similarity index 100% rename from backend-go/.gitignore rename to backend/.gitignore diff --git a/backend-go/.golangci.yml b/backend/.golangci.yml similarity index 100% rename from backend-go/.golangci.yml rename to backend/.golangci.yml diff --git a/backend-go/ENV_TEMPLATE.md b/backend/ENV_TEMPLATE.md similarity index 100% rename from backend-go/ENV_TEMPLATE.md rename to backend/ENV_TEMPLATE.md diff --git a/backend-go/Makefile b/backend/Makefile similarity index 100% rename from backend-go/Makefile rename to backend/Makefile diff --git a/backend-go/README.md b/backend/README.md similarity index 55% rename from backend-go/README.md rename to backend/README.md index 4af37f2..25f7123 100644 --- a/backend-go/README.md +++ b/backend/README.md @@ -2,16 +2,16 @@ Start DB: brew services start postgresql@15 -From the backend-go directory, you have a few options: +From the backend directory, you have a few options: Option 1: Single command (both API + poller) -cd /Users/kjannette/workspace/koin_ping_0.2.0/backend-gomake dev-all +cd /Users/kjannette/workspace/koin_ping_0.2.0/backendmake dev-all Option 2: Two separate terminals Terminal 1 (API server): -cd /Users/kjannette/workspace/koin_ping_0.2.0/backend-go go run ./cmd/api +cd /Users/kjannette/workspace/koin_ping_0.2.0/backend go run ./cmd/api Terminal 2 (Poller): -cd /Users/kjannette/workspace/koin_ping_0.2.0/backend-go go run ./cmd/poller +cd /Users/kjannette/workspace/koin_ping_0.2.0/backend go run ./cmd/poller make run — Builds and runs the API server. make dev — Runs the API server with auto-reload via air (falls back to go run if air isn't installed). diff --git a/backend-go/api b/backend/api similarity index 100% rename from backend-go/api rename to backend/api diff --git a/backend-go/cmd/api/main.go b/backend/cmd/api/main.go similarity index 92% rename from backend-go/cmd/api/main.go rename to backend/cmd/api/main.go index 7bbdb1a..97be3be 100644 --- a/backend-go/cmd/api/main.go +++ b/backend/cmd/api/main.go @@ -8,13 +8,13 @@ import ( "time" "github.com/joho/godotenv" - "github.com/kjannette/koin-ping/backend-go/internal/config" - "github.com/kjannette/koin-ping/backend-go/internal/database" - "github.com/kjannette/koin-ping/backend-go/internal/firebase" - "github.com/kjannette/koin-ping/backend-go/internal/handlers" - "github.com/kjannette/koin-ping/backend-go/internal/middleware" - "github.com/kjannette/koin-ping/backend-go/internal/models" - "github.com/kjannette/koin-ping/backend-go/internal/services" + "github.com/kjannette/koin-ping/backend/internal/config" + "github.com/kjannette/koin-ping/backend/internal/database" + "github.com/kjannette/koin-ping/backend/internal/firebase" + "github.com/kjannette/koin-ping/backend/internal/handlers" + "github.com/kjannette/koin-ping/backend/internal/middleware" + "github.com/kjannette/koin-ping/backend/internal/models" + "github.com/kjannette/koin-ping/backend/internal/services" ) const ( diff --git a/backend-go/cmd/poller/main.go b/backend/cmd/poller/main.go similarity index 92% rename from backend-go/cmd/poller/main.go rename to backend/cmd/poller/main.go index ffab945..05dc523 100644 --- a/backend-go/cmd/poller/main.go +++ b/backend/cmd/poller/main.go @@ -12,11 +12,11 @@ import ( "time" "github.com/joho/godotenv" - "github.com/kjannette/koin-ping/backend-go/internal/config" - "github.com/kjannette/koin-ping/backend-go/internal/database" - "github.com/kjannette/koin-ping/backend-go/internal/models" - "github.com/kjannette/koin-ping/backend-go/internal/protocols/ethereum" - "github.com/kjannette/koin-ping/backend-go/internal/services" + "github.com/kjannette/koin-ping/backend/internal/config" + "github.com/kjannette/koin-ping/backend/internal/database" + "github.com/kjannette/koin-ping/backend/internal/models" + "github.com/kjannette/koin-ping/backend/internal/protocols/ethereum" + "github.com/kjannette/koin-ping/backend/internal/services" ) const ( diff --git a/backend-go/go.mod b/backend/go.mod similarity index 98% rename from backend-go/go.mod rename to backend/go.mod index f464778..d04b862 100644 --- a/backend-go/go.mod +++ b/backend/go.mod @@ -1,4 +1,4 @@ -module github.com/kjannette/koin-ping/backend-go +module github.com/kjannette/koin-ping/backend go 1.25.0 diff --git a/backend-go/go.sum b/backend/go.sum similarity index 100% rename from backend-go/go.sum rename to backend/go.sum diff --git a/backend-go/infra/migrations/001_add_user_id.sql b/backend/infra/migrations/001_add_user_id.sql similarity index 100% rename from backend-go/infra/migrations/001_add_user_id.sql rename to backend/infra/migrations/001_add_user_id.sql diff --git a/backend-go/infra/migrations/002_add_notification_config.sql b/backend/infra/migrations/002_add_notification_config.sql similarity index 100% rename from backend-go/infra/migrations/002_add_notification_config.sql rename to backend/infra/migrations/002_add_notification_config.sql diff --git a/backend-go/infra/migrations/003_add_slack_webhook.sql b/backend/infra/migrations/003_add_slack_webhook.sql similarity index 100% rename from backend-go/infra/migrations/003_add_slack_webhook.sql rename to backend/infra/migrations/003_add_slack_webhook.sql diff --git a/backend-go/infra/migrations/004_alert_event_dedup.sql b/backend/infra/migrations/004_alert_event_dedup.sql similarity index 100% rename from backend-go/infra/migrations/004_alert_event_dedup.sql rename to backend/infra/migrations/004_alert_event_dedup.sql diff --git a/backend-go/infra/migrations/005_create_users_table.sql b/backend/infra/migrations/005_create_users_table.sql similarity index 100% rename from backend-go/infra/migrations/005_create_users_table.sql rename to backend/infra/migrations/005_create_users_table.sql diff --git a/backend-go/infra/migrations/006_migrate_user_ids_to_uuid.sql b/backend/infra/migrations/006_migrate_user_ids_to_uuid.sql similarity index 100% rename from backend-go/infra/migrations/006_migrate_user_ids_to_uuid.sql rename to backend/infra/migrations/006_migrate_user_ids_to_uuid.sql diff --git a/backend-go/infra/migrations/007_add_stripe_to_users.sql b/backend/infra/migrations/007_add_stripe_to_users.sql similarity index 100% rename from backend-go/infra/migrations/007_add_stripe_to_users.sql rename to backend/infra/migrations/007_add_stripe_to_users.sql diff --git a/backend-go/infra/schema.sql b/backend/infra/schema.sql similarity index 100% rename from backend-go/infra/schema.sql rename to backend/infra/schema.sql diff --git a/backend-go/internal/config/config.go b/backend/internal/config/config.go similarity index 100% rename from backend-go/internal/config/config.go rename to backend/internal/config/config.go diff --git a/backend-go/internal/database/postgres.go b/backend/internal/database/postgres.go similarity index 100% rename from backend-go/internal/database/postgres.go rename to backend/internal/database/postgres.go diff --git a/backend-go/internal/domain/types.go b/backend/internal/domain/types.go similarity index 92% rename from backend-go/internal/domain/types.go rename to backend/internal/domain/types.go index 88fab63..548debb 100644 --- a/backend-go/internal/domain/types.go +++ b/backend/internal/domain/types.go @@ -47,7 +47,7 @@ var ThresholdRequiredTypes = []AlertType{ //nolint:gochecknoglobals AlertBalanceBelow, } -// IsValidAlertType returns true if the given string matches a known AlertType. +// returns true if the given string matches a known AlertType. func IsValidAlertType(t string) bool { for _, v := range ValidAlertTypes { if string(v) == t { @@ -58,7 +58,6 @@ func IsValidAlertType(t string) bool { return false } -// IsThresholdRequired returns true if the given AlertType requires a threshold. func IsThresholdRequired(t AlertType) bool { for _, v := range ThresholdRequiredTypes { if v == t { @@ -93,7 +92,6 @@ type AddressCheckpoint struct { LastCheckedAt time.Time `json:"last_checked_at"` //nolint:tagliatelle } -// CheckpointDetail combines checkpoint and address info for reporting. type CheckpointDetail struct { AddressID int `json:"address_id"` //nolint:tagliatelle Address string `json:"address"` @@ -102,7 +100,7 @@ type CheckpointDetail struct { LastCheckedAt time.Time `json:"last_checked_at"` //nolint:tagliatelle } -// NotificationConfig holds a user's notification preferences. +// holds a user's notification preferences. type NotificationConfig struct { UserID string `json:"user_id"` //nolint:tagliatelle DiscordWebhookURL *string `json:"discord_webhook_url"` //nolint:tagliatelle @@ -131,14 +129,12 @@ type NormalizedTx struct { TokenValue *string `json:"token_value,omitempty"` //nolint:tagliatelle } -// IsTokenTransfer returns true if this transaction represents an ERC-20 token transfer. func (tx NormalizedTx) IsTokenTransfer() bool { return tx.TokenContract != nil } type Direction string -// String implements fmt.Stringer. func (d Direction) String() string { return string(d) } const ( diff --git a/backend-go/internal/firebase/admin.go b/backend/internal/firebase/admin.go similarity index 100% rename from backend-go/internal/firebase/admin.go rename to backend/internal/firebase/admin.go diff --git a/backend-go/internal/handlers/address.go b/backend/internal/handlers/address.go similarity index 95% rename from backend-go/internal/handlers/address.go rename to backend/internal/handlers/address.go index f907963..63e1b6b 100644 --- a/backend-go/internal/handlers/address.go +++ b/backend/internal/handlers/address.go @@ -8,9 +8,9 @@ import ( "regexp" "strings" - "github.com/kjannette/koin-ping/backend-go/internal/domain" - "github.com/kjannette/koin-ping/backend-go/internal/middleware" - "github.com/kjannette/koin-ping/backend-go/internal/models" + "github.com/kjannette/koin-ping/backend/internal/domain" + "github.com/kjannette/koin-ping/backend/internal/middleware" + "github.com/kjannette/koin-ping/backend/internal/models" ) var ethAddressRe = regexp.MustCompile(`^0x[a-fA-F0-9]{40}$`) diff --git a/backend-go/internal/handlers/alert_event.go b/backend/internal/handlers/alert_event.go similarity index 87% rename from backend-go/internal/handlers/alert_event.go rename to backend/internal/handlers/alert_event.go index 0e22de2..90a8fd9 100644 --- a/backend-go/internal/handlers/alert_event.go +++ b/backend/internal/handlers/alert_event.go @@ -5,9 +5,9 @@ import ( "net/http" "strconv" - "github.com/kjannette/koin-ping/backend-go/internal/domain" - "github.com/kjannette/koin-ping/backend-go/internal/middleware" - "github.com/kjannette/koin-ping/backend-go/internal/models" + "github.com/kjannette/koin-ping/backend/internal/domain" + "github.com/kjannette/koin-ping/backend/internal/middleware" + "github.com/kjannette/koin-ping/backend/internal/models" ) // AlertEventHandler handles HTTP requests for alert event history. diff --git a/backend-go/internal/handlers/alert_rule.go b/backend/internal/handlers/alert_rule.go similarity index 97% rename from backend-go/internal/handlers/alert_rule.go rename to backend/internal/handlers/alert_rule.go index d726bf3..962127a 100644 --- a/backend-go/internal/handlers/alert_rule.go +++ b/backend/internal/handlers/alert_rule.go @@ -9,9 +9,9 @@ import ( "strconv" "strings" - "github.com/kjannette/koin-ping/backend-go/internal/domain" - "github.com/kjannette/koin-ping/backend-go/internal/middleware" - "github.com/kjannette/koin-ping/backend-go/internal/models" + "github.com/kjannette/koin-ping/backend/internal/domain" + "github.com/kjannette/koin-ping/backend/internal/middleware" + "github.com/kjannette/koin-ping/backend/internal/models" ) var errThresholdFormat = errors.New("unsupported threshold format") diff --git a/backend-go/internal/handlers/alert_rule_test.go b/backend/internal/handlers/alert_rule_test.go similarity index 100% rename from backend-go/internal/handlers/alert_rule_test.go rename to backend/internal/handlers/alert_rule_test.go diff --git a/backend-go/internal/handlers/email_digest.go b/backend/internal/handlers/email_digest.go similarity index 94% rename from backend-go/internal/handlers/email_digest.go rename to backend/internal/handlers/email_digest.go index 242376e..74ce89f 100644 --- a/backend-go/internal/handlers/email_digest.go +++ b/backend/internal/handlers/email_digest.go @@ -4,9 +4,9 @@ import ( "log" "net/http" - "github.com/kjannette/koin-ping/backend-go/internal/middleware" - "github.com/kjannette/koin-ping/backend-go/internal/models" - "github.com/kjannette/koin-ping/backend-go/internal/services" + "github.com/kjannette/koin-ping/backend/internal/middleware" + "github.com/kjannette/koin-ping/backend/internal/models" + "github.com/kjannette/koin-ping/backend/internal/services" ) type EmailDigestHandler struct { diff --git a/backend-go/internal/handlers/helpers.go b/backend/internal/handlers/helpers.go similarity index 100% rename from backend-go/internal/handlers/helpers.go rename to backend/internal/handlers/helpers.go diff --git a/backend-go/internal/handlers/notification_config.go b/backend/internal/handlers/notification_config.go similarity index 95% rename from backend-go/internal/handlers/notification_config.go rename to backend/internal/handlers/notification_config.go index c896cc7..d48b9dd 100644 --- a/backend-go/internal/handlers/notification_config.go +++ b/backend/internal/handlers/notification_config.go @@ -7,11 +7,11 @@ import ( "regexp" "strings" - "github.com/kjannette/koin-ping/backend-go/internal/config" - "github.com/kjannette/koin-ping/backend-go/internal/domain" - "github.com/kjannette/koin-ping/backend-go/internal/middleware" - "github.com/kjannette/koin-ping/backend-go/internal/models" - "github.com/kjannette/koin-ping/backend-go/internal/notifications" + "github.com/kjannette/koin-ping/backend/internal/config" + "github.com/kjannette/koin-ping/backend/internal/domain" + "github.com/kjannette/koin-ping/backend/internal/middleware" + "github.com/kjannette/koin-ping/backend/internal/models" + "github.com/kjannette/koin-ping/backend/internal/notifications" ) var emailRe = regexp.MustCompile(`^[^\s@]+@[^\s@]+\.[^\s@]+$`) diff --git a/backend-go/internal/handlers/status.go b/backend/internal/handlers/status.go similarity index 96% rename from backend-go/internal/handlers/status.go rename to backend/internal/handlers/status.go index aac320a..18180f1 100644 --- a/backend-go/internal/handlers/status.go +++ b/backend/internal/handlers/status.go @@ -5,7 +5,7 @@ import ( "net/http" "time" - "github.com/kjannette/koin-ping/backend-go/internal/models" + "github.com/kjannette/koin-ping/backend/internal/models" ) // StatusHandler handles the system status endpoint. diff --git a/backend-go/internal/handlers/stripe.go b/backend/internal/handlers/stripe.go similarity index 97% rename from backend-go/internal/handlers/stripe.go rename to backend/internal/handlers/stripe.go index 55b50cd..ac56290 100644 --- a/backend-go/internal/handlers/stripe.go +++ b/backend/internal/handlers/stripe.go @@ -10,9 +10,9 @@ import ( checkoutsession "github.com/stripe/stripe-go/v82/checkout/session" "github.com/stripe/stripe-go/v82/webhook" - "github.com/kjannette/koin-ping/backend-go/internal/config" - "github.com/kjannette/koin-ping/backend-go/internal/middleware" - "github.com/kjannette/koin-ping/backend-go/internal/models" + "github.com/kjannette/koin-ping/backend/internal/config" + "github.com/kjannette/koin-ping/backend/internal/middleware" + "github.com/kjannette/koin-ping/backend/internal/models" ) const webhookMaxBodyBytes = 65536 diff --git a/backend-go/internal/middleware/auth.go b/backend/internal/middleware/auth.go similarity index 97% rename from backend-go/internal/middleware/auth.go rename to backend/internal/middleware/auth.go index b142191..b9f3306 100644 --- a/backend-go/internal/middleware/auth.go +++ b/backend/internal/middleware/auth.go @@ -8,8 +8,8 @@ import ( "net/http" "strings" - fbauth "github.com/kjannette/koin-ping/backend-go/internal/firebase" - "github.com/kjannette/koin-ping/backend-go/internal/models" + fbauth "github.com/kjannette/koin-ping/backend/internal/firebase" + "github.com/kjannette/koin-ping/backend/internal/models" ) type contextKey string diff --git a/backend-go/internal/models/address.go b/backend/internal/models/address.go similarity index 98% rename from backend-go/internal/models/address.go rename to backend/internal/models/address.go index 42d16ad..75ffdab 100644 --- a/backend-go/internal/models/address.go +++ b/backend/internal/models/address.go @@ -6,7 +6,7 @@ import ( "github.com/jackc/pgx/v5" "github.com/jackc/pgx/v5/pgxpool" - "github.com/kjannette/koin-ping/backend-go/internal/domain" + "github.com/kjannette/koin-ping/backend/internal/domain" ) type AddressModel struct { diff --git a/backend-go/internal/models/alert_event.go b/backend/internal/models/alert_event.go similarity index 97% rename from backend-go/internal/models/alert_event.go rename to backend/internal/models/alert_event.go index 3f68553..241d074 100644 --- a/backend-go/internal/models/alert_event.go +++ b/backend/internal/models/alert_event.go @@ -6,7 +6,7 @@ import ( "github.com/jackc/pgx/v5" "github.com/jackc/pgx/v5/pgxpool" - "github.com/kjannette/koin-ping/backend-go/internal/domain" + "github.com/kjannette/koin-ping/backend/internal/domain" ) type AlertEventModel struct { diff --git a/backend-go/internal/models/alert_rule.go b/backend/internal/models/alert_rule.go similarity index 98% rename from backend-go/internal/models/alert_rule.go rename to backend/internal/models/alert_rule.go index 809009b..bbcaf55 100644 --- a/backend-go/internal/models/alert_rule.go +++ b/backend/internal/models/alert_rule.go @@ -6,7 +6,7 @@ import ( "github.com/jackc/pgx/v5" "github.com/jackc/pgx/v5/pgxpool" - "github.com/kjannette/koin-ping/backend-go/internal/domain" + "github.com/kjannette/koin-ping/backend/internal/domain" ) type AlertRuleModel struct { diff --git a/backend-go/internal/models/checkpoint.go b/backend/internal/models/checkpoint.go similarity index 97% rename from backend-go/internal/models/checkpoint.go rename to backend/internal/models/checkpoint.go index 0be5831..43b04ff 100644 --- a/backend-go/internal/models/checkpoint.go +++ b/backend/internal/models/checkpoint.go @@ -7,7 +7,7 @@ import ( "github.com/jackc/pgx/v5" "github.com/jackc/pgx/v5/pgxpool" - "github.com/kjannette/koin-ping/backend-go/internal/domain" + "github.com/kjannette/koin-ping/backend/internal/domain" ) type CheckpointModel struct { diff --git a/backend-go/internal/models/notification_config.go b/backend/internal/models/notification_config.go similarity index 98% rename from backend-go/internal/models/notification_config.go rename to backend/internal/models/notification_config.go index 6606a41..1d66325 100644 --- a/backend-go/internal/models/notification_config.go +++ b/backend/internal/models/notification_config.go @@ -6,7 +6,7 @@ import ( "github.com/jackc/pgx/v5" "github.com/jackc/pgx/v5/pgxpool" - "github.com/kjannette/koin-ping/backend-go/internal/domain" + "github.com/kjannette/koin-ping/backend/internal/domain" ) type NotificationConfigModel struct { diff --git a/backend-go/internal/models/user.go b/backend/internal/models/user.go similarity index 97% rename from backend-go/internal/models/user.go rename to backend/internal/models/user.go index c81ab34..a271bd0 100644 --- a/backend-go/internal/models/user.go +++ b/backend/internal/models/user.go @@ -6,7 +6,7 @@ import ( "github.com/jackc/pgx/v5" "github.com/jackc/pgx/v5/pgxpool" - "github.com/kjannette/koin-ping/backend-go/internal/domain" + "github.com/kjannette/koin-ping/backend/internal/domain" ) type UserModel struct { diff --git a/backend-go/internal/notifications/discord.go b/backend/internal/notifications/discord.go similarity index 94% rename from backend-go/internal/notifications/discord.go rename to backend/internal/notifications/discord.go index 61c576f..c64b5a7 100644 --- a/backend-go/internal/notifications/discord.go +++ b/backend/internal/notifications/discord.go @@ -21,17 +21,14 @@ const ( colorBlue = 0x0099ff ) -// discordHTTPClient is a shared HTTP client with a timeout for Discord requests. var discordHTTPClient = &http.Client{ //nolint:gochecknoglobals Timeout: discordHTTPTimeoutSeconds * time.Second, } -// DiscordNotifier sends alert notifications via a Discord webhook. +// sends alert notifications via a Discord webhook. type DiscordNotifier struct { WebhookURL string } - -// Send implements Notifier for Discord. func (d *DiscordNotifier) Send(_ context.Context, message string, meta AlertMetadata) error { _, err := SendDiscordNotification(d.WebhookURL, message, meta) return err diff --git a/backend-go/internal/notifications/email.go b/backend/internal/notifications/email.go similarity index 97% rename from backend-go/internal/notifications/email.go rename to backend/internal/notifications/email.go index 9bd74fd..2d57c9b 100644 --- a/backend-go/internal/notifications/email.go +++ b/backend/internal/notifications/email.go @@ -10,14 +10,12 @@ import ( "time" ) -// EmailNotifier sends alert notifications via email (Resend). type EmailNotifier struct { APIKey string From string To string } -// Send implements Notifier for email. func (e *EmailNotifier) Send(_ context.Context, message string, meta AlertMetadata) error { _, err := SendEmailNotification(e.APIKey, e.From, e.To, message, meta) return err diff --git a/backend-go/internal/notifications/notifier.go b/backend/internal/notifications/notifier.go similarity index 81% rename from backend-go/internal/notifications/notifier.go rename to backend/internal/notifications/notifier.go index b317fcb..c3eeb2d 100644 --- a/backend-go/internal/notifications/notifier.go +++ b/backend/internal/notifications/notifier.go @@ -10,7 +10,6 @@ type AlertMetadata struct { Address string } -// Notifier is the interface implemented by all notification channels. type Notifier interface { Send(ctx context.Context, message string, meta AlertMetadata) error } diff --git a/backend-go/internal/notifications/slack.go b/backend/internal/notifications/slack.go similarity index 100% rename from backend-go/internal/notifications/slack.go rename to backend/internal/notifications/slack.go diff --git a/backend-go/internal/notifications/telegram.go b/backend/internal/notifications/telegram.go similarity index 100% rename from backend-go/internal/notifications/telegram.go rename to backend/internal/notifications/telegram.go diff --git a/backend-go/internal/protocols/ethereum/jsonrpc.go b/backend/internal/protocols/ethereum/jsonrpc.go similarity index 99% rename from backend-go/internal/protocols/ethereum/jsonrpc.go rename to backend/internal/protocols/ethereum/jsonrpc.go index 4c87eda..ad9237d 100644 --- a/backend-go/internal/protocols/ethereum/jsonrpc.go +++ b/backend/internal/protocols/ethereum/jsonrpc.go @@ -12,7 +12,7 @@ import ( "strings" "time" - "github.com/kjannette/koin-ping/backend-go/internal/domain" + "github.com/kjannette/koin-ping/backend/internal/domain" ) const ( diff --git a/backend-go/internal/protocols/ethereum/observer.go b/backend/internal/protocols/ethereum/observer.go similarity index 90% rename from backend-go/internal/protocols/ethereum/observer.go rename to backend/internal/protocols/ethereum/observer.go index 31f554a..b6e391b 100644 --- a/backend-go/internal/protocols/ethereum/observer.go +++ b/backend/internal/protocols/ethereum/observer.go @@ -3,7 +3,7 @@ package ethereum import ( "context" - "github.com/kjannette/koin-ping/backend-go/internal/domain" + "github.com/kjannette/koin-ping/backend/internal/domain" ) // EthereumObserver defines the interface for blockchain interaction. diff --git a/backend-go/internal/protocols/ethereum/tokens.go b/backend/internal/protocols/ethereum/tokens.go similarity index 100% rename from backend-go/internal/protocols/ethereum/tokens.go rename to backend/internal/protocols/ethereum/tokens.go diff --git a/backend-go/internal/services/email_digest.go b/backend/internal/services/email_digest.go similarity index 94% rename from backend-go/internal/services/email_digest.go rename to backend/internal/services/email_digest.go index 8af3ee3..b2c1a5d 100644 --- a/backend-go/internal/services/email_digest.go +++ b/backend/internal/services/email_digest.go @@ -9,7 +9,7 @@ import ( "net/http" "time" - "github.com/kjannette/koin-ping/backend-go/internal/models" + "github.com/kjannette/koin-ping/backend/internal/models" ) const ( @@ -20,7 +20,7 @@ const ( var digestHTTPClient = &http.Client{Timeout: emailHTTPTimeout} //nolint:gochecknoglobals -// EmailDigestService handles email setup and digest sending via Resend. +// handles email setup and digest sending via Resend. type EmailDigestService struct { apiKey string fromAddress string @@ -66,7 +66,6 @@ func (s *EmailDigestService) SetupEmail(toAddress string) error { return s.send(toAddress, "Koin Ping — Email Alerts Configured", html) } -// SendDigest compiles recent alert events for a user and sends a digest email. func (s *EmailDigestService) SendDigest(ctx context.Context, userID, toAddress string) error { if !s.Configured() { return fmt.Errorf("email service not configured: RESEND_API_KEY not set") //nolint:err113 @@ -131,8 +130,6 @@ func (s *EmailDigestService) SendDigest(ctx context.Context, userID, toAddress s return s.send(toAddress, subject, html) } -// SendDigestsForAllUsers sends a digest email to every user that has -// notifications enabled and an email configured. func (s *EmailDigestService) SendDigestsForAllUsers(ctx context.Context) (int, error) { if !s.Configured() { return 0, nil diff --git a/backend-go/internal/services/evaluator.go b/backend/internal/services/evaluator.go similarity index 96% rename from backend-go/internal/services/evaluator.go rename to backend/internal/services/evaluator.go index 1af176b..6bd125f 100644 --- a/backend-go/internal/services/evaluator.go +++ b/backend/internal/services/evaluator.go @@ -9,11 +9,11 @@ import ( "golang.org/x/sync/semaphore" - "github.com/kjannette/koin-ping/backend-go/internal/domain" - "github.com/kjannette/koin-ping/backend-go/internal/models" - "github.com/kjannette/koin-ping/backend-go/internal/notifications" - "github.com/kjannette/koin-ping/backend-go/internal/protocols/ethereum" - "github.com/kjannette/koin-ping/backend-go/internal/wei" + "github.com/kjannette/koin-ping/backend/internal/domain" + "github.com/kjannette/koin-ping/backend/internal/models" + "github.com/kjannette/koin-ping/backend/internal/notifications" + "github.com/kjannette/koin-ping/backend/internal/protocols/ethereum" + "github.com/kjannette/koin-ping/backend/internal/wei" ) const ( diff --git a/backend-go/internal/services/observer.go b/backend/internal/services/observer.go similarity index 94% rename from backend-go/internal/services/observer.go rename to backend/internal/services/observer.go index 6449912..c7323da 100644 --- a/backend-go/internal/services/observer.go +++ b/backend/internal/services/observer.go @@ -5,9 +5,9 @@ import ( "log" "strings" - "github.com/kjannette/koin-ping/backend-go/internal/domain" - "github.com/kjannette/koin-ping/backend-go/internal/models" - "github.com/kjannette/koin-ping/backend-go/internal/protocols/ethereum" + "github.com/kjannette/koin-ping/backend/internal/domain" + "github.com/kjannette/koin-ping/backend/internal/models" + "github.com/kjannette/koin-ping/backend/internal/protocols/ethereum" ) const maxBlocksPerRun = 100 diff --git a/backend-go/internal/wei/converter.go b/backend/internal/wei/converter.go similarity index 100% rename from backend-go/internal/wei/converter.go rename to backend/internal/wei/converter.go