From fdd5d8a5400599c0c4ddb9cb316e67bbf50ee489 Mon Sep 17 00:00:00 2001 From: ryanwong Date: Sun, 6 Feb 2022 22:22:04 -0500 Subject: [PATCH] day 14 --- .DS_Store | Bin 14340 -> 18436 bytes day14/.DS_Store | Bin 0 -> 6148 bytes day14/Model_builder.js | 13 +++ day14/README.md | 49 ++++++++++ day14/configuration.json | 37 +++++++ day14/initialize/app.js | 41 ++++++++ day14/initialize/bin/www | 90 ++++++++++++++++++ day14/initialize/package.json | 16 ++++ day14/initialize/public/stylesheets/style.css | 8 ++ day14/initialize/routes/index.js | 9 ++ day14/initialize/routes/users.js | 9 ++ day14/initialize/views/error.jade | 6 ++ day14/initialize/views/index.jade | 5 + day14/initialize/views/layout.jade | 7 ++ day14/release/.gitkeep | 0 15 files changed, 290 insertions(+) create mode 100644 day14/.DS_Store create mode 100644 day14/Model_builder.js create mode 100644 day14/configuration.json create mode 100644 day14/initialize/app.js create mode 100755 day14/initialize/bin/www create mode 100644 day14/initialize/package.json create mode 100644 day14/initialize/public/stylesheets/style.css create mode 100644 day14/initialize/routes/index.js create mode 100644 day14/initialize/routes/users.js create mode 100644 day14/initialize/views/error.jade create mode 100644 day14/initialize/views/index.jade create mode 100644 day14/initialize/views/layout.jade create mode 100644 day14/release/.gitkeep diff --git a/.DS_Store b/.DS_Store index 6c2932a2f5d2064a1e40e0e793c0967ba038e9ce..cf789512d5732d740866c1b5130c8a0e0c2484fe 100644 GIT binary patch delta 453 zcmZoEXqmvM!oa}5=v10w$iUzLWO4v8h!)^sU|`~8U{CCr|^CVgt4nU4DQL_znO~!eY8D@oWdphm2pqV9ge!XRZM^uJc{0C=t_?^DBM>)0 oXb=+&fDB;J0z(`U0UjVWP%HpSCxGb5`8=(YFG@wC_(OvU0Q#_DJpcdz delta 303 zcmZpfz}Qlt!oa}5=v10w$iQF#WO4v8h!)@h5^W3&3Lu(cqKdX?0+40~N-!`~G8i%# zmIW8(<>XH+RGw_$!XnQIlw<*7R)!RYL}Ued=|EA&$yy3hn;WINST`%M>}1@`&cVXL z=&{*JkC}1u2UD)ek_PgV6HOC0-!V02n*4)FX)}+2EDxjjW*&uJj>$24f}2-qn6au? zml*m7-#F}uYE5o_ic3;XeiBfW1FT{)yPhn_DGZz4r0z3HvVxdEKXC&IS7d)}7G!zP mJel7`mlNdp13=6$*@j12fC&-^79ar-n4HejyZNsQJ2L=uH#@!n diff --git a/day14/.DS_Store b/day14/.DS_Store new file mode 100644 index 0000000000000000000000000000000000000000..8ad22e11d9b6e573921554e7367a67f49cadd7f5 GIT binary patch literal 6148 zcmeHKJ5B>J5S@V(5lAQ{rLT}1m}ogcE&w42B5l|dp`r2-xC0$6N8kz^i1$20#EOkX zfe=D7()ih)kG)S?+an@6yI)R4CL%J15|y0+;q;*Cz@0}xtvOb5DXpyJL9Pc9{lzKn z{Rlh0gKnX_{kJ#M`Bk^x*rrcj_W7;5rdhPz0(O%0^!)aEw%>R8ZQsr9=k*_vG9(xX z27-ZLAQ<=&25@In#>a-y1_QxBFtB5Q=R<-Lvtu!=M+cf(0s#4pu7W;m3C1MH>{tw8 zfvAN7EmXb4Pz%R=a=+|Y3@u#Lix2gcKZ+Nvt0RA^?xNW++F&3U=reF=!wK*IbNn)c zMSeddM!`TZ@Xr{~Q8RC5_$a?yzkD9=+629TQs`IMfuP@e1Yp2( T!uc8wjE6uaB${C07Z`X4VH`22 literal 0 HcmV?d00001 diff --git a/day14/Model_builder.js b/day14/Model_builder.js new file mode 100644 index 0000000..6136b4d --- /dev/null +++ b/day14/Model_builder.js @@ -0,0 +1,13 @@ +let fs = require('fs'); + +function Model_builder() { + let config = fs.readFileSync('configuration.json'); + + this.build = function () { + //generate files and put it into release folder + //Copy initialize files into release folder + //TODO + } + + return this; +} \ No newline at end of file diff --git a/day14/README.md b/day14/README.md index e69de29..704b74b 100644 --- a/day14/README.md +++ b/day14/README.md @@ -0,0 +1,49 @@ +# node_task_2 + +1. Clone repo to your own github +2. Read the configuration.json +3. Create release folder +4. Make a class called Model_builder.js with function build. +5. In build function, read the configuration.json and make the following for each model: + +- create the model file based on the configuration. You are automating creating project files. + +8. Make a class called Controller_builder.js with function build. +9. In build function, read the configuration.json and make the following for each model: + +- add route to handle get model +- add route to handle create model +- add route to handle update model +- add route to handle delete model + +You are automating creating project files. + +10. This need to be done today + +Example + +``` +configuration.json +field columns are (the field name, the field type, the field label, the validation rule) +{ +"model": [ + { + "name": "location", + "field: [ + ["id", "integer", "ID", "required"], + ["name", "string", "Name", "required"], + ["status", "integer", "Status", "required"], + ] + }, + { + "name": "user", + "field: [ + ["id", "integer", "ID", "required"], + ["name", "string", "Name", "required"], + ["email", "string", "Email", "required"], + ["status", "integer", "Status", "required"], + ] + } +] +} +``` diff --git a/day14/configuration.json b/day14/configuration.json new file mode 100644 index 0000000..65313cc --- /dev/null +++ b/day14/configuration.json @@ -0,0 +1,37 @@ +{ +"model": [ + { + "name": "location", + "field: [ + ["id", "integer", "ID", "required"], + ["name", "string", "Name", "required"], + ["status", "integer", "Status", "required"], + ] + }, + { + "name": "email", + "field: [ + ["id", "integer", "ID", "required"], + ["email", "string", "Email", "required"], + ["status", "integer", "Status", "required"], + ] + }, + { + "name": "sms", + "field: [ + ["id", "integer", "ID", "required"], + ["phone", "string", "Phone", "required"], + ["status", "integer", "Status", "required"], + ] + }, + { + "name": "user", + "field: [ + ["id", "integer", "ID", "required"], + ["name", "string", "Name", "required"], + ["email", "string", "Email", "required"], + ["status", "integer", "Status", "required"], + ] + } +] +} diff --git a/day14/initialize/app.js b/day14/initialize/app.js new file mode 100644 index 0000000..662bcc9 --- /dev/null +++ b/day14/initialize/app.js @@ -0,0 +1,41 @@ +var createError = require('http-errors'); +var express = require('express'); +var path = require('path'); +var cookieParser = require('cookie-parser'); +var logger = require('morgan'); + +var indexRouter = require('./routes/index'); +var usersRouter = require('./routes/users'); + +var app = express(); + +// view engine setup +app.set('views', path.join(__dirname, 'views')); +app.set('view engine', 'jade'); + +app.use(logger('dev')); +app.use(express.json()); +app.use(express.urlencoded({ extended: false })); +app.use(cookieParser()); +app.use(express.static(path.join(__dirname, 'public'))); + +app.use('/', indexRouter); +app.use('/users', usersRouter); + +// catch 404 and forward to error handler +app.use(function(req, res, next) { + next(createError(404)); +}); + +// error handler +app.use(function(err, req, res, next) { + // set locals, only providing error in development + res.locals.message = err.message; + res.locals.error = req.app.get('env') === 'development' ? err : {}; + + // render the error page + res.status(err.status || 500); + res.render('error'); +}); + +module.exports = app; diff --git a/day14/initialize/bin/www b/day14/initialize/bin/www new file mode 100755 index 0000000..344babb --- /dev/null +++ b/day14/initialize/bin/www @@ -0,0 +1,90 @@ +#!/usr/bin/env node + +/** + * Module dependencies. + */ + +var app = require('../app'); +var debug = require('debug')('initialize:server'); +var http = require('http'); + +/** + * Get port from environment and store in Express. + */ + +var port = normalizePort(process.env.PORT || '3000'); +app.set('port', port); + +/** + * Create HTTP server. + */ + +var server = http.createServer(app); + +/** + * Listen on provided port, on all network interfaces. + */ + +server.listen(port); +server.on('error', onError); +server.on('listening', onListening); + +/** + * Normalize a port into a number, string, or false. + */ + +function normalizePort(val) { + var port = parseInt(val, 10); + + if (isNaN(port)) { + // named pipe + return val; + } + + if (port >= 0) { + // port number + return port; + } + + return false; +} + +/** + * Event listener for HTTP server "error" event. + */ + +function onError(error) { + if (error.syscall !== 'listen') { + throw error; + } + + var bind = typeof port === 'string' + ? 'Pipe ' + port + : 'Port ' + port; + + // handle specific listen errors with friendly messages + switch (error.code) { + case 'EACCES': + console.error(bind + ' requires elevated privileges'); + process.exit(1); + break; + case 'EADDRINUSE': + console.error(bind + ' is already in use'); + process.exit(1); + break; + default: + throw error; + } +} + +/** + * Event listener for HTTP server "listening" event. + */ + +function onListening() { + var addr = server.address(); + var bind = typeof addr === 'string' + ? 'pipe ' + addr + : 'port ' + addr.port; + debug('Listening on ' + bind); +} diff --git a/day14/initialize/package.json b/day14/initialize/package.json new file mode 100644 index 0000000..6f1bb76 --- /dev/null +++ b/day14/initialize/package.json @@ -0,0 +1,16 @@ +{ + "name": "initialize", + "version": "0.0.0", + "private": true, + "scripts": { + "start": "node ./bin/www" + }, + "dependencies": { + "cookie-parser": "~1.4.4", + "debug": "~2.6.9", + "express": "~4.16.1", + "http-errors": "~1.6.3", + "jade": "~1.11.0", + "morgan": "~1.9.1" + } +} diff --git a/day14/initialize/public/stylesheets/style.css b/day14/initialize/public/stylesheets/style.css new file mode 100644 index 0000000..9453385 --- /dev/null +++ b/day14/initialize/public/stylesheets/style.css @@ -0,0 +1,8 @@ +body { + padding: 50px; + font: 14px "Lucida Grande", Helvetica, Arial, sans-serif; +} + +a { + color: #00B7FF; +} diff --git a/day14/initialize/routes/index.js b/day14/initialize/routes/index.js new file mode 100644 index 0000000..ecca96a --- /dev/null +++ b/day14/initialize/routes/index.js @@ -0,0 +1,9 @@ +var express = require('express'); +var router = express.Router(); + +/* GET home page. */ +router.get('/', function(req, res, next) { + res.render('index', { title: 'Express' }); +}); + +module.exports = router; diff --git a/day14/initialize/routes/users.js b/day14/initialize/routes/users.js new file mode 100644 index 0000000..623e430 --- /dev/null +++ b/day14/initialize/routes/users.js @@ -0,0 +1,9 @@ +var express = require('express'); +var router = express.Router(); + +/* GET users listing. */ +router.get('/', function(req, res, next) { + res.send('respond with a resource'); +}); + +module.exports = router; diff --git a/day14/initialize/views/error.jade b/day14/initialize/views/error.jade new file mode 100644 index 0000000..51ec12c --- /dev/null +++ b/day14/initialize/views/error.jade @@ -0,0 +1,6 @@ +extends layout + +block content + h1= message + h2= error.status + pre #{error.stack} diff --git a/day14/initialize/views/index.jade b/day14/initialize/views/index.jade new file mode 100644 index 0000000..3d63b9a --- /dev/null +++ b/day14/initialize/views/index.jade @@ -0,0 +1,5 @@ +extends layout + +block content + h1= title + p Welcome to #{title} diff --git a/day14/initialize/views/layout.jade b/day14/initialize/views/layout.jade new file mode 100644 index 0000000..15af079 --- /dev/null +++ b/day14/initialize/views/layout.jade @@ -0,0 +1,7 @@ +doctype html +html + head + title= title + link(rel='stylesheet', href='/stylesheets/style.css') + body + block content diff --git a/day14/release/.gitkeep b/day14/release/.gitkeep new file mode 100644 index 0000000..e69de29