Skip to content

Commit

Permalink
Add API route to save postal areas in postgres database
Browse files Browse the repository at this point in the history
  • Loading branch information
FLoreauIGN committed Apr 18, 2024
1 parent e1fc00c commit 4b5c11a
Show file tree
Hide file tree
Showing 3 changed files with 51 additions and 0 deletions.
9 changes: 9 additions & 0 deletions lib/api/postal-code/models.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
import {PostalArea} from '../../util/sequelize.js'

export const getAllPostalAreas = () => PostalArea.findAll({attributes: ['postalCode']})

export const putPostalAreas = postalAreas => PostalArea.bulkCreate(postalAreas, {updateOnDuplicate: ['geometry'], subQuery: false})

export const deletePostalAreas = postalCodes => {
postalCodes.map(postalCode => PostalArea.destroy({where: {postalCode}}))
}
40 changes: 40 additions & 0 deletions lib/api/postal-code/routes.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,40 @@
import 'dotenv/config.js' // eslint-disable-line import/no-unassigned-import
import express from 'express'
import auth from '../../middleware/auth.js'
import {getAllPostalAreas, putPostalAreas, deletePostalAreas} from './models.js'

const app = new express.Router()

app.route('/')
.put(auth, async (req, res) => {
const postalCodeDBResponse = await getAllPostalAreas() || []
const postalCodesFromDB = new Set(postalCodeDBResponse.map(({postalCode}) => postalCode))

const {features, crs} = req.body || {}

const bulkOperations = features.map(({properties, geometry}) => {
const postalCode = properties.cp
postalCodesFromDB.delete(postalCode)
if (geometry.crs === undefined) {
geometry.crs = crs
}

return {postalCode, geometry}
})

const bulkPostalCode = putPostalAreas(bulkOperations)

const deletePostalCode = postalCodesFromDB.size > 0 ? deletePostalAreas([...postalCodesFromDB]) : true

const operations = await Promise.all([bulkPostalCode, deletePostalCode])

res.send(
{
date: new Date(),
status: 'success',
response: operations,
}
)
})

export default app
2 changes: 2 additions & 0 deletions lib/api/routes.js
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,7 @@ import commonToponymRoutes from './common-toponym/routes.js'
import districtRoutes from './district/routes.js'
import statusRoutes from './job-status/routes.js'
import banIdRoutes from './ban-id/routes.js'
import postalCodeRoutes from './postal-code/routes.js'

const app = new express.Router()

Expand All @@ -14,5 +15,6 @@ app.use('/common-toponym', commonToponymRoutes)
app.use('/district', districtRoutes)
app.use('/job-status', statusRoutes)
app.use('/ban-id', banIdRoutes)
app.use('/postal-code', postalCodeRoutes)

export default app

0 comments on commit 4b5c11a

Please sign in to comment.