mirror of
https://github.com/nowcommunity/nowdatabase.git
synced 2026-10-12 19:13:52 +03:00
Backend for References - first author needs attention
This commit is contained in:
@@ -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, () => {
|
||||
|
||||
@@ -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
|
||||
@@ -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
|
||||
}
|
||||
Reference in New Issue
Block a user