//uploader.js
const dotenv = require("dotenv");
dotenv.config();
const { DataSource, UsingJoinColumnIsNotAllowedError } = require("typeorm");
const fs = require("fs");
const appDataSource = new DataSource({
type: process.env.TYPEORM_CONNECTION,
host: process.env.TYPEORM_HOST,
port: process.env.TYPEORM_PORT,
username: process.env.TYPEORM_USERNAME,
password: process.env.TYPEORM_PASSWORD,
database: process.env.TYPEORM_DATABASE
});
const initializingDataSource = async () => {
await appDataSource.initialize()
}
const csv = fs.readFileSync("./products.csv", "utf-8");
const rows = csv.split("\n");
rows.shift();
const dataArr = rows.map((val) => {
let arr = val.split(",");
return arr;
});
const sql = 'INSERT INTO products (id,name,price,thumbnail_image_url,stock,category_id) VALUES ?';
const bulkInsert = async() => {
await initializingDataSource()
await appDataSource.query(sql, [dataArr])
};
bulkInsert();
const reviewList = async (start, pageSize, productId) => {
const queryRunner = appDataSource.createQueryRunner();
await queryRunner.connect();
await queryRunner.startTransaction();
try {
const reviewList = await queryRunner.query(
`SELECT
r.id,
r.contents,
r.created_at,
u.name
FROM reviews r
LEFT JOIN users u
on r.user_id = u.id
WHERE r.product_id = ${productId}
LIMIT ${start},${pageSize}`
);
const reviewCount = await queryRunner.query(
`SELECT count(*) as reviewCount
FROM reviews
WHERE product_id = ${productId}`
);
await queryRunner.commitTransaction();
return [reviewList, reviewCount];
} catch (err) {
await queryRunner.rollbackTransactrsion();
} finally {
await queryRunner.release();
}
};