-
Notifications
You must be signed in to change notification settings - Fork 22
/
notes-store.js
87 lines (72 loc) · 2.08 KB
/
notes-store.js
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
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
'use strict';
const fs = require('fs');
process.stdin.resume();
process.stdin.setEncoding('utf-8');
let inputString = '';
let currentLine = 0;
process.stdin.on('data', function(inputStdin) {
inputString += inputStdin;
});
process.stdin.on('end', function() {
inputString = inputString.split('\n');
main();
});
function readLine() {
return inputString[currentLine++];
}
const completedNotes = [];
const activeNotes = [];
const otherNotes = [];
class NotesStore {
addNote(state, name) {
if (name === undefined || name === null || name === '') {
throw new Error('Name cannot be empty');
}
if (!this.isValid(state)) {
throw new Error('Invalid state ' + state);
}
this.getNotesList(state).push(name);
}
getNotes(state) {
if (!this.isValid(state)) {
throw new Error('Invalid state ' + state);
}
return this.getNotesList(state);
}
getNotesList(state) {
if (state === 'completed') {
return completedNotes;
} else if (state === 'active') {
return activeNotes;
}
return otherNotes;
}
isValid(state) {
return state === 'completed'
|| state === 'active'
|| state === 'others';
}
}
function main() {
const ws = fs.createWriteStream(process.env.OUTPUT_PATH);
const obj = new NotesStore();
const operationCount = parseInt(readLine().trim());
for(let i = 1; i <= operationCount; i++) {
const operationInfo = readLine().trim().split(' ');
try {
if (operationInfo[0] === 'addNote') {
obj.addNote(operationInfo[1], operationInfo[2] || '');
} else if (operationInfo[0] === 'getNotes') {
const res = obj.getNotes(operationInfo[1]);
if (res.length === 0) {
ws.write('No Notes\n');
} else {
ws.write(`${res.join(',')}\n`);
}
}
} catch (e) {
ws.write(`${e}\n`);
}
}
ws.end();
}