Initial commit from Gomix.
This commit is contained in:
		
							parent
							
								
									17976f47c9
								
							
						
					
					
						commit
						b344f20ff0
					
				
					 8 changed files with 300 additions and 2 deletions
				
			
		
							
								
								
									
										114
									
								
								.bashrc
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										114
									
								
								.bashrc
									
										
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,114 @@ | ||||||
|  | # ~/.bashrc: executed by bash(1) for non-login shells. | ||||||
|  | # see /usr/share/doc/bash/examples/startup-files (in the package bash-doc) | ||||||
|  | # for examples | ||||||
|  | 
 | ||||||
|  | # If not running interactively, don't do anything | ||||||
|  | case $- in | ||||||
|  |     *i*) ;; | ||||||
|  |       *) return;; | ||||||
|  | esac | ||||||
|  | 
 | ||||||
|  | # don't put duplicate lines or lines starting with space in the history. | ||||||
|  | # See bash(1) for more options | ||||||
|  | HISTCONTROL=ignoreboth | ||||||
|  | 
 | ||||||
|  | # append to the history file, don't overwrite it | ||||||
|  | shopt -s histappend | ||||||
|  | 
 | ||||||
|  | # for setting history length see HISTSIZE and HISTFILESIZE in bash(1) | ||||||
|  | HISTSIZE=1000 | ||||||
|  | HISTFILESIZE=2000 | ||||||
|  | 
 | ||||||
|  | # check the window size after each command and, if necessary, | ||||||
|  | # update the values of LINES and COLUMNS. | ||||||
|  | shopt -s checkwinsize | ||||||
|  | 
 | ||||||
|  | # If set, the pattern "**" used in a pathname expansion context will | ||||||
|  | # match all files and zero or more directories and subdirectories. | ||||||
|  | #shopt -s globstar | ||||||
|  | 
 | ||||||
|  | # make less more friendly for non-text input files, see lesspipe(1) | ||||||
|  | [ -x /usr/bin/lesspipe ] && eval "$(SHELL=/bin/sh lesspipe)" | ||||||
|  | 
 | ||||||
|  | # set variable identifying the chroot you work in (used in the prompt below) | ||||||
|  | if [ -z "${debian_chroot:-}" ] && [ -r /etc/debian_chroot ]; then | ||||||
|  |     debian_chroot=$(cat /etc/debian_chroot) | ||||||
|  | fi | ||||||
|  | 
 | ||||||
|  | # set a fancy prompt (non-color, unless we know we "want" color) | ||||||
|  | case "$TERM" in | ||||||
|  |     xterm-color|*-256color) color_prompt=yes;; | ||||||
|  | esac | ||||||
|  | 
 | ||||||
|  | # uncomment for a colored prompt, if the terminal has the capability; turned | ||||||
|  | # off by default to not distract the user: the focus in a terminal window | ||||||
|  | # should be on the output of commands, not on the prompt | ||||||
|  | #force_color_prompt=yes | ||||||
|  | 
 | ||||||
|  | if [ -n "$force_color_prompt" ]; then | ||||||
|  |     if [ -x /usr/bin/tput ] && tput setaf 1 >&/dev/null; then | ||||||
|  |         # We have color support; assume it's compliant with Ecma-48 | ||||||
|  |         # (ISO/IEC-6429). (Lack of such support is extremely rare, and such | ||||||
|  |         # a case would tend to support setf rather than setaf.) | ||||||
|  |         color_prompt=yes | ||||||
|  |     else | ||||||
|  |         color_prompt= | ||||||
|  |     fi | ||||||
|  | fi | ||||||
|  | if [ "$color_prompt" = yes ]; then | ||||||
|  |     PS1='${debian_chroot:+($debian_chroot)}\[\033[01;32m\]\u@${PROJECT_NAME}\[\033[00m\]:\[\033[01;34m\]\w\[\033[00m\]\$ ' | ||||||
|  | else | ||||||
|  |     PS1='${debian_chroot:+($debian_chroot)}\u@${PROJECT_NAME}:\w\$ ' | ||||||
|  | fi | ||||||
|  | unset color_prompt force_color_prompt | ||||||
|  | # If this is an xterm set the title to user@host:dir | ||||||
|  | case "$TERM" in | ||||||
|  | xterm*|rxvt*) | ||||||
|  |     PS1="\[\e]0;${debian_chroot:+($debian_chroot)}\u@\h: \w\a\]$PS1" | ||||||
|  |     ;; | ||||||
|  | *) | ||||||
|  |     ;; | ||||||
|  | esac | ||||||
|  | # enable color support of ls and also add handy aliases | ||||||
|  | if [ -x /usr/bin/dircolors ]; then | ||||||
|  |     test -r ~/.dircolors && eval "$(dircolors -b ~/.dircolors)" || eval "$(dircolors -b)" | ||||||
|  |     alias ls='ls --color=auto' | ||||||
|  |     #alias dir='dir --color=auto' | ||||||
|  |     #alias vdir='vdir --color=auto' | ||||||
|  |     alias grep='grep --color=auto' | ||||||
|  |     alias fgrep='fgrep --color=auto' | ||||||
|  |     alias egrep='egrep --color=auto' | ||||||
|  | fi | ||||||
|  | # colored GCC warnings and errors | ||||||
|  | #export GCC_COLORS='error=01;31:warning=01;35:note=01;36:caret=01;32:locus=01:quote=01' | ||||||
|  | # some more ls aliases | ||||||
|  | alias ll='ls -alF' | ||||||
|  | alias la='ls -A' | ||||||
|  | alias l='ls -CF' | ||||||
|  | # Add an "alert" alias for long running commands.  Use like so: | ||||||
|  | #   sleep 10; alert | ||||||
|  | alias alert='notify-send --urgency=low -i "$([ $? = 0 ] && echo terminal || echo error)" "$(history|tail -n1|sed -e '\''s/^\s*[0-9]\+\s*//;s | ||||||
|  | /[;&|]\s*alert$//'\'')"' | ||||||
|  | # Alias definitions. | ||||||
|  | # You may want to put all your additions into a separate file like | ||||||
|  | # ~/.bash_aliases, instead of adding them here directly. | ||||||
|  | # See /usr/share/doc/bash-doc/examples in the bash-doc package. | ||||||
|  | if [ -f ~/.bash_aliases ]; then | ||||||
|  |     . ~/.bash_aliases | ||||||
|  | fi | ||||||
|  | # enable programmable completion features (you don't need to enable | ||||||
|  | # this, if it's already enabled in /etc/bash.bashrc and /etc/profile | ||||||
|  | # sources /etc/bash.bashrc). | ||||||
|  | if ! shopt -oq posix; then | ||||||
|  |   if [ -f /usr/share/bash-completion/bash_completion ]; then | ||||||
|  |     . /usr/share/bash-completion/bash_completion | ||||||
|  |   elif [ -f /etc/bash_completion ]; then | ||||||
|  |     . /etc/bash_completion | ||||||
|  |   fi | ||||||
|  | fi | ||||||
|  | 
 | ||||||
|  | export NVM_DIR="/home/nvm/.nvm" | ||||||
|  | [ -s "$NVM_DIR/nvm.sh" ] && . "$NVM_DIR/nvm.sh"  # This loads nvm | ||||||
|  | 
 | ||||||
|  | # set PATH so it includes user's private bin directories | ||||||
|  | export PATH="$HOME/bin:$HOME/.local/bin:$HOME/node_modules/.bin:$PATH" | ||||||
							
								
								
									
										2
									
								
								.gitconfig
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										2
									
								
								.gitconfig
									
										
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,2 @@ | ||||||
|  | [core] | ||||||
|  | 	excludesfile = /etc/.gitignore-global | ||||||
							
								
								
									
										3
									
								
								.hyperdev-assets
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										3
									
								
								.hyperdev-assets
									
										
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,3 @@ | ||||||
|  | {"name":"drag-in-files.svg","date":"2016-10-22T16:17:49.954Z","url":"https://cdn.hyperdev.com/drag-in-files.svg","type":"image/svg","size":7646,"imageWidth":276,"imageHeight":276,"thumbnail":"https://cdn.hyperdev.com/drag-in-files.svg","thumbnailWidth":276,"thumbnailHeight":276,"dominantColor":"rgb(102, 153, 205)","uuid":"adSBq97hhhpFNUna"} | ||||||
|  | {"name":"click-me.svg","date":"2016-10-23T16:17:49.954Z","url":"https://cdn.hyperdev.com/click-me.svg","type":"image/svg","size":7116,"imageWidth":276,"imageHeight":276,"thumbnail":"https://cdn.hyperdev.com/click-me.svg","thumbnailWidth":276,"thumbnailHeight":276,"dominantColor":"rgb(243, 185, 186)","uuid":"adSBq97hhhpFNUnb"} | ||||||
|  | {"name":"paste-me.svg","date":"2016-10-24T16:17:49.954Z","url":"https://cdn.hyperdev.com/paste-me.svg","type":"image/svg","size":7242,"imageWidth":276,"imageHeight":276,"thumbnail":"https://cdn.hyperdev.com/paste-me.svg","thumbnailWidth":276,"thumbnailHeight":276,"dominantColor":"rgb(42, 179, 185)","uuid":"adSBq97hhhpFNUnc"} | ||||||
|  | @ -1,2 +1,5 @@ | ||||||
| # boilerplate-project-exercisetracker | # Exercise Tracker REST API | ||||||
| A boilerplate for a freeCodeCamp project. | 
 | ||||||
|  | #### A microservice project, part of Free Code Camp's curriculum | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  |  | ||||||
							
								
								
									
										29
									
								
								package.json
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										29
									
								
								package.json
									
										
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,29 @@ | ||||||
|  | { | ||||||
|  | 	"name": "fcc-exercise-tracker", | ||||||
|  | 	"version": "0.1.0", | ||||||
|  | 	"description": "A REST API project, part of Free Code Camp's curriculum", | ||||||
|  | 	"main": "server.js", | ||||||
|  | 	"scripts": { | ||||||
|  | 		"start": "node server.js" | ||||||
|  | 	}, | ||||||
|  | 	"dependencies": { | ||||||
|  | 		"express": "^4.14.0", | ||||||
|  | 		"mongoose": "^4.7.2", | ||||||
|  | 		"mongodb": "^2.2.14", | ||||||
|  | 		"body-parser": "^1.15.2", | ||||||
|  | 		"cors": "^2.8.1", | ||||||
|  | 		"shortid": "^2.2.6" | ||||||
|  | 	}, | ||||||
|  | 	"engines": { | ||||||
|  | 		"node": "6.9.1" | ||||||
|  | 	}, | ||||||
|  | 	"repository": { | ||||||
|  | 		"url": "https://gomix.com/#!/project/welcome-project" | ||||||
|  | 	}, | ||||||
|  | 	"license": "MIT", | ||||||
|  | 	"keywords": [ | ||||||
|  | 		"node", | ||||||
|  | 		"gomix", | ||||||
|  | 		"express" | ||||||
|  | 	] | ||||||
|  | } | ||||||
							
								
								
									
										64
									
								
								public/style.css
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										64
									
								
								public/style.css
									
										
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,64 @@ | ||||||
|  | 
 | ||||||
|  | * { | ||||||
|  |   box-sizing: border-box; | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | body { | ||||||
|  |   font-family:sans-serif; | ||||||
|  |   margin: 25px; | ||||||
|  |   color: #222; | ||||||
|  |   background-color: #f5f5f5; | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | h1 { | ||||||
|  |   font-weight: bold; | ||||||
|  |    | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | .bold { | ||||||
|  |   font-weight: bold; | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | p { | ||||||
|  |   max-width: 900px; | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | form { | ||||||
|  |   margin-bottom: 25px; | ||||||
|  |   padding: 15px; | ||||||
|  |   background-color: #87D37C; | ||||||
|  |   display: inline-block; | ||||||
|  |   width: 100%; | ||||||
|  |   max-width: 340px; | ||||||
|  |   border-radius: 5px; | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | input { | ||||||
|  |   display: block; | ||||||
|  |   margin-bottom: 10px; | ||||||
|  |   padding: 5px; | ||||||
|  |   width: 100%; | ||||||
|  |   border: 1px solid lightgrey; | ||||||
|  |   border-radius: 3px; | ||||||
|  |   font-size: 16px; | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | input[type=submit] { | ||||||
|  |   font-size: 16px; | ||||||
|  |   border-radius: 3px; | ||||||
|  |   background-color: #E4F1FE; | ||||||
|  |   border: 1px solid grey; | ||||||
|  |   box-shadow: 2px 2px #999; | ||||||
|  |   cursor: pointer; | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | input[type=submit]:hover { | ||||||
|  |   background-color: #FFFEC4; | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | code { | ||||||
|  |   font-family: monospace; | ||||||
|  |   font-size: 1.2em; | ||||||
|  |   background-color: #FFFEC4; | ||||||
|  |   padding: 2px; | ||||||
|  | } | ||||||
							
								
								
									
										48
									
								
								server.js
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										48
									
								
								server.js
									
										
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,48 @@ | ||||||
|  | const express = require('express') | ||||||
|  | const app = express() | ||||||
|  | const bodyParser = require('body-parser') | ||||||
|  | 
 | ||||||
|  | const cors = require('cors') | ||||||
|  | 
 | ||||||
|  | const mongoose = require('mongoose') | ||||||
|  | mongoose.connect(process.env.MLAB_URI || 'mongodb://localhost/exercise-track' ) | ||||||
|  | 
 | ||||||
|  | app.use(cors()) | ||||||
|  | 
 | ||||||
|  | app.use(bodyParser.urlencoded({extended: false})) | ||||||
|  | app.use(bodyParser.json()) | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | app.use(express.static('public')) | ||||||
|  | app.get('/', (req, res) => { | ||||||
|  |   res.sendFile(__dirname + '/views/index.html') | ||||||
|  | }); | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | // Not found middleware
 | ||||||
|  | app.use((req, res, next) => { | ||||||
|  |   return next({status: 404, message: 'not found'}) | ||||||
|  | }) | ||||||
|  | 
 | ||||||
|  | // Error Handling middleware
 | ||||||
|  | app.use((err, req, res, next) => { | ||||||
|  |   let errCode, errMessage | ||||||
|  | 
 | ||||||
|  |   if (err.errors) { | ||||||
|  |     // mongoose validation error
 | ||||||
|  |     errCode = 400 // bad request
 | ||||||
|  |     const keys = Object.keys(err.errors) | ||||||
|  |     // report the first validation error
 | ||||||
|  |     errMessage = err.errors[keys[0]].message | ||||||
|  |   } else { | ||||||
|  |     // generic or custom error
 | ||||||
|  |     errCode = err.status || 500 | ||||||
|  |     errMessage = err.message || 'Internal Server Error' | ||||||
|  |   } | ||||||
|  |   res.status(errCode).type('txt') | ||||||
|  |     .send(errMessage) | ||||||
|  | }) | ||||||
|  | 
 | ||||||
|  | const listener = app.listen(process.env.PORT || 3000, () => { | ||||||
|  |   console.log('Your app is listening on port ' + listener.address().port) | ||||||
|  | }) | ||||||
							
								
								
									
										35
									
								
								views/index.html
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										35
									
								
								views/index.html
									
										
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,35 @@ | ||||||
|  | <!DOCTYPE html> | ||||||
|  | <html> | ||||||
|  | 
 | ||||||
|  |    <head> | ||||||
|  |       <title>Exercise Tracker | Free Code Camp</title> | ||||||
|  |       <link rel="shortcut icon" href="https://cdn.hyperdev.com/us-east-1%3A52a203ff-088b-420f-81be-45bf559d01b1%2Ffavicon.ico" type="image/x-icon"/> | ||||||
|  |       <link href="https://fonts.googleapis.com/css?family=Roboto" rel="stylesheet" type="text/css"> | ||||||
|  |       <link href="style.css" rel="stylesheet" type="text/css"> | ||||||
|  |    </head> | ||||||
|  | 
 | ||||||
|  |    <body> | ||||||
|  |       <div class="container"> | ||||||
|  |          <h1>Exercise tracker</h1> | ||||||
|  |           <form action="/api/exercise/new-user" method="post"> | ||||||
|  |             <h3>Create a New User</h3> | ||||||
|  |             <p><code>POST /api/exercise/new-user</code></p> | ||||||
|  |             <input id="uname" type="text" name="username" placeholder="username"> | ||||||
|  |             <input type="submit" value="Submit"> | ||||||
|  |           </form> | ||||||
|  |           <form action="/api/exercise/add" method="post"> | ||||||
|  |             <h3>Add exercises</h3> | ||||||
|  |             <p><code>POST /api/exercise/add</code></p> | ||||||
|  |             <input id="uid" type="text" name="userId" placeholder="userId*"> | ||||||
|  |             <input id="desc" type="text" name="description" placeholder="description*"> | ||||||
|  |             <input id="dur" type="text" name="duration" placeholder="duration* (mins.)"> | ||||||
|  |             <input id="dat" type="text" name="date" placeholder="date (yyyy-mm-dd)"> | ||||||
|  |             <input type="submit" value="Submit"> | ||||||
|  |           </form> | ||||||
|  |           <p><strong>GET users's exercise log: </strong><code>GET /api/exercise/log?{userId}[&from][&to][&limit]</code></p> | ||||||
|  |           <p><strong>{ }</strong> = required, <strong>[ ]</strong> = optional</p> | ||||||
|  |           <p><strong>from, to</strong> = dates (yyyy-mm-dd); <strong>limit</strong> = number</p> | ||||||
|  |       </div> | ||||||
|  |    </body> | ||||||
|  | 
 | ||||||
|  | </html> | ||||||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue