Skip to content

Commit

Permalink
feat: add name loader
Browse files Browse the repository at this point in the history
  • Loading branch information
berviantoleo committed Dec 1, 2024
1 parent b98e30d commit b2241b3
Show file tree
Hide file tree
Showing 8 changed files with 80 additions and 8 deletions.
4 changes: 3 additions & 1 deletion package.json
Original file line number Diff line number Diff line change
Expand Up @@ -5,10 +5,12 @@
"build": "tsc",
"start": "node dist/index.js",
"dev": "nodemon src/index.ts",
"test": "jest"
"test": "jest",
"import": "nodemon src/name-loader-program.ts"
},
"dependencies": {
"body-parser": "^1.20.3",
"csv-parse": "^5.6.0",
"dotenv": "^16.4.5",
"express": "^4.20.0",
"express-rate-limit": "^7.4.0",
Expand Down
2 changes: 2 additions & 0 deletions sample.csv
Original file line number Diff line number Diff line change
@@ -0,0 +1,2 @@
username,name
berviantoleo,Bervianto Leo Pratama
37 changes: 37 additions & 0 deletions src/helper/name-loader.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,37 @@
import fs from 'fs';
import { parse } from 'csv-parse/sync';
import mongoose from 'mongoose';
import dotenv from 'dotenv';
import logger from '../logger';
import name from '../models/name';

dotenv.config();

async function loadData() {
const readSample = fs.readFileSync('sample.csv');
const records = parse(readSample, {
columns: true,
});
if (Array.isArray(records)) {
for (const record of records) {
logger.info(`Load: ${JSON.stringify(record)}`);
const result = await name.findOneAndUpdate({username: record.username}, {
username: record.username,
name: record.name,
createdAt: Date.now()
}, {
upsert: true,
returnNewDocument: true
});
logger.info(`Saved: ${result?._id}. Result: ${JSON.stringify(result)}`);
}
}
}

async function startLoader() {
await mongoose.connect(process.env.MONGO_CONNECTION_STRING || '');
logger.info("MongoDB Connected!");
await loadData();
}

export default startLoader;
2 changes: 2 additions & 0 deletions src/name-loader-program.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,2 @@
import nameLoader from './helper/name-loader';
nameLoader();
10 changes: 5 additions & 5 deletions test/invitation.spec.ts
Original file line number Diff line number Diff line change
Expand Up @@ -15,15 +15,15 @@ describe("Test the invitation path", () => {
});
});

beforeEach(async () => {
await Invitation.deleteMany();
})

afterAll(async () => {
await Name.deleteMany();
await Name.deleteMany({});
await mongoose.disconnect();
});

afterEach(async () => {
await Invitation.deleteMany({});
})

test("It should response the GET method", async () => {
let dateNow = Date.now();
let objectItem = {
Expand Down
8 changes: 6 additions & 2 deletions test/name.spec.ts
Original file line number Diff line number Diff line change
Expand Up @@ -15,15 +15,19 @@ describe("Test the name path", () => {
test("It should response the GET method", async () => {
let dateNow = Date.now();
const objectItem = {
username: 'berviantoleo',
username: 'berviantoleo-test',
name: 'Bervianto',
createdAt: dateNow
};
await Name.create(objectItem);
const response = await request(app).get("/name/berviantoleo");
const response = await request(app).get("/name/berviantoleo-test");
expect(response.statusCode).toBe(200);
expect(response.body.username).toBe(objectItem.username);
expect(response.body.name).toBe(objectItem.name);
expect(response.body.createdAt).toBe(new Date(objectItem.createdAt).toISOString());
});

afterEach(async () => {
await Name.deleteMany({});
})
});
17 changes: 17 additions & 0 deletions test/nameloader.spec.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,17 @@
import loader from '../src/helper/name-loader';
import app from "../src/app";
import Name from "../src/models/name";

describe("Test the name path", () => {
test("Should load correctly", async () => {
await loader();

const successLoad = await Name.findOne({username: 'berviantoleo'});
expect(successLoad?._id).not.toBeNull();
expect(successLoad?.name).toBe('Bervianto Leo Pratama');
});

afterEach(async () => {
await Name.deleteMany({});
})
});
8 changes: 8 additions & 0 deletions yarn.lock
Original file line number Diff line number Diff line change
Expand Up @@ -2823,6 +2823,13 @@ __metadata:
languageName: node
linkType: hard

"csv-parse@npm:^5.6.0":
version: 5.6.0
resolution: "csv-parse@npm:5.6.0"
checksum: 10c0/52f5e6c45359902e0c8e57fc2eeed41366dc6b6d283b495b538dd50c8e8510413d6f924096ea056319cbbb8ed26e111c3a3485d7985c021bcf5abaa9e92425c7
languageName: node
linkType: hard

"debug@npm:2.6.9":
version: 2.6.9
resolution: "debug@npm:2.6.9"
Expand Down Expand Up @@ -3667,6 +3674,7 @@ __metadata:
"@types/node": "npm:^22.2.0"
"@types/supertest": "npm:^6.0.2"
body-parser: "npm:^1.20.3"
csv-parse: "npm:^5.6.0"
dotenv: "npm:^16.4.5"
express: "npm:^4.20.0"
express-rate-limit: "npm:^7.4.0"
Expand Down

0 comments on commit b2241b3

Please sign in to comment.