From 008c8fa5592602f19bb04255f1a35ceaa12e91b4 Mon Sep 17 00:00:00 2001 From: irada <irada.58.ch.58@ubu.ac.th> Date: Wed, 7 Feb 2018 15:42:11 +0700 Subject: [PATCH] add contact-manager CLI project --- week04/contact-manager/index.js | 29 +++ week04/contact-manager/logic.js | 44 +++++ week04/contact-manager/package.json | 18 ++ week04/contact-manager/yarn.lock | 288 ++++++++++++++++++++++++++++ week04/package.json | 15 ++ 5 files changed, 394 insertions(+) create mode 100644 week04/contact-manager/index.js create mode 100644 week04/contact-manager/logic.js create mode 100644 week04/contact-manager/package.json create mode 100644 week04/contact-manager/yarn.lock create mode 100644 week04/package.json diff --git a/week04/contact-manager/index.js b/week04/contact-manager/index.js new file mode 100644 index 0000000..800b208 --- /dev/null +++ b/week04/contact-manager/index.js @@ -0,0 +1,29 @@ +//const lower = require("./logic") +//console.log(lower.toLower("kunlasatri")) +#!/usr/bin/env node +const program = require('commander'); +const { addContact, getContact } = require('./logic'); + +program +.version('0.1.0') +.description('Contact management system'); + +program + .command('programmer') + .alias('p') + .description('เธ”เธนเธเนเธญเธกเธนเธฅเนเธเธฃเนเธเธฃเธกเน€เธกเธญเธฃเน') + .action(() => { + addContact({firstname, lastname, phone, email}); + console.log(`programmer เธเธทเธญ เธงเธดเธเธดเธ•เธฐ`); + + }); + program + .command('addContact <firstame> <lastname> <phone> <email>') + .alias('a') + .description('Add a contact') + .action((firstname, lastname, phone, email) => { + addContact({firstname, lastname, phone, email}); + }); +console.log(process.argv); + +//program.parse(process.argv); diff --git a/week04/contact-manager/logic.js b/week04/contact-manager/logic.js new file mode 100644 index 0000000..9e9e123 --- /dev/null +++ b/week04/contact-manager/logic.js @@ -0,0 +1,44 @@ +function toLower(v) { + return v.toLowerCase(); + +} +const mongoose = require('mongoose'); +//const assert = require('assert'); +mongoose.Promise = global.Promise; +const db = mongoose.connect('mongodb://localhost:27017/contactdb'); + +// Define a contact Schema +const contactSchema = mongoose.Schema({ + + + fname: { type: String, set: toLower }, + lname: { type: String, set: toLower }, + phone: { type: String, set: toLower }, + email: { type: String, set: toLower } +}); + +const Contact = mongoose.model('Contact', contactSchema); +const addContact = (contact) => { + Contact.create(contact, (err) => { + //assert.equal(null, err); + console.info('เน€เธเธดเนเธก เธฃเธฒเธขเธเธฒเธฃเธ•เธดเธ”เธ•เนเธญเนเธซเธกเน เธชเธณเน€เธฃเนเธ'); + db.disconnect(); + }); +}; + +const getContact = (name) => { + // Define search criteria. The search here is case-insensitive and inexact. + const search = new RegExp(name, 'i'); + Contact.find({$or: [{fname: search }, {lname: search }]}) + .exec((err, contact) => { + assert.equal(null, err); + console.info(contact); + console.info(`เธ•เนเธเน€เธเธญเธ—เธฑเนเธเธซเธกเธ” ${contact.length} เธฃเธฒเธขเธเธฒเธฃ`); + db.disconnect(); + }); +}; +// Export all methods +module.exports = { addContact, getContact }; + + +//exports.toLower = lower diff --git a/week04/contact-manager/package.json b/week04/contact-manager/package.json new file mode 100644 index 0000000..28d8b75 --- /dev/null +++ b/week04/contact-manager/package.json @@ -0,0 +1,18 @@ +{ + "name": "contact-manager", + "version": "1.0.0", + "description": "เธ—เธณเธ•เธฒเธกเน€เธเธฒ", + "main": "index.js", + "author": "kunlasatri", + "license": "MIT", + + + "preferGlobal": true, + "bin": "./contact.js", + + "dependencies": { + "commander": "^2.14.0", + "inquirer": "^5.1.0", + "mongoose": "^5.0.3" + } +} diff --git a/week04/contact-manager/yarn.lock b/week04/contact-manager/yarn.lock new file mode 100644 index 0000000..f3691b3 --- /dev/null +++ b/week04/contact-manager/yarn.lock @@ -0,0 +1,288 @@ +# THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY. +# yarn lockfile v1 + + +ansi-escapes@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/ansi-escapes/-/ansi-escapes-3.0.0.tgz#ec3e8b4e9f8064fc02c3ac9b65f1c275bda8ef92" + +ansi-regex@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-3.0.0.tgz#ed0317c322064f79466c02966bddb605ab37d998" + +ansi-styles@^3.1.0: + version "3.2.0" + resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-3.2.0.tgz#c159b8d5be0f9e5a6f346dab94f16ce022161b88" + dependencies: + color-convert "^1.9.0" + +async@2.1.4: + version "2.1.4" + resolved "https://registry.yarnpkg.com/async/-/async-2.1.4.tgz#2d2160c7788032e4dd6cbe2502f1f9a2c8f6cde4" + dependencies: + lodash "^4.14.0" + +bluebird@3.5.0: + version "3.5.0" + resolved "https://registry.yarnpkg.com/bluebird/-/bluebird-3.5.0.tgz#791420d7f551eea2897453a8a77653f96606d67c" + +bson@~1.0.4: + version "1.0.4" + resolved "https://registry.yarnpkg.com/bson/-/bson-1.0.4.tgz#93c10d39eaa5b58415cbc4052f3e53e562b0b72c" + +chalk@^2.0.0: + version "2.3.0" + resolved "https://registry.yarnpkg.com/chalk/-/chalk-2.3.0.tgz#b5ea48efc9c1793dccc9b4767c93914d3f2d52ba" + dependencies: + ansi-styles "^3.1.0" + escape-string-regexp "^1.0.5" + supports-color "^4.0.0" + +chardet@^0.4.0: + version "0.4.2" + resolved "https://registry.yarnpkg.com/chardet/-/chardet-0.4.2.tgz#b5473b33dc97c424e5d98dc87d55d4d8a29c8bf2" + +cli-cursor@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/cli-cursor/-/cli-cursor-2.1.0.tgz#b35dac376479facc3e94747d41d0d0f5238ffcb5" + dependencies: + restore-cursor "^2.0.0" + +cli-width@^2.0.0: + version "2.2.0" + resolved "https://registry.yarnpkg.com/cli-width/-/cli-width-2.2.0.tgz#ff19ede8a9a5e579324147b0c11f0fbcbabed639" + +color-convert@^1.9.0: + version "1.9.1" + resolved "https://registry.yarnpkg.com/color-convert/-/color-convert-1.9.1.tgz#c1261107aeb2f294ebffec9ed9ecad529a6097ed" + dependencies: + color-name "^1.1.1" + +color-name@^1.1.1: + version "1.1.3" + resolved "https://registry.yarnpkg.com/color-name/-/color-name-1.1.3.tgz#a7d0558bd89c42f795dd42328f740831ca53bc25" + +commander@^2.14.0: + version "2.14.0" + resolved "https://registry.yarnpkg.com/commander/-/commander-2.14.0.tgz#7b25325963e6aace20d3a9285b09379b0c2208b5" + +debug@2.6.9: + version "2.6.9" + resolved "https://registry.yarnpkg.com/debug/-/debug-2.6.9.tgz#5d128515df134ff327e90a4c93f4e077a536341f" + dependencies: + ms "2.0.0" + +escape-string-regexp@^1.0.5: + version "1.0.5" + resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz#1b61c0562190a8dff6ae3bb2cf0200ca130b86d4" + +external-editor@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/external-editor/-/external-editor-2.1.0.tgz#3d026a21b7f95b5726387d4200ac160d372c3b48" + dependencies: + chardet "^0.4.0" + iconv-lite "^0.4.17" + tmp "^0.0.33" + +figures@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/figures/-/figures-2.0.0.tgz#3ab1a2d2a62c8bfb431a0c94cb797a2fce27c962" + dependencies: + escape-string-regexp "^1.0.5" + +has-flag@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-2.0.0.tgz#e8207af1cc7b30d446cc70b734b5e8be18f88d51" + +iconv-lite@^0.4.17: + version "0.4.19" + resolved "https://registry.yarnpkg.com/iconv-lite/-/iconv-lite-0.4.19.tgz#f7468f60135f5e5dad3399c0a81be9a1603a082b" + +inquirer@^5.1.0: + version "5.1.0" + resolved "https://registry.yarnpkg.com/inquirer/-/inquirer-5.1.0.tgz#19da508931892328abbbdd4c477f1efc65abfd67" + dependencies: + ansi-escapes "^3.0.0" + chalk "^2.0.0" + cli-cursor "^2.1.0" + cli-width "^2.0.0" + external-editor "^2.1.0" + figures "^2.0.0" + lodash "^4.3.0" + mute-stream "0.0.7" + run-async "^2.2.0" + rxjs "^5.5.2" + string-width "^2.1.0" + strip-ansi "^4.0.0" + through "^2.3.6" + +is-fullwidth-code-point@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz#a3b30a5c4f199183167aaab93beefae3ddfb654f" + +is-promise@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/is-promise/-/is-promise-2.1.0.tgz#79a2a9ece7f096e80f36d2b2f3bc16c1ff4bf3fa" + +kareem@2.0.3: + version "2.0.3" + resolved "https://registry.yarnpkg.com/kareem/-/kareem-2.0.3.tgz#d05c7ad76b045bc50c197b2cd13d2d1ef5671070" + +lodash.get@4.4.2: + version "4.4.2" + resolved "https://registry.yarnpkg.com/lodash.get/-/lodash.get-4.4.2.tgz#2d177f652fa31e939b4438d5341499dfa3825e99" + +lodash@^4.14.0, lodash@^4.3.0: + version "4.17.5" + resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.5.tgz#99a92d65c0272debe8c96b6057bc8fbfa3bed511" + +mimic-fn@^1.0.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/mimic-fn/-/mimic-fn-1.2.0.tgz#820c86a39334640e99516928bd03fca88057d022" + +mongodb-core@3.0.2: + version "3.0.2" + resolved "https://registry.yarnpkg.com/mongodb-core/-/mongodb-core-3.0.2.tgz#914896092dd45427d9a4f98a7997a0bfb81d163b" + dependencies: + bson "~1.0.4" + require_optional "^1.0.1" + +mongodb@3.0.2: + version "3.0.2" + resolved "https://registry.yarnpkg.com/mongodb/-/mongodb-3.0.2.tgz#28172302ed4e9388d8091e2cc4618057e6f5debc" + dependencies: + mongodb-core "3.0.2" + +mongoose-legacy-pluralize@1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/mongoose-legacy-pluralize/-/mongoose-legacy-pluralize-1.0.2.tgz#3ba9f91fa507b5186d399fb40854bff18fb563e4" + +mongoose@^5.0.3: + version "5.0.3" + resolved "https://registry.yarnpkg.com/mongoose/-/mongoose-5.0.3.tgz#e320c629fa44e4afba1d8b4ac865f9a4cea7f157" + dependencies: + async "2.1.4" + bson "~1.0.4" + kareem "2.0.3" + lodash.get "4.4.2" + mongodb "3.0.2" + mongoose-legacy-pluralize "1.0.2" + mpath "0.3.0" + mquery "3.0.0" + ms "2.0.0" + regexp-clone "0.0.1" + sliced "1.0.1" + +mpath@0.3.0: + version "0.3.0" + resolved "https://registry.yarnpkg.com/mpath/-/mpath-0.3.0.tgz#7a58f789e9b5fd3c94520634157960f26bd5ef44" + +mquery@3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/mquery/-/mquery-3.0.0.tgz#e5f387dbabc0b9b69859e550e810faabe0ceabb0" + dependencies: + bluebird "3.5.0" + debug "2.6.9" + regexp-clone "0.0.1" + sliced "0.0.5" + +ms@2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/ms/-/ms-2.0.0.tgz#5608aeadfc00be6c2901df5f9861788de0d597c8" + +mute-stream@0.0.7: + version "0.0.7" + resolved "https://registry.yarnpkg.com/mute-stream/-/mute-stream-0.0.7.tgz#3075ce93bc21b8fab43e1bc4da7e8115ed1e7bab" + +onetime@^2.0.0: + version "2.0.1" + resolved "https://registry.yarnpkg.com/onetime/-/onetime-2.0.1.tgz#067428230fd67443b2794b22bba528b6867962d4" + dependencies: + mimic-fn "^1.0.0" + +os-tmpdir@~1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/os-tmpdir/-/os-tmpdir-1.0.2.tgz#bbe67406c79aa85c5cfec766fe5734555dfa1274" + +regexp-clone@0.0.1: + version "0.0.1" + resolved "https://registry.yarnpkg.com/regexp-clone/-/regexp-clone-0.0.1.tgz#a7c2e09891fdbf38fbb10d376fb73003e68ac589" + +require_optional@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/require_optional/-/require_optional-1.0.1.tgz#4cf35a4247f64ca3df8c2ef208cc494b1ca8fc2e" + dependencies: + resolve-from "^2.0.0" + semver "^5.1.0" + +resolve-from@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/resolve-from/-/resolve-from-2.0.0.tgz#9480ab20e94ffa1d9e80a804c7ea147611966b57" + +restore-cursor@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/restore-cursor/-/restore-cursor-2.0.0.tgz#9f7ee287f82fd326d4fd162923d62129eee0dfaf" + dependencies: + onetime "^2.0.0" + signal-exit "^3.0.2" + +run-async@^2.2.0: + version "2.3.0" + resolved "https://registry.yarnpkg.com/run-async/-/run-async-2.3.0.tgz#0371ab4ae0bdd720d4166d7dfda64ff7a445a6c0" + dependencies: + is-promise "^2.1.0" + +rxjs@^5.5.2: + version "5.5.6" + resolved "https://registry.yarnpkg.com/rxjs/-/rxjs-5.5.6.tgz#e31fb96d6fd2ff1fd84bcea8ae9c02d007179c02" + dependencies: + symbol-observable "1.0.1" + +semver@^5.1.0: + version "5.5.0" + resolved "https://registry.yarnpkg.com/semver/-/semver-5.5.0.tgz#dc4bbc7a6ca9d916dee5d43516f0092b58f7b8ab" + +signal-exit@^3.0.2: + version "3.0.2" + resolved "https://registry.yarnpkg.com/signal-exit/-/signal-exit-3.0.2.tgz#b5fdc08f1287ea1178628e415e25132b73646c6d" + +sliced@0.0.5: + version "0.0.5" + resolved "https://registry.yarnpkg.com/sliced/-/sliced-0.0.5.tgz#5edc044ca4eb6f7816d50ba2fc63e25d8fe4707f" + +sliced@1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/sliced/-/sliced-1.0.1.tgz#0b3a662b5d04c3177b1926bea82b03f837a2ef41" + +string-width@^2.1.0: + version "2.1.1" + resolved "https://registry.yarnpkg.com/string-width/-/string-width-2.1.1.tgz#ab93f27a8dc13d28cac815c462143a6d9012ae9e" + dependencies: + is-fullwidth-code-point "^2.0.0" + strip-ansi "^4.0.0" + +strip-ansi@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-4.0.0.tgz#a8479022eb1ac368a871389b635262c505ee368f" + dependencies: + ansi-regex "^3.0.0" + +supports-color@^4.0.0: + version "4.5.0" + resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-4.5.0.tgz#be7a0de484dec5c5cddf8b3d59125044912f635b" + dependencies: + has-flag "^2.0.0" + +symbol-observable@1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/symbol-observable/-/symbol-observable-1.0.1.tgz#8340fc4702c3122df5d22288f88283f513d3fdd4" + +through@^2.3.6: + version "2.3.8" + resolved "https://registry.yarnpkg.com/through/-/through-2.3.8.tgz#0dd4c9ffaabc357960b1b724115d7e0e86a2e1f5" + +tmp@^0.0.33: + version "0.0.33" + resolved "https://registry.yarnpkg.com/tmp/-/tmp-0.0.33.tgz#6d34335889768d21b2bcda0aa277ced3b1bfadf9" + dependencies: + os-tmpdir "~1.0.2" diff --git a/week04/package.json b/week04/package.json new file mode 100644 index 0000000..4b67cb5 --- /dev/null +++ b/week04/package.json @@ -0,0 +1,15 @@ +{ + "name": "week04", + "version": "1.0.0", + "description": "เธเธฒเธฃเธเนเธฒเธเธชเธฑเธเธ”เธฒเธซเนเธ—เธตเน 4", + "main": "index.js", + "scripts": { + "test": "echo \"Error: no test specified\" && exit 1" + }, + "keywords": [ + "เธเธญเธเธฐเนเธเธเธเธฒเธฃเธเนเธฒเธ", + "week04" + ], + "author": "kunlasatri", + "license": "ISC" +} -- 2.18.1