Commit 4e12852f authored by Matti Leppäkorpi's avatar Matti Leppäkorpi
Browse files

Project to gitlab

parents
# Logs
logs
*.log
npm-debug.log*
yarn-debug.log*
yarn-error.log*
lerna-debug.log*
# Diagnostic reports (https://nodejs.org/api/report.html)
report.[0-9]*.[0-9]*.[0-9]*.[0-9]*.json
# Runtime data
pids
*.pid
*.seed
*.pid.lock
# Directory for instrumented libs generated by jscoverage/JSCover
lib-cov
# Coverage directory used by tools like istanbul
coverage
*.lcov
# nyc test coverage
.nyc_output
# Grunt intermediate storage (https://gruntjs.com/creating-plugins#storing-task-files)
.grunt
# Bower dependency directory (https://bower.io/)
bower_components
# node-waf configuration
.lock-wscript
# Compiled binary addons (https://nodejs.org/api/addons.html)
build/Release
# Dependency directories
node_modules/
jspm_packages/
# Snowpack dependency directory (https://snowpack.dev/)
web_modules/
# TypeScript cache
*.tsbuildinfo
# Optional npm cache directory
.npm
# Optional eslint cache
.eslintcache
# Microbundle cache
.rpt2_cache/
.rts2_cache_cjs/
.rts2_cache_es/
.rts2_cache_umd/
# Optional REPL history
.node_repl_history
# Output of 'npm pack'
*.tgz
# Yarn Integrity file
.yarn-integrity
# dotenv environment variables file
.env
.env.test
# parcel-bundler cache (https://parceljs.org/)
.cache
.parcel-cache
# Next.js build output
.next
out
# Nuxt.js build / generate output
.nuxt
dist
# Gatsby files
.cache/
# Comment in the public line in if your project uses Gatsby and not Next.js
# https://nextjs.org/blog/next-9-1#public-directory-support
# public
# vuepress build output
.vuepress/dist
# Serverless directories
.serverless/
# FuseBox cache
.fusebox/
# DynamoDB Local files
.dynamodb/
# TernJS port file
.tern-port
# Stores VSCode versions used for testing VSCode extensions
.vscode-test
# yarn v2
.yarn/cache
.yarn/unplugged
.yarn/build-state.yml
.yarn/install-state.gz
.pnp.*
\ No newline at end of file
const express = require('express');
const app = express();
const bodyParser = require('body-parser');
const routes = require('./routes/routes.js');
const mongoose = require('mongoose');
mongoose.set('useFindAndModify', false);
mongoose.connect('mongodb://localhost:27017/Varastosaldo', { useNewUrlParser: true });
const path = require('path');
app.use(bodyParser.json());
app.use(bodyParser.urlencoded({ extended: false }));
app.set('view engine', 'pug');
app.use('/', routes);
app.listen(3000);
/*16.6.2019 Matti Leppäkorpi 20h. Tein palvelimen jonne voi lisätä kolmessa eri kaupungissa toimivan
Oy Yhtymä Ab:n varastosaldolle uusia asioita ja hakea varastosaldot, sekä poistaa asioita varastosalolta.
Tämän lisäksi sivustolta näkee kaupunkikohtaisen viimeisimmän lämpötilan.
Tein aluksi etusivun html-muotoon, mutta muutin sen pugiksi netistä löytyneen kääntäjän avulla. Css-
tiedoston kanssa meinasi olla ongelmia kunnes sain siihen apua ja lisäsin routes.js tiedostoon
router.use('/static', express.static(path.join(__dirname, '..', 'static')));
Taidot loppuivat siihen kun yritin keksiä miten location-tiedon voisi antaa valmiista vaihtoehdoista
käyttäjälle <select>-tagilla. Tämän avulla olisin ehkä voinut keksiä konstin myös varastojen sorttaamisen
kaupungeittain. Nyt tuo kaupunkikohtainen varastosaldo näyttää koko varaston. */
\ No newline at end of file
const Item = require('../models/item.js');
const addNewItem = (req, res) => {
const newitem = new Item(req.body);
newitem.save().then(result => {
console.log('Varastoon lisätty: ' + result);
res.redirect('/');
}).catch(err => console.log(err));
}
const showItems = (req, res) => {
Item.find((err, items) => {
if (err) {
console.log(err);
} else {
res.render('storage', { items: items });
}
}).sort({ location: 1, name: 1 })
};
const showItemsJKL = (req, res) => {
Item.find((err, items) => {
if (err) {
console.log(err);
} else {
res.render('storageJKL', { items: items });
}
}).sort({ location: 1})
};
const showItemsTRE = (req, res) => {
Item.find((err, items) => {
if (err) {
console.log(err);
} else {
res.render('storageTRE', { items: items });
}
}).sort({ location: -1})
};
const showItemsOULU = (req, res) => {
Item.find((err, items) => {
if (err) {
console.log(err);
} else {
res.render('storageOulu', { items: items });
}
}).sort({ location: 1})
};
const deleteItems = (req, res) => {
console.log(req.params.ItemId);
Item.findByIdAndRemove(req.params.itemId, (err, result) => {
if (err) {
console.log(err);
} else {
console.log('Poistettiin tuote: ' + result._id);
res.redirect('/storage');
}
})
}
module.exports = { addNewItem, showItems, deleteItems, showItemsJKL, showItemsOULU, showItemsTRE };
const request = require('request');
const requestJKL = (req, res) => {
request('https://ilmatieteenlaitos.fi/observation-data?station=101339', (err, resp, body) => {
if (err) {
console.log(err);
}
else {
let weatherjson = JSON.parse(body);
let temparray = weatherjson.t2m;
let lastElement = temparray[temparray.length - 1];
let aika = lastElement[0];
let date = new Date(aika);
let month = date.getUTCMonth() + 1;
let year = date.getFullYear();
let hours = date.getUTCHours();
let minutes = date.getMinutes();
let text = "Lämpötila Jyväskylässä oli: " + lastElement[1] + "c\nAjankohtana: "
+ date.getUTCDate() + "." + month + " " + year + " " + hours + ":" + minutes;
res.write(text);
res.end();
}
});
}
const requestTRE = (req, res) => {
request('https://ilmatieteenlaitos.fi/observation-data?station=101124', (err, resp, body) => {
if (err) {
console.log(err);
}
else {
let weatherjson = JSON.parse(body);
let temparray = weatherjson.t2m;
let lastElement = temparray[temparray.length - 1];
let aika = lastElement[0];
let date = new Date(aika);
let month = date.getUTCMonth() + 1;
let year = date.getFullYear();
let hours = date.getUTCHours();
let minutes = date.getMinutes();
let text = "Lämpötila Tampereella oli: " + lastElement[1] + "c\nAjankohtana: "
+ date.getUTCDate() + "." + month + " " + year + " " + hours + ":" + minutes;
res.write(text);
res.end();
}
});
}
const requestOulu = (req, res) => {
request('https://ilmatieteenlaitos.fi/observation-data?station=101786', (err, resp, body) => {
if (err) {
console.log(err);
}
else {
let weatherjson = JSON.parse(body);
let temparray = weatherjson.t2m;
let lastElement = temparray[temparray.length - 1];
let aika = lastElement[0];
let date = new Date(aika);
let month = date.getUTCMonth() + 1;
let year = date.getFullYear();
let hours = date.getUTCHours();
let minutes = date.getMinutes();
let text = "Lämpötila Oulussa oli: " + lastElement[1] + "c\nAjankohtana: "
+ date.getUTCDate() + "." + month + " " + year + " " + hours + ":" + minutes;
res.write(text);
res.end();
}
});
}
module.exports = { requestJKL, requestTRE, requestOulu };
const mongoose = require('mongoose');
const Schema = mongoose.Schema;
const itemSchema = new Schema({
name: String,
amount: String,
description: String,
location: String
});
const item = mongoose.model('items', itemSchema);
module.exports = item;
\ No newline at end of file
This diff is collapsed.
{
"name": "harjoitustyoleppakorpimatti",
"version": "1.0.0",
"main": "app.js",
"scripts": {
"test": "echo \"Error: no test specified\" && exit 1"
},
"author": "",
"license": "ISC",
"dependencies": {
"body-parser": "^1.19.0",
"express": "^4.17.1",
"mongoose": "^5.5.15",
"pug": "^2.0.3",
"request": "^2.88.0"
},
"description": ""
}
const express = require('express');
const router = express.Router();
const Item = require('../controllers/controller.js')
const path = require('path');
const request = require('../controllers/saa.js');
router.use('/static', express.static(path.join(__dirname, '..', 'static')));
router.get('/', (req, res) => {
res.render('index');
})
router.get('/addstorageitem', (req, res) => {
res.render('addstorageitem');
});
router.post('/addstorageitem', (req, res) => {
Item.addNewItem(req, res);
});
router.get('/storage', (req, res) => {
Item.showItems(req, res);
});
router.get('/remove/:itemId', (req, res) => {
Item.deleteItems(req, res);
});
router.get('/jyvaskyla', (req, res) =>{
Item.showItemsJKL(req, res);
})
router.get('/tampere', (req, res) =>{
Item.showItemsTRE(req, res);
});
router.get('/oulu', (req, res) =>{
Item.showItemsOULU(req, res);
});
router.get('/jyvaskyla/saa', (req, res) => {
request.requestJKL(req, res);
});
router.get('/oulu/saa', (req, res) => {
request.requestOulu(req, res);
});
router.get('/tampere/saa', (req, res) => {
request.requestTRE(req, res);
});
module.exports = router;
\ No newline at end of file
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<meta name="author" content="Matti Leppäkorpi">
<link rel="stylesheet" type="text/css" href="../static/styles.css">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
</head>
<body>
<div id="pageWrapper">
<div id = "div1"><h1>Oy Yhtymä Ab
</h1>
<h3>Näiltä sivuilta voit hallinnoida Oy Yhtymä Ab:n varastoja.
</h3>
<div id= "navig.">
<ul class="navigointi">
<li class="linkki"><a class="palkki" href=http://localhost:3000/storage>Tarkastele koko varastosaldoa</a></li>
<li class="linkki"><a class="palkki" href=http://localhost:3000/jyvaskyla>Jyväskylä</a></li>
<li class="linkki"><a class="palkki" href=http://localhost:3000/oulu>Oulu</a></li>
<li class="linkki"><a class="palkki" href=http://localhost:3000/tampere>Tampere</a></li>
<li class="linkki"><a class="palkki" href=http://localhost:3000/addstorageitem>Lisää tuote varastoon</a></li>
</ul>
</div>
</div>
</div>
</body>
</html>
\ No newline at end of file
html, body
{
padding: 0px;
margin: 0px;
}
#pageWrapper
{
Width:100%;
min-height: 800px;
}
#div1 {
background-color:lightgray;
width:100%;
min-height: 800px;
text-align: center;
}
.navigointi
{
list-style-type: none;
margin: 0;
padding: 0;
overflow: hidden;
background-color: none;
height:80px;
}
.linkki
{
float: left;
font-size: 1.6em;
font-family: sans-serif;
}
.palkki
{
color: black;
display: block;
padding: 30px 40px;
text-decoration: none;
text-align: center;
}
.palkki:hover{color:gray;}
\ No newline at end of file
doctype html
head
link(rel='stylesheet', href='https://stackpath.bootstrapcdn.com/bootstrap/4.3.1/css/bootstrap.min.css', integrity='sha384-ggOyR0iXCbMQv3Xipma34MD+dH/1fQ784/j6cY/iJTQUOhcWr7x9JvoRxT2MZw1T', crossorigin='anonymous')
body.container
h3='Lisää uusi tuote varastoon:'
form#form(action='/addstorageitem', method='POST')
div.form-group
label='Tuote ja valmistaja jos tiedossa'
input.form-control(type='text', name='name')
label='Määrä'
input.form-control(type='text', name='amount')
label='Kuvaus tuotteesta'
input.form-control(type='text', name='description')
label='Sijainti'
input.form-control(type='text', name='location')
button.btn-btn-primary(type='submit') Tallenna
br
a(href='/') Takaisin aloitussivulle
\ No newline at end of file
doctype html
head
link(rel='stylesheet', href='https://stackpath.bootstrapcdn.com/bootstrap/4.3.1/css/bootstrap.min.css', integrity='sha384-ggOyR0iXCbMQv3Xipma34MD+dH/1fQ784/j6cY/iJTQUOhcWr7x9JvoRxT2MZw1T', crossorigin='anonymous')
body.container
h3='Lisää uusi tuote varastoon:'
form#form(action='/addstorageitem', method='POST')
div.form-group
label='Tuote ja valmistaja jos tiedossa'
input.form-control(type='text', name='name')
label='Määrä'
input.form-control(type='text', name='amount')
label='Kuvaus tuotteesta'
input.form-control(type='text', name='description')
label='Sijainti'
br
select.form-control
option(value='Jyväskylä')
option(value='Tampere')
option(value='Oulu')
button.btn-btn-primary(type='submit') Tallenna
br
a(href='/') Takaisin aloitussivulle
\ No newline at end of file
doctype html
|
html
head
meta(charset='utf-8')
meta(name='author' content='Matti Leppäkorpi')
link(rel='stylesheet' type='text/css' href='../static/styles.css')
meta(name='viewport' content='width=device-width, initial-scale=1.0')
#pageWrapper
#div1
h1
| Oy Yhtymä Ab
h3
| Näiltä sivuilta voit hallinnoida Oy Yhtymä Ab:n varastoja ja tarkastaa ulkolämpötilan.
div(id='navig.')
ul.navigointi
li.linkki
a.palkki(href='http://localhost:3000/storage') Tarkastele koko varastosaldoa
li.linkki
a.palkki(href='http://localhost:3000/jyvaskyla') Jyväskylä
li.linkki
a.palkki(href='http://localhost:3000/oulu') Oulu
li.linkki
a.palkki(href='http://localhost:3000/tampere') Tampere
li.linkki
a.palkki(href='http://localhost:3000/addstorageitem') Lisää tuote varastoon
doctype html
html
head
link(rel='stylesheet', href='https://stackpath.bootstrapcdn.com/bootstrap/4.3.1/css/bootstrap.min.css', integrity='sha384-ggOyR0iXCbMQv3Xipma34MD+dH/1fQ784/j6cY/iJTQUOhcWr7x9JvoRxT2MZw1T', crossorigin='anonymous')
body.container
h1='Varastosaldo:'
ul
each item in items
li
p=item.name +', '+ item.amount +', '+ item.description + ', '+ item.location
a(href='/remove/'+ item._id) Poista tuote varastosaldolta
br
br
a(href='/addstorageitem') Lisää uusi tuote varastoon
br
a(href='/') Takaisin aloitussivulle
\ No newline at end of file
doctype html
html
head
link(rel='stylesheet', href='https://stackpath.bootstrapcdn.com/bootstrap/4.3.1/css/bootstrap.min.css', integrity='sha384-ggOyR0iXCbMQv3Xipma34MD+dH/1fQ784/j6cY/iJTQUOhcWr7x9JvoRxT2MZw1T', crossorigin='anonymous')
body.container
h1='Varastosaldo Jyväskylä:'
ul
each item in items
li
p=item.name +', '+ item.amount +', '+ item.description + ', '+ item.location
a(href='/remove/'+ item._id) Poista tuote varastosaldolta
br
br
a(href='/addstorageitem') Lisää uusi tuote varastoon
br
a(href='/') Takaisin aloitussivulle
br
a(href='/jyvaskyla/saa') Katso lämpötila
\ No newline at end of file