Skip to content

Commit

Permalink
add views
Browse files Browse the repository at this point in the history
  • Loading branch information
Jugurtha Bouhadoun committed Jun 18, 2024
1 parent 7ad9cd9 commit d9ab0c7
Show file tree
Hide file tree
Showing 3 changed files with 95 additions and 26 deletions.
47 changes: 47 additions & 0 deletions db-migrations/migrations/20240618130241-common_toponym_view.cjs
Original file line number Diff line number Diff line change
@@ -0,0 +1,47 @@
'use strict'

const {POSTGRES_BAN_USER} = process.env

/** @type {import('sequelize-cli').Migration} */
module.exports = {
async up(queryInterface) {
const addressBboxBuffer = 200;
const bboxBuffer = 100;
try {
// Execute the view creation
await queryInterface.sequelize.query(`
CREATE VIEW ban."common_toponym_view" AS
SELECT
CT.id, CT."districtID", CT.labels, CT.geometry, CT."updateDate", CT.meta, CT.range_validity, CT."isActive",
ST_Centroid(ST_Collect(ST_SetSRID(ST_GeomFromGeoJSON((A.positions[1])->'geometry'), 4326))) AS centroid,
ST_Transform(ST_Buffer(ST_Transform(ST_Envelope(ST_Collect(ST_SetSRID(ST_GeomFromGeoJSON((A.positions[1])->'geometry'), 4326))), 2154), ${addressBboxBuffer}, 'join=mitre endcap=square'), 4326) AS "addressBbox",
ST_Transform(ST_Buffer(ST_Transform(ST_Envelope(ST_SetSRID(ST_GeomFromGeoJSON(CT.geometry), 4326)), 2154), ${bboxBuffer}, 'join=mitre endcap=square'), 4326) AS "bbox",
COUNT(A.id) AS "addressCount",
COUNT(DISTINCT CASE WHEN A.certified = true THEN A.id ELSE NULL END) AS "certifiedAddressCount"
FROM
ban.common_toponym AS CT
LEFT JOIN
ban.address AS A
ON
(CT.id = A."mainCommonToponymID"
OR CT.id = ANY(A."secondaryCommonToponymIDs")) AND A."isActive" = true
WHERE CT."isActive" = true
GROUP BY CT.id
ORDER BY CT.id ASC `
)
// Grant permissions to ban user
await queryInterface.sequelize.query(`GRANT SELECT ON ban."common_toponym_view" TO "${POSTGRES_BAN_USER}";`)
} catch (error) {
console.lhog(error);
}
},

async down(queryInterface) {
try {
// Drop the view if it exists
await queryInterface.sequelize.query('DROP VIEW IF EXISTS ban."common_toponym_view" ;');
} catch (error) {
console.log(error);
}
}
}
35 changes: 35 additions & 0 deletions db-migrations/migrations/20240618130303-address_view.cjs
Original file line number Diff line number Diff line change
@@ -0,0 +1,35 @@
'use strict'

const {POSTGRES_BAN_USER} = process.env

/** @type {import('sequelize-cli').Migration} */
module.exports = {
async up(queryInterface) {
const bboxBuffer = 100;
try {
// Create the address_view
await queryInterface.sequelize.query(`
CREATE VIEW ban."address_view" AS
SELECT
A.*,
ST_Transform(ST_Buffer(ST_Transform(ST_Envelope(ST_SetSRID(ST_GeomFromGeoJSON((A.positions[1])->'geometry'), 4326)), 2154), ${bboxBuffer}, 'join=mitre endcap=square'), 4326) AS bbox
FROM
ban.address AS A
WHERE A."isActive" = true
ORDER BY A.id ASC
`)
await queryInterface.sequelize.query(`GRANT SELECT ON ban."address_view" TO "${POSTGRES_BAN_USER}";`);
} catch (error) {
console.log(error);
}
},

async down(queryInterface) {
try {
// Drop the address_view if it exists
await queryInterface.sequelize.query('DROP VIEW IF EXISTS ban."address_view";');
} catch (error) {
console.log(error);
}
}
}
39 changes: 13 additions & 26 deletions lib/api/consumers/export-to-exploitation-db-consumer.js
Original file line number Diff line number Diff line change
Expand Up @@ -49,22 +49,10 @@ const EXPLOITATION_DB_COLLECTION_NAMES = {

const commonToponymPageQuery = `
SELECT
CT.id, CT."districtID", CT.labels, CT.geometry, CT."updateDate", CT.meta, CT.range_validity, CT."isActive",
ST_Centroid(ST_Collect(ST_SetSRID(ST_GeomFromGeoJSON((A.positions[1])->'geometry'), 4326))) AS centroid,
ST_Transform(ST_Buffer(ST_Transform(ST_Envelope(ST_Collect(ST_SetSRID(ST_GeomFromGeoJSON((A.positions[1])->'geometry'), 4326))), 2154), :addressBboxBuffer, 'join=mitre endcap=square'), 4326) AS "addressBbox",
ST_Transform(ST_Buffer(ST_Transform(ST_Envelope(ST_SetSRID(ST_GeomFromGeoJSON(CT.geometry), 4326)), 2154), :bboxBuffer, 'join=mitre endcap=square'), 4326) AS "bbox",
COUNT(A.id) AS "addressCount",
COUNT(DISTINCT CASE WHEN a.certified = true THEN a.id ELSE NULL END) AS "certifiedAddressCount"
CTV.*
FROM
ban.common_toponym AS CT
LEFT JOIN
ban.address AS A
ON
(CT.id = A."mainCommonToponymID"
OR CT.id = ANY(A."secondaryCommonToponymIDs")) AND A."isActive" = true
WHERE CT."districtID" = :districtID AND CT."isActive" = true
GROUP BY CT.id
ORDER BY CT.id ASC
ban.common_toponym_view AS CTV
WHERE CTV."districtID" = :districtID
OFFSET :offset
LIMIT :limit
`
Expand All @@ -75,12 +63,10 @@ const commonToponymPageQuery = `
// and includes a buffer operation with a distance of 50 units and specific parameters for joining and capping.
const addressPageQuery = `
SELECT
A.*,
ST_Transform(ST_Buffer(ST_Transform(ST_Envelope(ST_SetSRID(ST_GeomFromGeoJSON((A.positions[1])->'geometry'), 4326)), 2154), :bboxBuffer, 'join=mitre endcap=square'), 4326) AS bbox
AV.*
FROM
ban.address AS A
WHERE A."districtID" = :districtID AND A."isActive" = true
ORDER BY A.id ASC
ban.address_view AS AV
WHERE AV."districtID" = :districtID
OFFSET :offset
LIMIT :limit
`
Expand Down Expand Up @@ -128,6 +114,10 @@ export default async function exportToExploitationDB({data}) {
// Set to store the legacy address ID to avoid duplicates
const addressLegacyIDSet = new Set()

// Clean collections
// Delete all data related to the district (legacy and banID)
await deleteAllLegacyDataRelatedToCOG(cog)

// Check if the district has data to export
// To-fix: use the district configuration instead to check if the district has to be exported
const totalCommonToponymRecords = await CommonToponym.count({
Expand Down Expand Up @@ -158,9 +148,7 @@ export default async function exportToExploitationDB({data}) {
replacements: {
districtID,
offset,
limit: PAGE_SIZE,
addressBboxBuffer: COMMON_TOPONYM_BBOX_BUFFER,
bboxBuffer: SPECIFIC_COMMON_TOPONYM_BBOX_BUFFER},
limit: PAGE_SIZE},
transaction,
raw: true,
})
Expand Down Expand Up @@ -196,8 +184,7 @@ export default async function exportToExploitationDB({data}) {
replacements: {
districtID,
offset,
limit: PAGE_SIZE,
bboxBuffer: ADDRESS_BBOX_BUFFER},
limit: PAGE_SIZE},
transaction,
raw: true,
})
Expand Down Expand Up @@ -344,4 +331,4 @@ const calculateAddressTiles = address => {
const {positions} = address
const {tiles, x, y} = derivePositionProps(positions?.[0].geometry, TILES_ZOOM_LEVELS.address.min, TILES_ZOOM_LEVELS.address.max)
return {tiles, x, y}
}
}

0 comments on commit d9ab0c7

Please sign in to comment.