Get contact form working again with new style form and API
[ndcode_site.git] / api / contact / get_draft.json.jst
1 let logjson = (await import('@ndcode/logjson')).default
2 let XDate = require('xdate')
3
4 return async env => {
5   let post_request = await _require('/_lib/post_request.jst')
6   let session_cookie = await _require('/_lib/session_cookie.jst')
7   let Problem = await _require('/_lib/Problem.jst')
8
9   await post_request(
10     // env
11     env,
12     // handler
13     async () => {
14       let transaction = await env.site.database.Transaction()
15       try {
16         // initialize env.session_key, set cookie in env.response
17         let session = await session_cookie(env, transaction)
18
19         let contact_draft = await session.get('contact_draft')
20         let details =
21           contact_draft !== undefined &&
22             XDate.now() < await logjson.logjson_to_json(
23               await contact_draft.get('expires')
24             ) ? {
25               given_names: await logjson.logjson_to_json(
26                 await contact_draft.get('given_names')
27               ),
28               family_name: await logjson.logjson_to_json(
29                 await contact_draft.get('family_name')
30               ),
31               company: await logjson.logjson_to_json(
32                 await contact_draft.get('company')
33               ),
34               email: await logjson.logjson_to_json(
35                 await contact_draft.get('email')
36               ),
37               message: await logjson.logjson_to_json(
38                 await contact_draft.get('message')
39               )
40             } : null
41
42         await transaction.commit()
43         return details
44       }
45       catch (error) {
46         transaction.rollback()
47         throw error
48       }
49     }
50   )
51 }