MQL5-Google-Onedrive/boat-house/management/web/server.js
copilot-swe-agent[bot] aaf34679c7 Add boat-house microservices system to project
Co-authored-by: Mouy-leng <199350297+Mouy-leng@users.noreply.github.com>
2026-02-10 06:28:01 +00:00

345 lines
9.8 KiB
JavaScript

var express = require('express'),
async = require('async'),
pg = require('pg'),
cookieParser = require('cookie-parser'),
requestify = require('requestify');
(bodyParser = require('body-parser')),
(methodOverride = require('method-override')),
(app = express()),
(server = require('http').Server(app)),
(io = require('socket.io')(server)),
(serveStatic = require('serve-static')),
(path = require('path'))
var multiparty = require('multiparty')
const axios = require('axios')
var fs = require('fs')
io.set('transports', ['polling'])
var port = process.env.PORT || 4000
io.sockets.on('connection', function (socket) {
socket.emit('message', { text: 'Welcome!' })
socket.on('subscribe', function (data) {
socket.join(data.channel)
})
})
async.retry(
{ times: 1000, interval: 10000 },
function (callback) {
pg.connect('postgres://postgres@statistics-service-db/postgres', function (
err,
client,
done
) {
if (err) {
console.error('Waiting for db')
}
callback(err, client)
})
},
function (err, client) {
if (err) {
return console.err('Giving up')
}
console.log('Connected to db')
getVotes(client)
}
)
function getVotes (client) {
client.query(
'SELECT vote, COUNT(id) AS count FROM votes GROUP BY vote',
[],
function (err, result) {
if (err) {
console.error('Error performing query: ' + err)
} else {
var votes = collectVotesFromResult(result)
io.sockets.emit('scores', JSON.stringify(votes))
}
setTimeout(function () {
getVotes(client)
}, 10000)
}
)
}
function collectVotesFromResult (result) {
var votes = { a: 0, b: 0 }
result.rows.forEach(function (row) {
votes[row.vote] = parseInt(row.count)
})
return votes
}
app.use(serveStatic(__dirname + '/dist'))
app.use(cookieParser())
app.use(bodyParser())
app.use(methodOverride('X-HTTP-Method-Override'))
app.use(function (req, res, next) {
res.header('Access-Control-Allow-Origin', '*')
res.header(
'Access-Control-Allow-Headers',
'Origin, X-Requested-With, Content-Type, Accept'
)
res.header('Access-Control-Allow-Methods', 'PUT, GET, POST, DELETE, OPTIONS')
next()
})
server.listen(port, function () {
var port = server.address().port
console.log('App running on port ' + port)
})
app.get('/api/foodcategories', function (req, res) {
requestify
.get('http://product-service-api:8080/api/v1.0/BoatHouse/FoodCategories')
.then(function (response) {
console.log(response.body)
return res.send(response.body)
})
})
app.post('/api/foodcategory', function (req, res) {
requestify
.post(
'http://product-service-api:8080/api/v1.0/BoatHouse/FoodCategory',
req.body
)
.then(function (response) {
console.log(response.body)
return res.send(response.body)
})
})
app.put('/api/foodcategory', function (req, res) {
requestify
.put(
'http://product-service-api:8080/api/v1.0/BoatHouse/FoodCategory',
req.body
)
.then(function (response) {
console.log(response.body)
return res.send(response.body)
})
})
app.delete('/api/foodcategory', function (req, res) {
requestify
.delete(
'http://product-service-api:8080/api/v1.0/BoatHouse/FoodCategory?id=' +
req.query.id
)
.then(function (response) {
console.log(response.body)
return res.send(response.body)
})
})
app.get('/api/foods', function (req, res) {
requestify
.get('http://product-service-api:8080/api/v1.0/BoatHouse/Foods')
.then(function (response) {
console.log(response.body)
return res.send(response.body)
})
})
app.get('/api/food', function (req, res) {
requestify
.get(
'http://product-service-api:8080/api/v1.0/BoatHouse/Food?id=' +
req.query.id
)
.then(function (response) {
console.log(response.body)
return res.send(response.body)
})
})
app.post('/api/food', function (req, res) {
var form = new multiparty.Form()
form.parse(req, function (err, fields, files) {
// var postForm = new FormData();
let url = `http://product-service-api:8080/api/v1.0/BoatHouse/Food?菜品分类ID=${fields['菜品分类ID'][0]}&菜品名称=${fields['菜品名称'][0]}&菜品价格=${fields['菜品价格'][0]}&菜品描述=${fields['菜品描述'][0]}`
if (files['菜品图片'] !== undefined) {
var tempPath = files['菜品图片'][0].path
var tempFileNameList = tempPath.split('/')
var tempFileName = tempFileNameList[tempFileNameList.length - 1]
let nodeFile = fs.createReadStream(tempPath)
let outFilePath = './dist/foods/' + tempFileName
let dbPath = './foods/' + tempFileName
let outFile = fs.createWriteStream(outFilePath)
nodeFile.pipe(outFile)
url = `http://product-service-api:8080/api/v1.0/BoatHouse/Food?菜品分类ID=${fields['菜品分类ID'][0]}&菜品名称=${fields['菜品名称'][0]}&菜品价格=${fields['菜品价格'][0]}&菜品描述=${fields['菜品描述'][0]}&菜品图片=${dbPath}`
}
axios
.post(encodeURI(url))
.then(function (response) {
console.log(response.body)
return res.send(response.body)
})
.catch(function (res) {
console.log(res)
})
})
})
app.put('/api/food', function (req, res) {
var form = new multiparty.Form()
form.parse(req, function (err, fields, files) {
let url = `http://product-service-api:8080/api/v1.0/BoatHouse/Food?菜品ID=${fields['菜品ID'][0]}&菜品分类ID=${fields['菜品分类ID'][0]}&菜品名称=${fields['菜品名称'][0]}&菜品价格=${fields['菜品价格'][0]}&菜品描述=${fields['菜品描述'][0]}`
if (files['菜品图片'] !== undefined) {
var tempPath = files['菜品图片'][0].path
var tempFileNameList = tempPath.split('/')
var tempFileName = tempFileNameList[tempFileNameList.length - 1]
let nodeFile = fs.createReadStream(tempPath)
let outFilePath = './dist/foods/' + tempFileName
let dbPath = './foods/' + tempFileName
let outFile = fs.createWriteStream(outFilePath)
nodeFile.pipe(outFile)
url = `http://product-service-api:8080/api/v1.0/BoatHouse/Food?菜品ID=${fields['菜品ID'][0]}&菜品分类ID=${fields['菜品分类ID'][0]}&菜品名称=${fields['菜品名称'][0]}&菜品价格=${fields['菜品价格'][0]}&菜品描述=${fields['菜品描述'][0]}&&菜品图片=${dbPath}`
}
axios
.put(encodeURI(url))
.then(function (response) {
console.log(response.body)
return res.send(response.body)
})
.catch(function (res) {
console.log(res)
})
})
})
app.delete('/api/food', function (req, res) {
requestify
.delete(
'http://product-service-api:8080/api/v1.0/BoatHouse/Food?id=' +
req.query.id
)
.then(function (response) {
console.log(response.body)
return res.send(response.body)
})
})
app.get('/join/list', function (req, res) {
requestify
.get('http://product-service-api:8080/api/v1.0/join/list')
.then(function (response) {
console.log(response.body)
return res.send(response.body)
})
})
app.get('/api/users', function (req, res) {
requestify
.get('http://account-service-api:8080/api/v1.0/user/')
.then(function (response) {
console.log(response.body)
return res.send(response.body)
})
})
app.get('/api/user', function (req, res) {
requestify
.get('http://account-service-api:8080/api/v1.0/user/' + req.query.id)
.then(function (response) {
console.log(response.body)
return res.send(response.body)
})
})
app.post('/api/user', function (req, res) {
requestify
.post(
'http://account-service-api:8080/api/v1.0/user/',
req.body
)
.then(function (response) {
console.log(response.body)
return res.send(response.body)
})
})
app.put('/api/user', function (req, res) {
requestify
.put(
'http://account-service-api:8080/api/v1.0/user/',
req.body
)
.then(function (response) {
console.log(response.body)
return res.send(response.body)
})
})
app.delete('/api/user', function (req, res) {
requestify
.delete('http://account-service-api:8080/api/v1.0/user/delete/' + req.query.id)
.then(function (response) {
console.log(response.body)
return res.send(response.body)
})
})
app.get("/orders/pending", function(req, res) {
requestify
.get("http://product-service-api:8080/api/v1.0/orders/pending")
.then(function(response) {
console.log(response.body);
return res.send(response.body);
});
});
app.put("/orders/confirm", function(req, res) {
requestify
.put("http://product-service-api:8080/api/v1.0/orders/confirm", req.body)
.then(function(response) {
console.log(response.body);
return res.send(response.body);
});
});
app.put("/orders/refuse", function(req, res) {
requestify
.put("http://product-service-api:8080/api/v1.0/orders/refuse", req.body)
.then(function(response) {
console.log(response.body);
return res.send(response.body);
});
});
app.get("/api/intro/intro_page", function(req, res) {
requestify
.get("http://product-service-api:8080/api/v1.0/intro/intro_page/" + req.query.page_id)
.then(function(response) {
console.log(response.body);
return res.send(response.body);
});
});
app.post("/api/intro/intro_page", function(req, res) {
requestify
.put("http://product-service-api:8080/api/v1.0/intro/intro_page", req.body)
.then(function(response) {
console.log(response.body);
return res.send(response.body);
});
});
app.put("/api/intro/intro_page", function(req, res) {
requestify
.put("http://product-service-api:8080/api/v1.0/intro/intro_page", req.body)
.then(function(response) {
console.log(response.body);
return res.send(response.body);
});
});