Files
microdao-daarion/backend/http/vendor.routes.ts
Apple 3de3c8cb36 feat: Add presence heartbeat for Matrix online status
- matrix-gateway: POST /internal/matrix/presence/online endpoint
- usePresenceHeartbeat hook with activity tracking
- Auto away after 5 min inactivity
- Offline on page close/visibility change
- Integrated in MatrixChatRoom component
2025-11-27 00:19:40 -08:00

53 lines
1.3 KiB
TypeScript

/**
* Vendor Routes
* Based on: api-mvp.md
*
* Endpoints:
* - POST /api/v1/platforms/{platform_id}/vendors - Register vendor
*/
import { Router } from 'express';
import { pdpService } from '../../services/pdp/pdp.service';
export const vendorRoutes = Router();
// POST /api/v1/platforms/{platform_id}/vendors - Register vendor
vendorRoutes.post('/:platformId/vendors', async (req, res) => {
try {
const userId = (req as any).userId;
const { platformId } = req.params;
const { display_name, contact } = req.body;
// Check PDP policy
const pdpResult = await pdpService.check(
'policy.vendor.register',
{ platformId },
{ userId, daoId: platformId, daoLevel: 'A2' }
);
if (pdpResult.decision !== 'allow') {
res.status(403).json({
error: 'ACCESS_DENIED',
message: pdpResult.reason || 'PDP denied',
});
return;
}
// TODO: Save vendor to database
const vendorId = `vendor_${Date.now()}_${Math.random().toString(36).substr(2, 9)}`;
res.status(201).json({
vendor_id: vendorId,
platform_id: platformId,
status: 'approved',
});
} catch (error: any) {
res.status(500).json({
error: 'INTERNAL_ERROR',
message: error.message,
});
}
});