Files
tabungin/GOALS_TROUBLESHOOTING.md
Dwindi Ramadhana 6a6e74562c checkpoint: goals feature, wallet balance, and goals/wallet detail UI
- Add goals feature (models, migrations, API, web pages)
- Add reserved/centralized wallet balance service
- Add wallet detail page and overview components
- Add new UI components (progress, multi-select, FAB)
- Remove stray empty -H/-d files from working tree
2026-06-17 20:40:00 +07:00

3.7 KiB
Executable File

Goals Feature - Troubleshooting

Error: "Cannot POST /api/goals"

Cause:

The backend server needs to be restarted to load the new Goals module.

Solution:

Step 1: Stop the backend server

# In the terminal running the API
# Press Ctrl+C to stop

Step 2: Restart the backend

cd apps/api
npm run dev

Step 3: Verify the server started correctly Look for these messages:

[Nest] INFO [NestFactory] Starting Nest application...
[Nest] INFO [InstanceLoader] GoalsModule dependencies initialized
[Nest] INFO [RoutesResolver] GoalsController {/api/goals}:
[Nest] INFO [RouterExplorer] Mapped {/api/goals, POST} route
[Nest] INFO [RouterExplorer] Mapped {/api/goals, GET} route
[Nest] INFO [RouterExplorer] Mapped {/api/goals/stats, GET} route
[Nest] INFO [RouterExplorer] Mapped {/api/goals/:id, GET} route
[Nest] INFO [RouterExplorer] Mapped {/api/goals/:id, PATCH} route
[Nest] INFO [RouterExplorer] Mapped {/api/goals/:id, DELETE} route
[Nest] INFO [RouterExplorer] Mapped {/api/goals/:id/allocations, POST} route
[Nest] INFO [RouterExplorer] Mapped {/api/goals/:id/allocations/:allocationId, DELETE} route

Step 4: Test the endpoint

# In a new terminal, test if the endpoint exists:
curl -X GET http://localhost:3001/api/goals \
  -H "Authorization: Bearer YOUR_TOKEN"

# Should return: 401 Unauthorized (if no token) or [] (empty array if authenticated)
# Should NOT return: 404 Not Found or "Cannot POST /api/goals"

Verification Checklist

After restarting the backend:

  • Backend server running on port 3001
  • Console shows "GoalsModule dependencies initialized"
  • Console shows "GoalsController {/api/goals}" routes
  • Frontend can create goals without "Cannot POST" error
  • Goals appear in the dashboard

🔍 Additional Checks

Check 1: Module is registered

File: apps/api/src/app.module.ts

imports: [
  // ... other modules
  GoalsModule,  // ← Should be here
],

Check 2: Controller is exported

File: apps/api/src/goals/goals.module.ts

@Module({
  imports: [PrismaModule],
  controllers: [GoalsController],  // ← Should be here
  providers: [GoalsService],
  exports: [GoalsService],
})

Check 3: Database migration ran

cd apps/api
npx prisma migrate status

# Should show:
# ✓ 20251022141924_add_goals_feature

🐛 Common Issues

Issue: Module not found

Error: Cannot find module './goals/goals.module' Fix: Make sure all files were created correctly

Issue: Prisma client not updated

Error: Property 'goal' does not exist on type 'PrismaClient' Fix:

cd apps/api
npx prisma generate
npm run build

Issue: Port already in use

Error: Error: listen EADDRINUSE: address already in use :::3001 Fix:

# Find and kill the process using port 3001
lsof -ti:3001 | xargs kill -9

# Then restart
npm run dev

📞 Quick Test

Once backend is restarted, test in browser console:

// Open browser console (F12)
// Make sure you're logged in

fetch('http://localhost:3001/api/goals', {
  method: 'GET',
  headers: {
    'Authorization': `Bearer ${localStorage.getItem('token')}`
  }
})
.then(r => r.json())
.then(console.log)

// Should return: []
// Should NOT return: 404 or "Cannot GET /api/goals"

Success Indicators

You'll know it's working when:

  1. Backend console shows Goals routes mapped
  2. No "Cannot POST /api/goals" error
  3. Create goal dialog submits successfully
  4. Goals appear in the dashboard
  5. Stats cards show correct numbers

TL;DR: Restart the backend server! 🔄