Backend for References - first author needs attention

This commit is contained in:
karilint
2024-05-02 11:50:01 +03:00
committed by Arttu Kangas
parent 8778d0f2e3
commit 8e58432ceb
3 changed files with 67 additions and 0 deletions
+2
View File
@@ -4,6 +4,7 @@ import 'express-async-errors'
import { testDbConnection } from './utils/db'
import userRouter from './routes/user'
import localityRouter from './routes/locality'
import referenceRouter from './routes/reference'
import speciesRouter from './routes/species'
import { requestLogger, responseLogger } from './middlewares/requestLogger'
import compression from 'compression'
@@ -26,6 +27,7 @@ app.use('/user', userRouter)
if (BACKEND_MODE !== 'dev') app.use(requireLogin)
app.use('/locality', localityRouter)
app.use('/reference', referenceRouter)
app.use('/species', speciesRouter)
app.use(errorHandler)
app.listen(PORT, () => {
+17
View File
@@ -0,0 +1,17 @@
import { Router } from 'express'
import { getAllReferences, getReferenceDetails } from '../services/reference'
const router = Router()
router.get('/all', async (req, res) => {
const references = await getAllReferences()
return res.status(200).send(references)
})
router.get('/:id', async (req, res) => {
const id = parseInt(req.params.id)
const reference = await getReferenceDetails(id)
res.status(200).send(reference)
})
export default router
+48
View File
@@ -0,0 +1,48 @@
import { models, sequelize } from '../utils/db';
export const getAllReferences = async () => {
try {
const result = await models.ref_ref.findAll({
attributes: [
['rid', 'Reference Id'],
[sequelize.col('ref_authors.author_surname'), 'Author'],
[sequelize.col('journal.journal_title'), 'Journal'],
['date_primary', 'Year'],
['title_primary', 'Title'],
['title_secondary', 'Book Title'],
[sequelize.col('ref_type.ref_type'), 'Type']
],
include: [
{
model: models.ref_authors,
as: 'ref_authors',
attributes: [],
where: { au_num: 1 } // field to determine the first author
},
{
model: models.ref_journal,
as: 'journal',
attributes: []
},
{
model: models.ref_ref_type,
as: 'ref_type',
attributes: []
}
],
group: ['ref_ref.rid'], // This groups the results to ensure each reference ID only appears once
raw: true, // This makes sure that the data returned is only raw data objects
logging: console.log // This will log the SQL query to the console
});
return result;
} catch (error) {
console.error('Error fetching references:', error);
throw error;
}
}
export const getReferenceDetails = async (id: number) => {
// TODO: Check if user has access
const result = await models.ref_ref.findByPk(id)
return result
}