1+ import { Request , Response } from 'express' ;
2+ import { config } from '../config/config' ;
3+ import fs from 'fs' ;
4+ import path from 'path' ;
5+ import { scoreResume , streamScoreResume } from '../services/resume_service' ;
6+ import multer from 'multer' ;
7+ import { CustomRequest } from "types/customRequest" ;
8+ import { handleError } from "../utils/handle_error" ;
9+
10+ const getResumeScore = async ( req : Request , res : Response ) => {
11+ try {
12+ const { filename } = req . params ;
13+ const resumePath = path . resolve ( config . resources . resumesDirectoryPath ( ) , filename ) ;
14+ const jobDescription = req . query . jobDescription as string ;
15+
16+ if ( ! fs . existsSync ( resumePath ) ) {
17+ return res . status ( 404 ) . send ( 'Resume not found' ) ;
18+ }
19+
20+ const scoreAndFeedback = await scoreResume ( resumePath , jobDescription ) ;
21+ return res . status ( 200 ) . send ( scoreAndFeedback ) ;
22+ } catch ( error ) {
23+ if ( error instanceof TypeError ) {
24+ return res . status ( 400 ) . send ( error . message ) ;
25+ } else {
26+ handleError ( error , res ) ;
27+ }
28+ }
29+ } ;
30+
31+ const getStreamResumeScore = async ( req : Request , res : Response ) => {
32+ try {
33+ const { filename } = req . params ;
34+ const resumePath = path . resolve ( config . resources . resumesDirectoryPath ( ) , filename ) ;
35+ const jobDescription = req . query . jobDescription as string ;
36+
37+ if ( ! fs . existsSync ( resumePath ) ) {
38+ return res . status ( 404 ) . send ( 'Resume not found' ) ;
39+ }
40+
41+ // Set headers for SSE
42+ res . setHeader ( 'Content-Type' , 'text/event-stream' ) ;
43+ res . setHeader ( 'Cache-Control' , 'no-cache' ) ;
44+ res . setHeader ( 'Connection' , 'keep-alive' ) ;
45+
46+ // Handle client disconnect
47+ req . on ( 'close' , ( ) => {
48+ res . end ( ) ;
49+ } ) ;
50+
51+ // Stream the response
52+ const score = await streamScoreResume (
53+ resumePath ,
54+ jobDescription ,
55+ ( chunk ) => {
56+ res . write ( `data: ${ JSON . stringify ( { chunk } ) } \n\n` ) ;
57+ }
58+ ) ;
59+
60+ // Send the final score
61+ res . write ( `data: ${ JSON . stringify ( { score, done : true } ) } \n\n` ) ;
62+ res . end ( ) ;
63+ } catch ( error ) {
64+ if ( error instanceof TypeError ) {
65+ return res . status ( 400 ) . send ( error . message ) ;
66+ } else {
67+ handleError ( error , res ) ;
68+ }
69+ }
70+ } ;
71+
72+ export default {
73+ getResumeScore,
74+ getStreamResumeScore
75+ } ;
0 commit comments