6.2 KiB
Working Tree Audit
Project: helpyourneighbour
Modified tracked files
README.md backend/playwright.config.js backend/scripts/integration-test.mjs
--- README.md
helpyourneighbour
Erster funktionaler Backend-Stand für die Vision:
- Nutzerregistrierung und Login (
/auth/register,/auth/login) - Hilfeanfragen erstellen/listen (
/requests) - Angebote + Gegenangebote + Deal-Annahme (
/offers/...) - Bewertungsgrundlage mit 2-14 Tage Prompt-Fenster (
/reviews/:dealId) - Datenmodell inkl. postalischer Adress-Verifikation (
backend/sql/schema.sql) - Address-Change-Flow mit Briefcode (
/addresses/change-request,/addresses/verify) - Kontaktdatenaustausch nach Deal (
/contacts/request,/contacts/respond,/contacts/deal/:dealId) - Serverseitige AES-256-GCM-Verschlüsselung für Adresse/Telefon (
DATA_ENCRYPTION_KEY)
Docker-Test (Unraid Host)
./scripts/test-in-docker.sh
Start
cd backend
cp .env.example .env
npm install
npm run db:init
npm run start
Forgejo Tasks
- #1 Backend Grundgerüst + Auth API
- #2 Datenmodell für Request/Offer/Negotiation/Deal
- #3 Bewertungssystem 2-14 Tage Verzögerung
- #4 Adressänderung nur per Briefbestätigung
API Governance
-
Dispute-Flow Doku:
docs/dispute-flow.md -
OpenAPI:
openapi.yaml(Spiegel:docs/openapi.yaml) -
Versioning/Deprecation Policy:
docs/api-versioning.md -
Rollen- und Rechtekonzept:
docs/roles-and-permissions.md
Development Quickstart (auto-synced)
cd backend
npm install
npm test
npm run start
--- backend/playwright.config.js const { defineConfig } = require('@playwright/test');
module.exports = defineConfig({
testDir: './tests',
timeout: 30000,
expect: {
timeout: 5000
},
fullyParallel: true,
forbidOnly: !!process.env.CI,
retries: process.env.CI ? 2 : 0,
workers: process.env.CI ? 1 : undefined,
reporter: 'html',
use: {
actionTimeout: 0,
baseURL: 'http://localhost:3000',
trace: 'on-first-retry',
},
projects: [
{
name: 'chromium',
use: {
...devices['Desktop Chrome'],
},
},
],
});
--- backend/scripts/integration-test.mjs
// Einfacher HTTP-Test ohne Playwright
// Funktion zum Senden einer HTTP-Anfrage
async function testHealthEndpoint() {
try {
const response = await fetch('http://localhost:3000/health');
if (response.status === 200) {
console.log('Integration test passed: API server is running and healthy');
return true;
} else {
console.error(Integration test failed: Expected status 200, got ${response.status});
return false;
}
} catch (error) {
console.error('Integration test failed:', error.message);
return false;
}
}
// Führe den Test aus testHealthEndpoint().then(success => { if (!success) { process.exit(1); } });
Untracked files
.DS_Store ..DS_Store PROJECT_SUMMARY.md STATUS.md backend/.DS_Store backend/..DS_Store backend/playwright-report/index.html backend/playwright.config.mjs backend/test-results/.last-run.json backend/tests/integration-test.spec.js docs/plans/2026-03-06-continue-working-the-helpyourneighbour-project-after.md docs/plans/2026-03-06-implement-the-next-concrete-improvement-for.md docs/plans/2026-03-06-initial-session-startup-and-greeting.md docs/plans/2026-03-06-start.md docs/runtime/agent_state_helpyourneighbour.json docs/runtime/backlog_item_helpyourneighbour.md docs/runtime/generated_artifacts_helpyourneighbour.md docs/runtime/goal_brief_helpyourneighbour.md docs/runtime/goal_targets_helpyourneighbour.md docs/runtime/integration_candidates_helpyourneighbour.md docs/runtime/integration_context_helpyourneighbour.md docs/runtime/integration_repair_brief_helpyourneighbour.md docs/runtime/integration_status_helpyourneighbour.env docs/runtime/integration_targets_helpyourneighbour.md docs/runtime/integration_test_helpyourneighbour.log docs/runtime/integration_triage_helpyourneighbour.md docs/runtime/notion_recall_helpyourneighbour.md docs/runtime/project_snapshot_helpyourneighbour.md docs/runtime/smoke_status_helpyourneighbour.env docs/runtime/smoke_test_helpyourneighbour.log docs/runtime/task_helpyourneighbour_1_backlog-goal-verify.log docs/runtime/task_helpyourneighbour_1_backlog-inspect.log docs/runtime/task_helpyourneighbour_1_backlog-project-snapshot.log docs/runtime/task_helpyourneighbour_1_integration-check.log docs/runtime/task_helpyourneighbour_1_integration-context-audit.log docs/runtime/task_helpyourneighbour_1_integration-failure-blocked.log docs/runtime/task_helpyourneighbour_1_integration-repair-brief.log docs/runtime/task_helpyourneighbour_1_integration-targets.log docs/runtime/task_helpyourneighbour_1_integration-triage.log docs/runtime/task_helpyourneighbour_1_no-work.log docs/runtime/task_helpyourneighbour_1_project-snapshot.log docs/runtime/task_helpyourneighbour_1_working-tree-audit.log docs/runtime/task_helpyourneighbour_2_backlog-goal-brief.log docs/runtime/task_helpyourneighbour_2_backlog-goal-targets.log docs/runtime/task_helpyourneighbour_2_generated-artifacts-review.log docs/runtime/task_helpyourneighbour_2_integration-candidates.log docs/runtime/task_helpyourneighbour_2_integration-failure-blocked.log docs/runtime/task_helpyourneighbour_2_no-work.log docs/runtime/verify_helpyourneighbour_1_backlog-goal-verify.log docs/runtime/verify_helpyourneighbour_1_backlog-inspect.log docs/runtime/verify_helpyourneighbour_1_backlog-project-snapshot.log docs/runtime/verify_helpyourneighbour_1_integration-check.log docs/runtime/verify_helpyourneighbour_1_integration-failure-blocked.log docs/runtime/verify_helpyourneighbour_1_integration-repair-brief.log docs/runtime/verify_helpyourneighbour_1_integration-targets.log docs/runtime/verify_helpyourneighbour_1_integration-triage.log docs/runtime/verify_helpyourneighbour_1_no-work.log docs/runtime/verify_helpyourneighbour_1_project-snapshot.log docs/runtime/verify_helpyourneighbour_2_backlog-goal-brief.log docs/runtime/verify_helpyourneighbour_2_backlog-goal-targets.log docs/runtime/verify_helpyourneighbour_2_generated-artifacts-review.log docs/runtime/verify_helpyourneighbour_2_integration-candidates.log docs/runtime/verify_helpyourneighbour_2_integration-failure-blocked.log docs/runtime/verify_helpyourneighbour_2_no-work.log docs/runtime/working_tree_audit_helpyourneighbour.md