From 2ab810be727090e03a4d43e4b378da1108bdb07d Mon Sep 17 00:00:00 2001 From: Elshimy Ziad Magdy Taha Date: Tue, 4 Aug 2026 17:30:04 +0500 Subject: [PATCH] Move shared Go packages from libs/ to internal/ internal/ and libs/ were both shared-code roots with no rule for which one a package belonged in, so the split carried no information. Adopt a rule the language answers by itself: shared Go -> internal/ shared TypeScript -> libs/ (npm workspace packages) libs/{ports,repo,server} move to internal/, leaving libs/ holding only the two TypeScript packages (@jobs-scraper/rabbitmq-ts and @jobs-scraper/browser-automation), which matches npm workspace convention. internal/ is also Go's marker for code not importable from outside the repo, which is accurate here since none of it is published. Import paths are rewritten mechanically (jobs-scraper/libs/ -> jobs-scraper/internal/) across 15 lines in 10 files. The 6 moved files are pure renames with no content change. Doing this after the module collapse in the previous commit meant no go.mod or replace-directive edits were needed. gofmt is applied to services/api/pkg/http/job.go, whose import group the rewrite left out of order. Three files were already unformatted before this refactor (internal/openai/interface.go, internal/ports/job-queries.go, internal/repo/job-analysis-result.go) and are deliberately left alone to keep this diff limited to the move. Co-Authored-By: Claude Opus 5 (1M context) --- apps/cron-analyzer/internal/analyze-jobs.go | 2 +- {libs => internal}/ports/job-commands.go | 0 {libs => internal}/ports/job-queries.go | 0 .../repo/job-analysis-result.go | 0 {libs => internal}/repo/job-description.go | 0 {libs => internal}/repo/job.go | 0 {libs => internal}/server/server.go | 0 libs/README.md | 22 +++++++++++++++++++ services/api/cmd/server/main.go | 2 +- services/api/internal/app/app.go | 6 ++--- .../internal/commands/job/apply-for-job.go | 2 +- .../api/internal/commands/job/create-job.go | 4 ++-- services/api/internal/queries/job/get-jobs.go | 4 ++-- services/api/pkg/http/job.go | 4 ++-- services/scraper-google/main.go | 2 +- services/scraper-linkedin/main.go | 2 +- .../scraper-linkedin/pipeline/job_pipeline.go | 2 +- 17 files changed, 37 insertions(+), 15 deletions(-) rename {libs => internal}/ports/job-commands.go (100%) rename {libs => internal}/ports/job-queries.go (100%) rename {libs => internal}/repo/job-analysis-result.go (100%) rename {libs => internal}/repo/job-description.go (100%) rename {libs => internal}/repo/job.go (100%) rename {libs => internal}/server/server.go (100%) create mode 100644 libs/README.md diff --git a/apps/cron-analyzer/internal/analyze-jobs.go b/apps/cron-analyzer/internal/analyze-jobs.go index aca8d45..d67b27e 100644 --- a/apps/cron-analyzer/internal/analyze-jobs.go +++ b/apps/cron-analyzer/internal/analyze-jobs.go @@ -12,7 +12,7 @@ import ( "github.com/jobs-scraper/internal/infrastructure/rabbitmq" "github.com/jobs-scraper/internal/openai" "github.com/jobs-scraper/internal/openrouter" - "github.com/jobs-scraper/libs/repo" + "github.com/jobs-scraper/internal/repo" ) type JobAnalyzer struct { diff --git a/libs/ports/job-commands.go b/internal/ports/job-commands.go similarity index 100% rename from libs/ports/job-commands.go rename to internal/ports/job-commands.go diff --git a/libs/ports/job-queries.go b/internal/ports/job-queries.go similarity index 100% rename from libs/ports/job-queries.go rename to internal/ports/job-queries.go diff --git a/libs/repo/job-analysis-result.go b/internal/repo/job-analysis-result.go similarity index 100% rename from libs/repo/job-analysis-result.go rename to internal/repo/job-analysis-result.go diff --git a/libs/repo/job-description.go b/internal/repo/job-description.go similarity index 100% rename from libs/repo/job-description.go rename to internal/repo/job-description.go diff --git a/libs/repo/job.go b/internal/repo/job.go similarity index 100% rename from libs/repo/job.go rename to internal/repo/job.go diff --git a/libs/server/server.go b/internal/server/server.go similarity index 100% rename from libs/server/server.go rename to internal/server/server.go diff --git a/libs/README.md b/libs/README.md new file mode 100644 index 0000000..c9eb699 --- /dev/null +++ b/libs/README.md @@ -0,0 +1,22 @@ +# libs/ — shared TypeScript packages + +This directory holds shared **TypeScript** packages only, consumed via npm +workspaces under the `@jobs-scraper/*` scope: + +- `rabbitmq-ts` — `@jobs-scraper/rabbitmq-ts` +- `browser-automation` — `@jobs-scraper/browser-automation` + +**Shared Go code goes in `internal/`, not here.** There is one shared root per +language, so the language answers the "which directory?" question and there is +nothing further to remember: + +| Shared code | Lives in | +| --- | --- | +| Go | `internal/` (part of the root `github.com/jobs-scraper` module) | +| TypeScript | `libs/` (npm workspace packages) | + +`internal/` is also Go's own marker for code that is not importable from outside +this repository, which is accurate — none of it is published. + +Deployable units — the API, the scrapers, the cron app — live in `services/` +and `apps/` and each own their own Go module or `package.json`. diff --git a/services/api/cmd/server/main.go b/services/api/cmd/server/main.go index 9c11df6..502b008 100644 --- a/services/api/cmd/server/main.go +++ b/services/api/cmd/server/main.go @@ -12,7 +12,7 @@ import ( "github.com/gorilla/mux" "github.com/jobs-scraper/internal/infrastructure" "github.com/jobs-scraper/internal/infrastructure/rabbitmq" - "github.com/jobs-scraper/libs/repo" + "github.com/jobs-scraper/internal/repo" "github.com/jobs-scraper/services/api/internal/app" httpHandler "github.com/jobs-scraper/services/api/pkg/http" _ "github.com/jobs-scraper/services/api/pkg/swagger" diff --git a/services/api/internal/app/app.go b/services/api/internal/app/app.go index 84699b0..14abff7 100644 --- a/services/api/internal/app/app.go +++ b/services/api/internal/app/app.go @@ -5,9 +5,9 @@ import ( "github.com/gorilla/mux" "github.com/jobs-scraper/internal/infrastructure/rabbitmq" - "github.com/jobs-scraper/libs/ports" - "github.com/jobs-scraper/libs/repo" - "github.com/jobs-scraper/libs/server" + "github.com/jobs-scraper/internal/ports" + "github.com/jobs-scraper/internal/repo" + "github.com/jobs-scraper/internal/server" jobCommands "github.com/jobs-scraper/services/api/internal/commands/job" jobQueries "github.com/jobs-scraper/services/api/internal/queries/job" ) diff --git a/services/api/internal/commands/job/apply-for-job.go b/services/api/internal/commands/job/apply-for-job.go index 668a2ce..b9ad526 100644 --- a/services/api/internal/commands/job/apply-for-job.go +++ b/services/api/internal/commands/job/apply-for-job.go @@ -5,7 +5,7 @@ import ( "github.com/jobs-scraper/internal/dto" "github.com/jobs-scraper/internal/infrastructure/rabbitmq" - "github.com/jobs-scraper/libs/repo" + "github.com/jobs-scraper/internal/repo" ) type ApplyForJob struct { diff --git a/services/api/internal/commands/job/create-job.go b/services/api/internal/commands/job/create-job.go index c730fe4..80488c1 100644 --- a/services/api/internal/commands/job/create-job.go +++ b/services/api/internal/commands/job/create-job.go @@ -7,8 +7,8 @@ import ( "github.com/jobs-scraper/internal/domain" "github.com/jobs-scraper/internal/infrastructure/rabbitmq" - "github.com/jobs-scraper/libs/ports" - "github.com/jobs-scraper/libs/repo" + "github.com/jobs-scraper/internal/ports" + "github.com/jobs-scraper/internal/repo" ) type CreateJob struct { diff --git a/services/api/internal/queries/job/get-jobs.go b/services/api/internal/queries/job/get-jobs.go index b08f6c0..902376c 100644 --- a/services/api/internal/queries/job/get-jobs.go +++ b/services/api/internal/queries/job/get-jobs.go @@ -2,8 +2,8 @@ package job import ( "github.com/jobs-scraper/internal/dto" - "github.com/jobs-scraper/libs/ports" - "github.com/jobs-scraper/libs/repo" + "github.com/jobs-scraper/internal/ports" + "github.com/jobs-scraper/internal/repo" ) type GetJobs struct { diff --git a/services/api/pkg/http/job.go b/services/api/pkg/http/job.go index 45c10dc..d051dbb 100644 --- a/services/api/pkg/http/job.go +++ b/services/api/pkg/http/job.go @@ -9,9 +9,9 @@ import ( "github.com/gorilla/mux" "github.com/gorilla/schema" + "github.com/jobs-scraper/internal/ports" + "github.com/jobs-scraper/internal/repo" "github.com/jobs-scraper/internal/utils" - "github.com/jobs-scraper/libs/ports" - "github.com/jobs-scraper/libs/repo" ) // JobHandler handles HTTP requests related to jobs diff --git a/services/scraper-google/main.go b/services/scraper-google/main.go index b3c8552..95467bd 100644 --- a/services/scraper-google/main.go +++ b/services/scraper-google/main.go @@ -10,7 +10,7 @@ import ( "github.com/jobs-scraper/internal/browser" "github.com/jobs-scraper/internal/domain" - "github.com/jobs-scraper/libs/repo" + "github.com/jobs-scraper/internal/repo" "github.com/jobs-scraper/services/scraper-google/analyzer" si "github.com/jobs-scraper/services/scraper-google/setup-infrastructure" "github.com/jobs-scraper/services/scraper-google/utils" diff --git a/services/scraper-linkedin/main.go b/services/scraper-linkedin/main.go index e073553..5b92dee 100644 --- a/services/scraper-linkedin/main.go +++ b/services/scraper-linkedin/main.go @@ -13,7 +13,7 @@ import ( "github.com/jobs-scraper/internal/domain" "github.com/jobs-scraper/internal/infrastructure" "github.com/jobs-scraper/internal/infrastructure/rabbitmq" - "github.com/jobs-scraper/libs/repo" + "github.com/jobs-scraper/internal/repo" "github.com/jobs-scraper/services/scraper/pipeline" "github.com/joho/godotenv" ) diff --git a/services/scraper-linkedin/pipeline/job_pipeline.go b/services/scraper-linkedin/pipeline/job_pipeline.go index c0b64f4..b8079eb 100644 --- a/services/scraper-linkedin/pipeline/job_pipeline.go +++ b/services/scraper-linkedin/pipeline/job_pipeline.go @@ -10,7 +10,7 @@ import ( "time" "github.com/jobs-scraper/internal/domain" - "github.com/jobs-scraper/libs/repo" + "github.com/jobs-scraper/internal/repo" ) // JobDescriptionResult represents the result of job description scraping