use-database
diff --git a/packages/contact/create-table.js b/packages/contact/create-table.js
new file mode 100644
index 0000000..144c50b
--- /dev/null
+++ b/packages/contact/create-table.js
@@ -0,0 +1,65 @@
+// Licensed to the Apache Software Foundation (ASF) under one
+// or more contributor license agreements. See the NOTICE file
+// distributed with this work for additional information
+// regarding copyright ownership. The ASF licenses this file
+// to you under the Apache License, Version 2.0 (the
+// "License"); you may not use this file except in compliance
+// with the License. You may obtain a copy of the License at
+//
+// http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing,
+// software distributed under the License is distributed on an
+// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+// KIND, either express or implied. See the License for the
+// specific language governing permissions and limitations
+// under the License.
+
+//--kind nodejs:default
+//--param POSTGRES_URL $POSTGRES_URL
+
+const { Client } = require('pg')
+
+async function main(args) {
+ console.log('Starting create-table action')
+ const client = new Client({ connectionString: args.POSTGRES_URL });
+
+ const createSchema = `CREATE SCHEMA IF NOT EXISTS demo;`
+
+ const createTable = `
+ CREATE TABLE IF NOT EXISTS demo.contacts (
+ id serial PRIMARY KEY,
+ name varchar(50),
+ email varchar(50),
+ phone varchar(50),
+ message varchar(300)
+ );
+ `
+
+ try {
+ console.log(`Connecting to ${args.POSTGRES_URL}`);
+ await client.connect();
+ console.log('Connected to database');
+ await client.query(createSchema);
+ console.log('Schema demo created');
+ await client.query(createTable);
+ console.log('Contact table created');
+ return { result: 'OK' };
+ } catch (e) {
+ if (e instanceof AggregateError) {
+ for (const err of e.errors) {
+ console.error('[ERROR] - ', err.message || err);
+ }
+ } else if (e instanceof Error) {
+ console.error('[ERROR] - ', e.message);
+ } else {
+ console.error('[ERROR] - ', e);
+ }
+ return { result: 'ERROR' };
+ } finally {
+ console.log('Closing connection');
+ if (client) {
+ await client.end();
+ }
+ }
+}
diff --git a/packages/contact/write.js b/packages/contact/write.js
new file mode 100644
index 0000000..c98c2ba
--- /dev/null
+++ b/packages/contact/write.js
@@ -0,0 +1,51 @@
+// Licensed to the Apache Software Foundation (ASF) under one
+// or more contributor license agreements. See the NOTICE file
+// distributed with this work for additional information
+// regarding copyright ownership. The ASF licenses this file
+// to you under the Apache License, Version 2.0 (the
+// "License"); you may not use this file except in compliance
+// with the License. You may obtain a copy of the License at
+//
+// http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing,
+// software distributed under the License is distributed on an
+// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+// KIND, either express or implied. See the License for the
+// specific language governing permissions and limitations
+// under the License.
+
+//--kind nodejs:default
+//--param POSTGRES_URL $POSTGRES_URL
+
+const {Client} = require('pg')
+
+async function main(args) {
+ const client = new Client({connectionString: args.POSTGRES_URL});
+
+ // Connect to database server
+ await client.connect();
+
+ const {name, email, phone, message} = args;
+
+ try {
+ let res = await client.query(
+ 'INSERT INTO demo.contacts(name,email,phone,message) VALUES($1,$2,$3,$4)',
+ [name, email, phone, message]
+ );
+ console.log(res);
+ } catch (e) {
+ console.log(e);
+ throw e;
+ } finally {
+ client.end();
+ }
+
+ return {
+ body: args.body,
+ name,
+ email,
+ phone,
+ message
+ };
+}
diff --git a/web/index.html b/web/index.html
index b00a1d0..2521b40 100644
--- a/web/index.html
+++ b/web/index.html
@@ -33,7 +33,7 @@
<div class="w-50 p-4 border rounded bg-light shadow">
<h2 class="text-center mb-4">Get In Touch</h2>
- <form method="POST" action="/api/v1/web/opstutorial/contact/submit" enctype="application/x-www-form-urlencoded">
+ <form method="POST" action="/api/v1/web/opstutorial/contact/submit-write" enctype="application/x-www-form-urlencoded">
<div class="mb-3">
<label for="name" class="form-label">Name</label>
<input type="text" class="form-control" id="name" name="name" placeholder="Insert your name">