Skip to content
52 changes: 28 additions & 24 deletions package-lock.json

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

4 changes: 2 additions & 2 deletions src/models/ProposalMessage.ts
Original file line number Diff line number Diff line change
Expand Up @@ -42,8 +42,8 @@ export type ProposalMessageData = {
newStatus?: ProposalStatusDefaultShortCodes;
submitted: boolean;
members: ProposalUser[];
dataAccessUsers: ProposalUser[];
visitors: ProposalUser[];
dataAccessUsers?: ProposalUser[];
visitors?: ProposalUser[];
proposer?: ProposalUser;
instruments?: Instrument[];
};
Original file line number Diff line number Diff line change
Expand Up @@ -195,19 +195,32 @@ const checkProposalExists = async (

const getInstrumentIds = async (instruments: Instrument[]) => {
const sciCatAccessToken = await getSciCatAccessToken();
const shortCodes = JSON.stringify(instruments.map((inst) => inst.shortCode));
const instrumentNames = instruments.map((inst) => inst.shortCode);

const url = `${sciCatBaseUrl}/Instruments?filter={"where":{"name":{"$in":${shortCodes}}}}`;
const instrumentIds = [];

const getInstrumentsResponse = await request<InstrumentDto[]>(url, {
method: 'GET',
headers: {
'Content-Type': 'application/json',
Authorization: `Bearer ${sciCatAccessToken}`,
},
});
for (const name of instrumentNames) {
const instrumentNameLowerCase = encodeURIComponent(name.toLowerCase());
const url = `${sciCatBaseUrl}/Instruments?filter={"where":{"name":{"like":"${instrumentNameLowerCase}"}}}`;

try {
const res = await request<InstrumentDto[]>(url, {
method: 'GET',
headers: {
'Content-Type': 'application/json',
Authorization: `Bearer ${sciCatAccessToken}`,
},
});

instrumentIds.push(res[0].pid);
} catch (error) {
logger.logError(`Error fetching instrument ID from scicat for ${name}`, {
error,
});
}
}

return getInstrumentsResponse.map((inst) => inst.pid);
return instrumentIds;
};

const upsertProposalInScicat = async (
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -107,8 +107,8 @@ export async function syncVisaProposal(
const experimenters = [
...(proposalWithNewStatus.proposer ? [proposalWithNewStatus.proposer] : []),
...proposalWithNewStatus.members,
...proposalWithNewStatus.dataAccessUsers,
...proposalWithNewStatus.visitors,
...(proposalWithNewStatus.dataAccessUsers || []),
...(proposalWithNewStatus.visitors || []),
];

// Create new user for the Principal Investigator, Coproposers, Data Access Users and Visitors
Expand Down
24 changes: 14 additions & 10 deletions src/queue/consumers/visa/utils/sanitizeProposalMessage.ts
Original file line number Diff line number Diff line change
Expand Up @@ -10,16 +10,20 @@ export function sanitizeProposalMessage(proposalMessage: ProposalMessageData) {
oidcSub: member.oidcSub.toLowerCase(),
email: member.email.toLowerCase(),
})),
dataAccessUsers: proposalMessage.dataAccessUsers.map((user) => ({
...user,
oidcSub: user.oidcSub.toLowerCase(),
email: user.email.toLowerCase(),
})),
visitors: proposalMessage.visitors.map((visitor) => ({
...visitor,
oidcSub: visitor.oidcSub.toLowerCase(),
email: visitor.email.toLowerCase(),
})),
dataAccessUsers: proposalMessage.dataAccessUsers
? proposalMessage.dataAccessUsers.map((user) => ({
...user,
oidcSub: user.oidcSub.toLowerCase(),
email: user.email.toLowerCase(),
}))
: [],
visitors: proposalMessage.visitors
? proposalMessage.visitors.map((visitor) => ({
...visitor,
oidcSub: visitor.oidcSub.toLowerCase(),
email: visitor.email.toLowerCase(),
}))
: [],
proposer: proposalMessage.proposer
? {
...proposalMessage.proposer,
Expand Down
Loading