Restructure the monorepo into clear top-level directories: - backend/: Go module root (cmd, internal, pkg, configs, migrations, docs/swagger, scripts, tests, go.mod, Makefile, .air.toml) - deploy/: Docker (Dockerfile, docker-compose*), quickstart, fluentd - docs/: project documentation + reports/ (moved from repo root) - AGENTS.md: new AI coding-agent guide at repo root Update all references to the new layout: - Dockerfile: COPY backend/go.mod, COPY backend/ (context = repo root) - docker-compose files: context ../.., dockerfile deploy/docker/Dockerfile, env_file ../../.env, volume mounts ../../backend:/app - deploy/quickstart/compose.yaml: dockerfile deploy/docker/Dockerfile - CI: working-directory: backend for go commands, file deploy/docker/Dockerfile, coverage path backend/coverage.out, health_check backend/scripts/ - backend/Makefile: docker target uses -f ../deploy/docker/Dockerfile ../ - README: architecture tree, quickstart, config paths updated Move root stray scripts (rename_models.*, run_m11_tests.sh, verify_build.sh, gorm_bool_main.go) to backend/scripts/legacy/. All moves via git mv to preserve history. Build, vet, SQLite tests, and docker compose config verified.
30 lines
1.3 KiB
SQL
30 lines
1.3 KiB
SQL
CREATE TABLE IF NOT EXISTS background_jobs (
|
|
id BIGSERIAL PRIMARY KEY,
|
|
queue VARCHAR(100) NOT NULL DEFAULT 'default',
|
|
job_type VARCHAR(150) NOT NULL,
|
|
payload JSONB NOT NULL DEFAULT '{}',
|
|
status VARCHAR(50) NOT NULL DEFAULT 'queued',
|
|
priority INTEGER NOT NULL DEFAULT 0,
|
|
attempts INTEGER NOT NULL DEFAULT 0,
|
|
max_attempts INTEGER NOT NULL DEFAULT 3,
|
|
scheduled_at TIMESTAMP WITH TIME ZONE NOT NULL DEFAULT NOW(),
|
|
locked_at TIMESTAMP WITH TIME ZONE,
|
|
locked_by VARCHAR(150),
|
|
idempotency_key VARCHAR(255),
|
|
last_error TEXT,
|
|
finished_at TIMESTAMP WITH TIME ZONE,
|
|
failed_at TIMESTAMP WITH TIME ZONE,
|
|
created_at TIMESTAMP WITH TIME ZONE DEFAULT NOW(),
|
|
updated_at TIMESTAMP WITH TIME ZONE DEFAULT NOW()
|
|
);
|
|
|
|
CREATE INDEX IF NOT EXISTS idx_background_jobs_ready
|
|
ON background_jobs(status, queue, scheduled_at, priority DESC, id);
|
|
CREATE INDEX IF NOT EXISTS idx_background_jobs_job_type ON background_jobs(job_type);
|
|
CREATE INDEX IF NOT EXISTS idx_background_jobs_locked_at ON background_jobs(locked_at);
|
|
CREATE INDEX IF NOT EXISTS idx_background_jobs_idempotency_key ON background_jobs(idempotency_key);
|
|
CREATE UNIQUE INDEX IF NOT EXISTS idx_background_jobs_idempotency_key_unique
|
|
ON background_jobs(idempotency_key)
|
|
WHERE idempotency_key IS NOT NULL AND idempotency_key <> '';
|
|
|