Skip to content
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 4 additions & 0 deletions .vscode/settings.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,4 @@
{
"editor.defaultFormatter": "esbenp.prettier-vscode",
"editor.formatOnSave": true
}
47 changes: 47 additions & 0 deletions routes/index.ts
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,8 @@ import { usersRouter } from './users/usersRoutes.js';
import { usersCVsRouter } from './users_cvs/usersCVsRoutes.js';
import { usersDealbreakersRouter } from './users_dealbreakers/userDealbreakersRoutes.js';
import { matchingRouter } from './matching/matchingRoutes.js';
import multer from 'multer';
import { extractCvText } from './users_cvs/users_CVsMiddleware.js';

const ROUTER = express.Router();

Expand All @@ -16,4 +18,49 @@ ROUTER.use('/users_cvs', usersCVsRouter);
ROUTER.use('/users_dealbreakers', usersDealbreakersRouter);
ROUTER.use('/matching', matchingRouter);

const upload = multer({ storage: multer.memoryStorage() }); // keep file in memory
// this endpoint is intentionally put here to avoid auth
// it will be moved to users_CVsRoutes after more integration testing
ROUTER.post('/upload-cv', upload.single('cv'), async (req, res) => {
// Validation: Check if file exists
if (!req.file) {
return res.status(400).json({ error: 'No file uploaded' });
}
// Extract Dealbreakers
// Multer populates req.body with text fields.
// Since we JSON.stringify'd the array on frontend, we must JSON.parse it here.
let dealbreakers: string[] = [];
if (req.body.dealbreakers) {
try {
dealbreakers = JSON.parse(req.body.dealbreakers);
} catch (e) {
console.warn('Failed to parse dealbreakers JSON', e);
// Fallback: treat it as empty or single string if needed
}
}

// Extract Text from CV (using middleware)
try {
const cvText = await extractCvText(req.file);
console.log('Extracted CV Length:', cvText.length);
console.log('Received Dealbreakers:', dealbreakers);
// // TO DO? Return combined data (or save to DB)
// res.json({
// message: 'Bio received successfully',
// data: {
// cvText: cvText,
// dealbreakers: dealbreakers,
// },
// });

res.json({ cvText });
} catch (err) {
console.error(err);
// Better error handling for the client
const errorMessage =
err instanceof Error ? err.message : 'Failed to parse CV';
res.status(500).json({ error: errorMessage });
}
});

export default ROUTER;
1 change: 1 addition & 0 deletions server.ts
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,7 @@ import swaggerUi from 'swagger-ui-express';

const app = express();

// CORS configuration - allow requests from frontend server
app.use(
cors({
origin: 'http://localhost:5173',
Expand Down
Loading