Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
78 changes: 50 additions & 28 deletions server/seeders/20240903165406-add-vendors.js
Original file line number Diff line number Diff line change
Expand Up @@ -7,43 +7,65 @@ module.exports = {
async up(queryInterface, Sequelize) {
const vendorLines = await getUsersFromFile('vendors.txt');

const vendorToUsers = new Map();
for (const line of vendorLines) {
const [username, companyName] = line.split('|');
if (username && companyName) {
// Create vendor if it doesn't exist
const [vendor] = await queryInterface.sequelize.query(
`INSERT INTO "Vendor" (name, "createdAt", "updatedAt")
VALUES (:name, NOW(), NOW())
ON CONFLICT (name) DO UPDATE SET name = :name
RETURNING id`,
{
replacements: { name: companyName },
type: Sequelize.QueryTypes.INSERT
}
);
if (!vendorToUsers.has(companyName)) {
vendorToUsers.set(companyName, []);
}
vendorToUsers.get(companyName).push(username);
}
}

// Associate user with vendor if user exists
await queryInterface.sequelize.query(
`UPDATE "User" SET "vendorId" = :vendorId
// Create vendor if it doesn't exist
for (const [companyName, companyInfo] of Object.entries(
VENDOR_NAME_TO_AT_MAPPING
)) {
const [vendor] = await queryInterface.sequelize.query(
`INSERT INTO "Vendor" (id, name, "createdAt", "updatedAt")
VALUES (:id, :name, NOW(), NOW())
ON CONFLICT (name) DO UPDATE SET name = :name
RETURNING id`,
{
replacements: { id: companyInfo.id, name: companyName },
type: Sequelize.QueryTypes.INSERT
}
);

// Update sequence to ensure nextval is curr + 1
await queryInterface.sequelize.query(
`SELECT setval(pg_get_serial_sequence('"Vendor"', 'id'), :id, false)`,
{
replacements: { id: vendor[0].id },
type: Sequelize.QueryTypes.SELECT
}
);

// Associate user with vendor if user exists
const usernames = vendorToUsers.get(companyName);
if (usernames) {
for (const username of usernames) {
await queryInterface.sequelize.query(
`UPDATE "User" SET "vendorId" = :vendorId
WHERE username = :username`,
{
replacements: { vendorId: vendor[0].id, username },
type: Sequelize.QueryTypes.UPDATE
}
);
}
}

for (const atName of companyInfo.ats) {
await queryInterface.sequelize.query(
`UPDATE "At" SET "vendorId" = :vendorId
WHERE name = :atName`,
{
replacements: { vendorId: vendor[0].id, username },
replacements: { vendorId: vendor[0].id, atName },
type: Sequelize.QueryTypes.UPDATE
}
);

if (VENDOR_NAME_TO_AT_MAPPING[companyName]) {
for (const atName of VENDOR_NAME_TO_AT_MAPPING[companyName]) {
await queryInterface.sequelize.query(
`UPDATE "At" SET "vendorId" = :vendorId
WHERE name = :atName`,
{
replacements: { vendorId: vendor[0].id, atName },
type: Sequelize.QueryTypes.UPDATE
}
);
}
}
}
}
},
Expand Down
3 changes: 2 additions & 1 deletion server/seeders/20241030144705-addNvAccessVendor.js
Original file line number Diff line number Diff line change
Expand Up @@ -4,10 +4,11 @@
module.exports = {
async up(queryInterface, Sequelize) {
return queryInterface.sequelize.transaction(async transaction => {
// Create NVDA vendor and retrieve id to use with 'At' table
// Insert vendor if it doesn't exist, or get existing id
const [vendor] = await queryInterface.sequelize.query(
`insert into "Vendor" (name, "createdAt", "updatedAt")
values ('nvAccess', now(), now())
on conflict (name) do update set name = excluded.name
returning id`,
{
type: Sequelize.QueryTypes.INSERT,
Expand Down
15 changes: 12 additions & 3 deletions server/util/constants.js
Original file line number Diff line number Diff line change
Expand Up @@ -15,9 +15,18 @@ const AT_VERSIONS_SUPPORTED_BY_COLLECTION_JOBS = {
};

const VENDOR_NAME_TO_AT_MAPPING = {
vispero: ['JAWS'],
nvAccess: ['NVDA'],
apple: ['VoiceOver for macOS']
vispero: {
id: 1,
ats: ['JAWS']
},
apple: {
id: 4,
ats: ['VoiceOver for macOS']
},
nvAccess: {
id: 6,
ats: ['NVDA']
}
};

module.exports = {
Expand Down
Loading