-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathindex.js
More file actions
60 lines (57 loc) · 1.65 KB
/
Copy pathindex.js
File metadata and controls
60 lines (57 loc) · 1.65 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
import { http, storage } from "@ampt/sdk";
import express, { Router } from "express";
import { data } from "@ampt/data";
import Papa from "papaparse";
import multer from 'multer';
const multipartFormLoader = multer({ storage: multer.memoryStorage() }).any();
const app = express();
app.use(multipartFormLoader);
const publicApi = Router();
const csvStorage = storage('csvs');
publicApi.post("/csv", async (req, res) => {
try {
const delimiter = ",";
if (!req.files || !req.files.length) {
return res.status(400).send("No files were uploaded.");
}
const buffer = req.files[0].buffer;
const filename = req.files[0].originalname;
const writeResponse = await csvStorage.write(filename, buffer, {
metadata: { delimiter },
});
return res.json(writeResponse);
} catch (err) {
res.status(500).send(err);
}
});
csvStorage.on("write:*.csv", async (event) => {
try {
const { path } = event;
const { metadata } = await csvStorage.stat(path);
const delimiter = metadata.delimiter || ",";
const buffer = await csvStorage.readBuffer(path);
const csvString = buffer.toString("utf-8");
const csv = Papa.parse(csvString, {
header: true,
delimiter,
});
if (csv.data.length) {
await Promise.all(
csv.data.map((row) => {
const id = row["$distinct_id"];
const firstName = row["$name"];
const email = row["$email"];
return data.set(`customer:${id}`, {
id,
firstName,
email,
});
})
);
}
} catch (e) {
console.error(e);
}
});
app.use("/api", publicApi);
http.useNodeHandler(app);