Skip to content
32 changes: 14 additions & 18 deletions handlers/webpac-handler.js
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,7 @@ const {
reconstructOriginalURL
} = require('../lib/utils')
const logger = require('../lib/logger')
const { nyplApiClient } = require('../lib/nypl-api-client.js')
const requests = require('../lib/requests')

const expressions = {
/**
Expand Down Expand Up @@ -40,20 +40,11 @@ const expressions = {
handler: async (match) => {
// check if bib is research or circulating
const oclcNum = match[1]
const client = await nyplApiClient({ apiName: 'discovery' })
const resp = await client.get(`/bibs?nyplSource=sierra-nypl&controlNumber=${oclcNum}`)
const id = resp && resp.data && resp.data[0] && resp.data[0].id
const varFields = resp && resp.data && resp.data[0] && resp.data[0].varFields
const field910a = varFields && varFields.find(field =>
field.marcTag === '910' &&
field.subfields.some(subfield => subfield.tag === 'a')
)
const isResearch = field910a && field910a.subfields.some(subfield => subfield.tag === 'a' && subfield.content === 'RL')

const { isResearch, bibId } = await requests.queryIsResearch(oclcNum, "controlNumber")
if (isResearch) {
return `${process.env.RC_BASE_URL}/search?oclc=${oclcNum}&redirectOnMatch=true`
} else {
return `${process.env.VEGA_HOST}/search/card?recordId=${id}`
return `${process.env.VEGA_HOST}/search/card?recordId=${bibId}`
}
}
},
Expand Down Expand Up @@ -121,14 +112,19 @@ const expressions = {
},

recordReg: {
expr: /\/record=(b\d{8})/,
handler: (match, request) => {
expr: /\/record=b(\d{8})/,
handler: async (match, request) => {
const num = match[1]
const { collection } = request.query
const bnum = match[1]
if (Array.isArray(collection) && collection.includes('circ')) {
return `${process.env.VEGA_HOST}/search/card?recordId=${bnum.replace(/\D/g, '')}`
const circCollection = Array.isArray(collection) && collection.includes('circ')
const vegaUrl = `${process.env.VEGA_HOST}/search/card?recordId=${num.replace(/\D/g, '')}`
if (circCollection) {
return vegaUrl
}
return `${process.env.RC_BASE_URL}/bib/${bnum}`
const { isResearch } = await requests.queryIsResearch(num, 'id')
if (isResearch) {
return `${process.env.RC_BASE_URL}/bib/b${num}`
} else return vegaUrl
}
},

Expand Down
6 changes: 3 additions & 3 deletions lib/nypl-api-client.js
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
const NyplApiClient = require('@nypl/nypl-data-api-client');
const { decrypt } = require('./kms-helper')
const kms = require('./kms-helper')

const CACHE = { clients: [] };

Expand All @@ -16,8 +16,8 @@ async function nyplApiClient(options = { apiName: 'platform' }) {
const kmsEnvironment = process.env.KMS_ENV || 'encrypted';

if (kmsEnvironment === 'encrypted') {
clientId = await decrypt(clientId)
clientSecret = await decrypt(clientSecret)
clientId = await kms.decrypt(clientId)
clientSecret = await kms.decrypt(clientSecret)
}

const nyplApiClient = new NyplApiClient({
Expand Down
16 changes: 16 additions & 0 deletions lib/requests.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,16 @@
const { nyplApiClient } = require('../lib/nypl-api-client.js')

const queryIsResearch = async (num, queryParam) => {
const client = await nyplApiClient({ apiName: 'discovery' })
const resp = await client.get(`/bibs?nyplSource=sierra-nypl&${queryParam}=${num}`)
const bibId = resp?.data?.[0].id
const varFields = resp?.data?.[0]?.varFields
const field910a = varFields && varFields.find(field =>
field.marcTag === '910' &&
field.subfields.some(subfield => subfield.tag === 'a')
)
const isResearch = field910a && field910a.subfields.some(subfield => subfield.tag === 'a' && subfield.content === 'RL')
return { isResearch, bibId }
}

module.exports = { queryIsResearch }
22 changes: 22 additions & 0 deletions test/unit/fixtures.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,22 @@
const bibServiceResponse = ({ isResearch }) => {
return {
data: [
{
id: 'abcdefg',
varFields: [
{
marcTag: '910',
subfields: [
{
tag: 'a',
content: isResearch ? 'RL' : 'BL'
}
]
}
]
}
]
}
}

module.exports = { bibServiceResponse }
Loading
Loading