From a313fc62486a6a2d08ee6981baff532f36c5d09b Mon Sep 17 00:00:00 2001 From: ShootingStar91 Date: Thu, 22 Aug 2024 21:39:15 +0300 Subject: [PATCH] Add WIP delete route & service for locality --- backend/src/routes/locality.ts | 7 +++++++ backend/src/services/write/delete.ts | 27 +++++++++++++++++++++++++++ 2 files changed, 34 insertions(+) create mode 100644 backend/src/services/write/delete.ts diff --git a/backend/src/routes/locality.ts b/backend/src/routes/locality.ts index f3d19344..ecd8f617 100644 --- a/backend/src/routes/locality.ts +++ b/backend/src/routes/locality.ts @@ -5,6 +5,7 @@ import { EditDataType, EditMetaData, LocalityDetailsType } from '../../../fronte import { write } from '../services/write/write' import { requireOneOf } from '../middlewares/authorizer' import { Role } from '../../../frontend/src/types' +import { deleteLocality } from '../services/write/delete' const router = Router() @@ -47,4 +48,10 @@ router.put( } ) +router.delete('/:id', requireOneOf([Role.Admin]), async (req, res) => { + const id = parseInt(req.params.id) + await deleteLocality(id) + return res.status(200).send() +}) + export default router diff --git a/backend/src/services/write/delete.ts b/backend/src/services/write/delete.ts new file mode 100644 index 00000000..dddcaa58 --- /dev/null +++ b/backend/src/services/write/delete.ts @@ -0,0 +1,27 @@ +import { PoolConnection } from 'mariadb' +import { AllowedTables } from './writeUtils' +import { NOW_DB_NAME } from '../../utils/config' +import { pool } from '../../utils/db' +import { logger } from '../../utils/logger' + +const deleteFromTable = async ( + table: AllowedTables, + idColumn: string, + id: string | number, + returnColumns: string[], + connection: PoolConnection +) => { + return await connection.query>( + `DELETE FROM ${NOW_DB_NAME}.${table} WHERE ${idColumn} = ? RETURNING ${returnColumns.join(', ')}`, + [id] + ) +} + +export const deleteLocality = async (id: string | number) => { + const connection = await pool.getConnection() + const deletedLocalitySpecies = await deleteFromTable('now_ls', 'lid', id, ['lid', 'species_id'], connection) + logger.info(`Deleted following locality species: ${deletedLocalitySpecies.toString()}`) + await deleteFromTable('now_loc', 'lid', id, ['lid'], connection) + // TODO: Log, inside a transaction + await connection.end() +}