diff --git a/.editorconfig b/.editorconfig new file mode 100644 index 0000000..3ee22e5 --- /dev/null +++ b/.editorconfig @@ -0,0 +1,13 @@ +# EditorConfig helps developers define and maintain consistent +# coding styles between different editors and IDEs +# http://editorconfig.org + +root = true + +[*] +indent_style = space +indent_size = 2 +end_of_line = lf +charset = utf-8 +trim_trailing_whitespace = true +insert_final_newline = true diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..3c3629e --- /dev/null +++ b/.gitignore @@ -0,0 +1 @@ +node_modules diff --git a/.jshintignore b/.jshintignore new file mode 100644 index 0000000..ee8c771 --- /dev/null +++ b/.jshintignore @@ -0,0 +1,2 @@ +/client/ +/node_modules/ diff --git a/.jshintrc b/.jshintrc new file mode 100644 index 0000000..feb0928 --- /dev/null +++ b/.jshintrc @@ -0,0 +1,21 @@ +{ + "node": true, + "esnext": true, + "bitwise": true, + "camelcase": true, + "eqeqeq": true, + "eqnull": true, + "immed": true, + "indent": 2, + "latedef": "nofunc", + "newcap": true, + "nonew": true, + "noarg": true, + "quotmark": "single", + "regexp": true, + "undef": true, + "unused": false, + "trailing": true, + "sub": true, + "maxlen": 80 +} diff --git a/.npmignore b/.npmignore new file mode 100644 index 0000000..7ec7473 --- /dev/null +++ b/.npmignore @@ -0,0 +1,16 @@ +.idea +.project +*.sublime-* +.DS_Store +*.seed +*.log +*.csv +*.dat +*.out +*.pid +*.swp +*.swo +node_modules +coverage +*.tgz +*.xml diff --git a/client/README.md b/client/README.md new file mode 100644 index 0000000..dd00c9e --- /dev/null +++ b/client/README.md @@ -0,0 +1,3 @@ +## Client + +This is the place for your application front-end files. diff --git a/common/models/coffee-shop.js b/common/models/coffee-shop.js new file mode 100644 index 0000000..5812a03 --- /dev/null +++ b/common/models/coffee-shop.js @@ -0,0 +1,3 @@ +module.exports = function(CoffeeShop) { + +}; diff --git a/common/models/coffee-shop.json b/common/models/coffee-shop.json new file mode 100644 index 0000000..fd7565b --- /dev/null +++ b/common/models/coffee-shop.json @@ -0,0 +1,18 @@ +{ + "name": "CoffeeShop", + "base": "PersistedModel", + "properties": { + "name": { + "type": "string", + "required": true + }, + "city": { + "type": "string", + "required": true + } + }, + "validations": [], + "relations": {}, + "acls": [], + "methods": [] +} diff --git a/package.json b/package.json new file mode 100644 index 0000000..e26c4b8 --- /dev/null +++ b/package.json @@ -0,0 +1,20 @@ +{ + "name": "loopback-getting-started", + "version": "0.0.0", + "main": "server/server.js", + "scripts": { + "pretest": "jshint ." + }, + "dependencies": { + "compression": "^1.0.3", + "errorhandler": "^1.1.1", + "loopback": "^2.5.0", + "loopback-boot": "^2.2.0", + "loopback-component-explorer": "^2.1.0", + "loopback-datasource-juggler": "^2.7.0", + "serve-favicon": "^2.0.1" + }, + "devDependencies": { + "jshint": "^2.5.6" + } +} \ No newline at end of file diff --git a/server/boot/authentication.js b/server/boot/authentication.js new file mode 100644 index 0000000..a87cd08 --- /dev/null +++ b/server/boot/authentication.js @@ -0,0 +1,4 @@ +module.exports = function enableAuthentication(server) { + // enable authentication + server.enableAuth(); +}; diff --git a/server/boot/root.js b/server/boot/root.js new file mode 100644 index 0000000..e106142 --- /dev/null +++ b/server/boot/root.js @@ -0,0 +1,6 @@ +module.exports = function(server) { + // Install a `/` route that returns server status + var router = server.loopback.Router(); + router.get('/', server.loopback.status()); + server.use(router); +}; diff --git a/server/component-config.json b/server/component-config.json new file mode 100644 index 0000000..19d1296 --- /dev/null +++ b/server/component-config.json @@ -0,0 +1,5 @@ +{ + "loopback-component-explorer": { + "mountPath": "/explorer" + } + } \ No newline at end of file diff --git a/server/config.json b/server/config.json new file mode 100644 index 0000000..8404e74 --- /dev/null +++ b/server/config.json @@ -0,0 +1,29 @@ +{ + "restApiRoot": "/api", + "host": "0.0.0.0", + "port": 3000, + "remoting": { + "context": { + "enableHttpContext": false + }, + "rest": { + "normalizeHttpPath": false, + "xml": false + }, + "json": { + "strict": false, + "limit": "100kb" + }, + "urlencoded": { + "extended": true, + "limit": "100kb" + }, + "cors": { + "origin": true, + "credentials": true + }, + "errorHandler": { + "disableStackTrace": false + } + } +} diff --git a/server/datasources.json b/server/datasources.json new file mode 100644 index 0000000..d6caf56 --- /dev/null +++ b/server/datasources.json @@ -0,0 +1,6 @@ +{ + "db": { + "name": "db", + "connector": "memory" + } +} diff --git a/server/middleware.json b/server/middleware.json new file mode 100644 index 0000000..141017a --- /dev/null +++ b/server/middleware.json @@ -0,0 +1,30 @@ +{ + "initial:before": { + "loopback#favicon": {} + }, + "initial": { + "compression": {} + }, + "session": { + }, + "auth": { + }, + "parse": { + }, + "routes": { + "loopback#rest": { + "paths": ["${restApiRoot}"] + } + }, + "files": { + "loopback#static": { + "params": "$!../client" + } + }, + "final": { + "loopback#urlNotFound": {} + }, + "final:after": { + "errorhandler": {} + } +} \ No newline at end of file diff --git a/server/model-config.json b/server/model-config.json new file mode 100644 index 0000000..ab6a9a3 --- /dev/null +++ b/server/model-config.json @@ -0,0 +1,33 @@ +{ + "_meta": { + "sources": [ + "loopback/common/models", + "loopback/server/models", + "../common/models", + "./models" + ] + }, + "User": { + "dataSource": "db" + }, + "AccessToken": { + "dataSource": "db", + "public": false + }, + "ACL": { + "dataSource": "db", + "public": false + }, + "RoleMapping": { + "dataSource": "db", + "public": false + }, + "Role": { + "dataSource": "db", + "public": false + }, + "CoffeeShop": { + "dataSource": "db", + "public": true + } +} diff --git a/server/server.js b/server/server.js new file mode 100644 index 0000000..620ce22 --- /dev/null +++ b/server/server.js @@ -0,0 +1,27 @@ +var loopback = require('loopback'); +var boot = require('loopback-boot'); + +var app = module.exports = loopback(); + +app.start = function() { + // start the web server + return app.listen(function() { + app.emit('started'); + var baseUrl = app.get('url').replace(/\/$/, ''); + console.log('Web server listening at: %s', baseUrl); + if (app.get('loopback-component-explorer')) { + var explorerPath = app.get('loopback-component-explorer').mountPath; + console.log('Browse your REST API at %s%s', baseUrl, explorerPath); + } + }); +}; + +// Bootstrap the application, configure models, datasources and middleware. +// Sub-apps like REST API are mounted via boot scripts. +boot(app, __dirname, function(err) { + if (err) throw err; + + // start the server if `$ node server.js` + if (require.main === module) + app.start(); +}); \ No newline at end of file