summaryrefslogtreecommitdiff
path: root/index.js
diff options
context:
space:
mode:
Diffstat (limited to 'index.js')
-rw-r--r--index.js143
1 files changed, 143 insertions, 0 deletions
diff --git a/index.js b/index.js
new file mode 100644
index 0000000..bd50051
--- /dev/null
+++ b/index.js
@@ -0,0 +1,143 @@
+import express from 'express';
+import { MongoClient } from 'mongodb';
+import { google } from 'googleapis';
+import crypto from 'crypto';
+import dotenv from 'dotenv'; // For loading environment variables
+import fs from 'fs'; // For reading the Google credentials JSON file
+
+dotenv.config(); // Load .env variables
+
+const app = express();
+const port = 3000;
+
+app.use(express.json());
+
+// Mongo URI from .env
+const uri = process.env.MONGO_URI;
+const client = new MongoClient(uri);
+const dbName = 'inventory';
+const collectionName = 'items';
+
+// Load Google credentials from the key.json file
+const googleCredentialsPath = process.env.GOOGLE_CREDENTIALS_PATH;
+const googleApisKey = JSON.parse(fs.readFileSync(googleCredentialsPath, 'utf8'));
+
+// Initialize Google Sheets API authentication
+const auth = new google.auth.JWT(
+ googleApisKey.client_email,
+ null,
+ googleApisKey.private_key,
+ ['https://www.googleapis.com/auth/spreadsheets']
+);
+
+const spreadsheetId = process.env.SPREADSHEET_ID;
+const sheets = google.sheets({ version: 'v4', auth });
+const range = 'Sheet1!A:H';
+
+// Connect to MongoDB
+async function connectDB() {
+ try {
+ await client.connect();
+ console.log('Connected to MongoDB!');
+ } catch (err) {
+ console.error('Error connecting to MongoDB:', err);
+ process.exit(1);
+ }
+}
+
+connectDB();
+
+// Generate Serial Number
+function generateSerialNumber() {
+ return `Jadupc${crypto.randomInt(100000, 999999)}`;
+}
+
+// Route to upload device details
+app.post('/upload', async (req, res) => {
+ const { Verient, mac, os, status, customerAddress, customerNumber, customerName } = req.body;
+
+ if (!Verient || !mac || !os) {
+ return res.status(400).send('Missing required fields: Verient, mac, os, or status');
+ }
+
+ // Check if device already exists in database
+ try {
+ const db = client.db(dbName);
+ const collection = db.collection(collectionName);
+
+ const existingDevice = await collection.findOne({ mac });
+
+ if (existingDevice) {
+ return res.status(400).send('Device with the same MAC address is already registered');
+ }
+
+ // Generate serial number
+ const serialNumber = generateSerialNumber();
+
+ const newItem = {
+ serialNumber,
+ Verient,
+ mac,
+ os,
+ status: status || 'registered',
+ customerAddress,
+ customerNumber,
+ customerName,
+ };
+
+ await collection.insertOne(newItem);
+ console.log('Item successfully added to MongoDB');
+
+ try {
+ // Append data to Google Sheets
+ const response = await sheets.spreadsheets.values.append({
+ spreadsheetId,
+ range,
+ valueInputOption: 'USER_ENTERED',
+ requestBody: {
+ values: [[serialNumber, Verient, mac, os, status, customerAddress, customerNumber, customerName]],
+ },
+ });
+ console.log('Data successfully appended to Google Sheets');
+ res.status(200).send('Device uploaded and added to MongoDB and Google Sheets. Serial Number: ' + serialNumber);
+ } catch (err) {
+ console.error('Error appending to Google Sheets:', err);
+ res.status(500).send('Error uploading to Google Sheets');
+ }
+ } catch (err) {
+ console.error('Error inserting item into MongoDB:', err);
+ res.status(500).send('Error uploading item to MongoDB');
+ }
+});
+
+// Route to check device status
+app.get('/check-status', async (req, res) => {
+ const { mac, serialNumber } = req.query;
+
+ if (!mac && !serialNumber) {
+ return res.status(400).send('MAC or Serial Number required');
+ }
+
+ try {
+ const db = client.db(dbName);
+ const collection = db.collection(collectionName);
+ const device = await collection.findOne(mac ? { mac } : { serialNumber });
+
+ if (!device) {
+ return res.status(200).json({
+ serialNumber: null,
+ status: 'new' // Default status if not found
+ });
+ }
+
+ res.status(200).json({
+ serialNumber: device.serialNumber,
+ status: device.status // Default status if missing
+ });
+ } catch (err) {
+ res.status(500).send('Error checking device status');
+ }
+});
+
+// Start the server
+app.listen(port, () => console.log(`Server running on http://localhost:${port}`));