Skip to content

Instantly share code, notes, and snippets.

@rlubke
rlubke / imports.js
Created October 20, 2020 21:01
Necessary imports
const express = require('express')
const coherence = require('@oracle/coherence')
const path = require('path')
const uuid = require('uuid')
const {sse} = require('@toverux/expresse')
@rlubke
rlubke / express.js
Created October 20, 2020 21:04
Configure express
// setup Express
const port = process.env.PORT || 5000
const api = express()
api.use(express.json())
api.use(express.static(path.join(__dirname, '../java/server/src/main/web/react/build'))) // serve the react application
@rlubke
rlubke / session.js
Created October 20, 2020 21:05
Configure session
// setup session to Coherence
const session = new Session()
const tasks = session.getMap('tasks')
@rlubke
rlubke / post.js
Created October 20, 2020 21:08
POST /api/tasks implementation
api.post('/api/tasks', (req, res, next) => {
const todo = createTask(req.body.description)
const id = todo.id
todos.set(id, todo)
.then(() => {
res.send(JSON.stringify(todo))
})
.catch(err => next(err))
})
@rlubke
rlubke / createtask.js
Created October 20, 2020 21:10
createTask implementation
function createTask(description) {
const task = {
'@class': 'Task',
id: uuid.v4().substr(0, 6),
createdAt: Date.now(),
description: description,
completed: false
}
return task
@rlubke
rlubke / get.js
Last active October 20, 2020 21:12
GET /api/tasks/events implementation
api.get('/api/tasks/events', sse(), (req, res, next) => {
const listener = new MapListener()
listener.on('insert', data => {
res.sse.event('insert', data.newValue)
}).on('update', data => {
res.sse.event('update', data.newValue)
}).on('delete', data => {
res.sse.event('delete', data.oldValue)
})
@rlubke
rlubke / get2.js
Last active October 20, 2020 21:12
GET /api/tasks implementation
api.get('/api/tasks', (req, res, next) => {
const completed = req.query.completed
const filter = completed
? Filters.equal('completed', completed)
: Filters.always()
const toSend = []
tasks.values(filter)
.then(async values => {
// copy values to array to be sent via express
@rlubke
rlubke / delete.js
Last active October 20, 2020 21:13
DELETE /api/tasks/:id implementation
api.delete('/api/tasks/:id', (req, res, next) => {
tasks.delete(req.params.id)
.then(oldValue => { res.sendStatus(oldValue ? 200 : 404)})
.catch(err => next(err))
})
@rlubke
rlubke / delete2.js
Created October 20, 2020 21:14
DELETE /api/tasks implementation
api.delete('/api/tasks', (req, res, next) => {
tasks.invokeAll(Filters.equal('completed', true),
Processors.conditionalRemove(Filters.always()))
.catch(err => next(err))
})
@rlubke
rlubke / put.js
Created October 20, 2020 21:15
PUT /api/tasks/:id implementation
api.put('/api/tasks/:id', (req, res, next) => {
const description = req.body.description
const completed = req.body.completed
let processor = null
if (description) {
processor = Processors.update('description', description)
}
if (typeof(completed) !== 'undefined') {