@@ -4,8 +4,12 @@ import fs from 'fs/promises'
44import env from '#start/env'
55
66export default class CvsController {
7- public async show ( { view } : HttpContext ) {
8- return view . render ( 'pages/new' ) ;
7+ public async index ( { view } : HttpContext ) {
8+ return view . render ( 'pages/home' ) ;
9+ }
10+
11+ public async create ( { view } : HttpContext ) {
12+ return view . render ( 'pages/create' ) ;
913 }
1014
1115 public async generate ( { request, response, view } : HttpContext ) {
@@ -14,32 +18,32 @@ export default class CvsController {
1418
1519 const toArray = ( value : any ) => ( Array . isArray ( value ) ? value : value ? [ value ] : [ ] )
1620
17- const firstName = request . input ( 'first_name' )
18- const lastName = request . input ( 'last_name' )
19- const birthdate = request . input ( 'birthdate' )
20- const city = request . input ( 'city' )
21- const phone = request . input ( 'phone' )
22- const email = request . input ( 'email' )
23- const jobTitle = request . input ( 'job_title' )
24- const profile = request . input ( 'profile' )
25- const profilePicture = request . file ( 'photo' )
26-
27- const positions = toArray ( request . input ( 'position' ) ) ?? [ ]
28- const companies = toArray ( request . input ( 'company' ) ) ?? [ ]
29- const locations = toArray ( request . input ( 'location' ) ) ?? [ ]
30- const startDates = toArray ( request . input ( 'start_date' ) ) ?? [ ]
31- const endDates = toArray ( request . input ( 'end_date' ) ) ?? [ ]
32- const descriptions = toArray ( request . input ( 'description' ) ) ?? [ ]
33-
34- const degrees = toArray ( request . input ( 'degree' ) ) ?? [ ]
35- const institutions = toArray ( request . input ( 'institution' ) ) ?? [ ]
36- const locationEdus = toArray ( request . input ( 'location_edu' ) ) ?? [ ]
37- const startDateEdus = toArray ( request . input ( 'start_date_edu' ) ) ?? [ ]
38- const endDateEdus = toArray ( request . input ( 'end_date_edu' ) ) ?? [ ]
39- const descriptionEdus = toArray ( request . input ( 'description_edu' ) ) ?? [ ]
40-
41- const skills = toArray ( request . input ( 'skill' ) ) ?? [ ]
42- const skillLevels = toArray ( request . input ( 'skill_level' ) ) ?? [ ]
21+ let firstName = request . input ( 'first_name' )
22+ let lastName = request . input ( 'last_name' )
23+ let birthdate = request . input ( 'birthdate' )
24+ let city = request . input ( 'city' )
25+ let phone = request . input ( 'phone' )
26+ let email = request . input ( 'email' )
27+ let jobTitle = request . input ( 'job_title' )
28+ let profile = request . input ( 'profile' )
29+ let profilePicture = request . file ( 'photo' )
30+
31+ let positions = toArray ( request . input ( 'position' ) ) ?? [ ]
32+ let companies = toArray ( request . input ( 'company' ) ) ?? [ ]
33+ let locations = toArray ( request . input ( 'location' ) ) ?? [ ]
34+ let startDates = toArray ( request . input ( 'start_date' ) ) ?? [ ]
35+ let endDates = toArray ( request . input ( 'end_date' ) ) ?? [ ]
36+ let descriptions = toArray ( request . input ( 'description' ) ) ?? [ ]
37+
38+ let degrees = toArray ( request . input ( 'degree' ) ) ?? [ ]
39+ let institutions = toArray ( request . input ( 'institution' ) ) ?? [ ]
40+ let locationEdus = toArray ( request . input ( 'location_edu' ) ) ?? [ ]
41+ let startDateEdus = toArray ( request . input ( 'start_date_edu' ) ) ?? [ ]
42+ let endDateEdus = toArray ( request . input ( 'end_date_edu' ) ) ?? [ ]
43+ let descriptionEdus = toArray ( request . input ( 'description_edu' ) ) ?? [ ]
44+
45+ let skills = toArray ( request . input ( 'skill' ) ) ?? [ ]
46+ let skillLevels = toArray ( request . input ( 'skill_level' ) ) ?? [ ]
4347
4448 if ( profilePicture && profilePicture . headers && profilePicture . headers [ 'content-type' ] ) {
4549 contentType = profilePicture . headers [ 'content-type' ]
@@ -88,10 +92,6 @@ export default class CvsController {
8892 skillSet : skillSet
8993 } )
9094
91- if ( env . get ( 'NODE_ENV' ) === 'development' ) {
92- return html
93- }
94-
9595 const browser : Browser = await puppeteer . launch ( {
9696 headless : true ,
9797 args : [ '--no-sandbox' , '--disable-setuid-sandbox' ] ,
@@ -109,4 +109,94 @@ export default class CvsController {
109109
110110 return response . send ( pdfBuffer )
111111 }
112+
113+ public async preview ( { view, params } : HttpContext ) {
114+ const templateId = params . templateId
115+
116+ let template = ''
117+ switch ( templateId ) {
118+ case '1' :
119+ template = 'cv_template_1'
120+ break
121+ case '2' :
122+ template = 'cv_template_2'
123+ break
124+ default :
125+ return 'Not found!' // TODO do decent error codes
126+ }
127+
128+ console . log ( template )
129+ const demoData = await this . demoData ( )
130+
131+ const workExperience = demoData . positions . map ( ( _ , i ) => ( {
132+ position : demoData . positions [ i ] ,
133+ company : demoData . companies [ i ] ,
134+ location : demoData . locations [ i ] ,
135+ start_date : demoData . startDates [ i ] ,
136+ end_date : demoData . endDates [ i ] ,
137+ description : demoData . descriptions [ i ] ,
138+ } ) )
139+
140+ const educations = demoData . degrees . map ( ( _ , i ) => ( {
141+ degree : demoData . degrees [ i ] ,
142+ institution : demoData . institutions [ i ] ,
143+ location : demoData . locationEdus [ i ] ,
144+ start_date : demoData . startDateEdus [ i ] ,
145+ end_date : demoData . endDateEdus [ i ] ,
146+ description : demoData . descriptionEdus [ i ] ,
147+ } ) )
148+
149+ const skillSet = demoData . skills . map ( ( name , i ) => ( {
150+ name,
151+ level : demoData . skillLevels [ i ] ,
152+ } ) )
153+
154+ const html = await view . render ( `pages/templates/${ template } ` , {
155+ firstName : demoData . firstName ,
156+ lastName : demoData . lastName ,
157+ birthdate : demoData . birthdate ,
158+ city : demoData . city ,
159+ phone : demoData . phone ,
160+ email : demoData . email ,
161+ jobTitle : demoData . jobTitle ,
162+ profile : demoData . profile ,
163+ profilePicture : 'https://randomuser.me/api/portraits/men/75.jpg' ,
164+ workExperience,
165+ educations,
166+ skillSet,
167+ } )
168+
169+ return html
170+ }
171+
172+ demoData ( ) {
173+ return {
174+ firstName : 'John' ,
175+ lastName : 'Doe' ,
176+ birthdate : '1990-01-01' ,
177+ city : 'Amsterdam' ,
178+ phone : '+31 6 12345678' ,
179+ email : 'john.doe@example.com' ,
180+ jobTitle : 'Software Engineer' ,
181+ profile : 'Passionate developer with 10+ years of experience in web development.' ,
182+
183+ positions : [ 'Frontend Developer' ] ,
184+ companies : [ 'Tech Corp' ] ,
185+ locations : [ 'Amsterdam' ] ,
186+ startDates : [ '2020-01' ] ,
187+ endDates : [ '2023-06' ] ,
188+ descriptions : [ 'Worked on frontend features and improved performance.' ] ,
189+
190+ degrees : [ 'BSc Computer Science' ] ,
191+ institutions : [ 'University of Amsterdam' ] ,
192+ locationEdus : [ 'Amsterdam' ] ,
193+ startDateEdus : [ '2010-09' ] ,
194+ endDateEdus : [ '2014-06' ] ,
195+ descriptionEdus : [ 'Studied algorithms, data structures, and web technologies.' ] ,
196+
197+ skills : [ 'JavaScript' , 'TypeScript' , 'Vue.js' ] ,
198+ skillLevels : [ 3 , 1 , 4 ] ,
199+ }
200+ }
201+
112202}
0 commit comments