Compare commits

..

3 Commits

Author SHA1 Message Date
e4ba2b385b fix(deploy): align staging domains and networks 2026-07-17 17:49:50 +00:00
-Puter
fd4dde1e5d fix matchmaking session startup forwarding 2026-07-17 19:56:57 +05:30
-Puter
aa3bfa9251 merge matchmaking gateway error handling 2026-07-17 19:36:17 +05:30
4 changed files with 16 additions and 9 deletions

View File

@@ -18,7 +18,7 @@ services:
DATABASE_URL: postgres://growqr:growqr@growqr-postgres:5432/growqr
RESUME_SERVICE_URL: http://growqr_resume_api:8000
SOCIAL_BRANDING_SERVICE_URL: http://host.docker.internal:18015
SOCIAL_BRANDING_PUBLIC_URL: https://social-staging.gqr.puter.wtf
SOCIAL_BRANDING_PUBLIC_URL: https://social-staging.sai-onchain.me
PRODUCT_SERVICE_TIMEOUT_MS: 10000
PRODUCT_INTERACTIVE_SERVICE_TIMEOUT_MS: 240000
LLM_PROVIDER: opencode
@@ -42,10 +42,10 @@ networks:
name: course-service_default
qscore-service-staging:
external: true
name: qscore-service-staging_default
name: qscore-service_default
matchmaking-v2-staging:
external: true
name: matchmaking-v2_default
name: matchmaking-service_default
user-service-staging:
external: true
name: user-service-staging_default
name: user-service_default

View File

@@ -33,6 +33,12 @@ try {
assert.ok(calls[0]?.url.endsWith("/a2a/tasks"));
assert.equal(calls[0]?.headers.get("authorization"), config.a2aAllowedKey ? `Bearer ${config.a2aAllowedKey}` : null);
calls.length = 0;
const sessionStartResponse = await app.request("http://backend.test/matchmaking/a2a", { method: "POST", headers: { "content-type": "application/json" }, body: JSON.stringify({ action: "session_start", params: { page: "job-matching" } }) });
assert.equal(sessionStartResponse.status, 200);
assert.equal(calls[0]?.body.action, "session_start");
assert.equal(calls[0]?.body.session_start, true);
const forbiddenResponse = await app.request("http://backend.test/matchmaking/a2a", { method: "POST", headers: { "content-type": "application/json" }, body: JSON.stringify({ action: "force_forbidden" }) });
assert.equal(forbiddenResponse.status, 502);
assert.match(await forbiddenResponse.text(), /matchmaking service authentication failed/);

View File

@@ -1,10 +1,10 @@
#!/bin/sh
set -eu
PROJECT=growqr-backend-staging
PROJECT=growqr-backend
COMPOSE="docker compose -p $PROJECT -f docker-compose.yml -f docker-compose.override.yml"
REQUIRED_NETWORKS="growqr-backend-staging_default interview-service_default roleplay-service_default resume-builder-staging_default course-service_default qscore-service-staging_default matchmaking-v2_default user-service-staging_default"
EXTERNAL_NETWORKS="interview-service_default roleplay-service_default resume-builder-staging_default course-service_default qscore-service-staging_default matchmaking-v2_default user-service-staging_default"
REQUIRED_NETWORKS="growqr-backend_default interview-service_default roleplay-service_default resume-builder-staging_default course-service_default qscore-service_default matchmaking-service_default user-service_default"
EXTERNAL_NETWORKS="interview-service_default roleplay-service_default resume-builder-staging_default course-service_default qscore-service_default matchmaking-service_default user-service_default"
preflight() {
for network in $EXTERNAL_NETWORKS; do
@@ -30,8 +30,8 @@ verify() {
docker exec growqr-backend node --input-type=module -e '
const checks = [
["user-service", "http://growqr_user_service:8003/health"],
["qscore", "http://qscore-service-staging-api-1:8000/health"],
["user-service", "http://growqr-user-service:8003/health"],
["qscore", "http://qscore-service-api-1:8000/health"],
["course", "http://growqr-course-service:8010/health"],
["resume", "http://growqr_resume_api:8000/health"],
["interview", "http://interview-service-api-1:8000/health"],

View File

@@ -388,6 +388,7 @@ async function callMatchmakingA2a(body: Record<string, unknown>, userId: string)
...body,
action: action === "get_feed" ? "get_scout_feed" : action,
user_id: getString(body.user_id) ?? userId,
session_start: action === "session_start" || body.session_start === true,
};
const startedAt = Date.now();
let res: Response;