@@ -7,43 +7,65 @@ module.exports = {
77 async up ( queryInterface , Sequelize ) {
88 const vendorLines = await getUsersFromFile ( 'vendors.txt' ) ;
99
10+ const vendorToUsers = new Map ( ) ;
1011 for ( const line of vendorLines ) {
1112 const [ username , companyName ] = line . split ( '|' ) ;
1213 if ( username && companyName ) {
13- // Create vendor if it doesn't exist
14- const [ vendor ] = await queryInterface . sequelize . query (
15- `INSERT INTO "Vendor" (name, "createdAt", "updatedAt")
16- VALUES (:name, NOW(), NOW())
17- ON CONFLICT (name) DO UPDATE SET name = :name
18- RETURNING id` ,
19- {
20- replacements : { name : companyName } ,
21- type : Sequelize . QueryTypes . INSERT
22- }
23- ) ;
14+ if ( ! vendorToUsers . has ( companyName ) ) {
15+ vendorToUsers . set ( companyName , [ ] ) ;
16+ }
17+ vendorToUsers . get ( companyName ) . push ( username ) ;
18+ }
19+ }
2420
25- // Associate user with vendor if user exists
26- await queryInterface . sequelize . query (
27- `UPDATE "User" SET "vendorId" = :vendorId
21+ // Create vendor if it doesn't exist
22+ for ( const [ companyName , companyInfo ] of Object . entries (
23+ VENDOR_NAME_TO_AT_MAPPING
24+ ) ) {
25+ const [ vendor ] = await queryInterface . sequelize . query (
26+ `INSERT INTO "Vendor" (id, name, "createdAt", "updatedAt")
27+ VALUES (:id, :name, NOW(), NOW())
28+ ON CONFLICT (name) DO UPDATE SET name = :name
29+ RETURNING id` ,
30+ {
31+ replacements : { id : companyInfo . id , name : companyName } ,
32+ type : Sequelize . QueryTypes . INSERT
33+ }
34+ ) ;
35+
36+ // Update sequence to ensure nextval is curr + 1
37+ await queryInterface . sequelize . query (
38+ `SELECT setval(pg_get_serial_sequence('"Vendor"', 'id'), :id, false)` ,
39+ {
40+ replacements : { id : vendor [ 0 ] . id } ,
41+ type : Sequelize . QueryTypes . SELECT
42+ }
43+ ) ;
44+
45+ // Associate user with vendor if user exists
46+ const usernames = vendorToUsers . get ( companyName ) ;
47+ if ( usernames ) {
48+ for ( const username of usernames ) {
49+ await queryInterface . sequelize . query (
50+ `UPDATE "User" SET "vendorId" = :vendorId
2851 WHERE username = :username` ,
52+ {
53+ replacements : { vendorId : vendor [ 0 ] . id , username } ,
54+ type : Sequelize . QueryTypes . UPDATE
55+ }
56+ ) ;
57+ }
58+ }
59+
60+ for ( const atName of companyInfo . ats ) {
61+ await queryInterface . sequelize . query (
62+ `UPDATE "At" SET "vendorId" = :vendorId
63+ WHERE name = :atName` ,
2964 {
30- replacements : { vendorId : vendor [ 0 ] . id , username } ,
65+ replacements : { vendorId : vendor [ 0 ] . id , atName } ,
3166 type : Sequelize . QueryTypes . UPDATE
3267 }
3368 ) ;
34-
35- if ( VENDOR_NAME_TO_AT_MAPPING [ companyName ] ) {
36- for ( const atName of VENDOR_NAME_TO_AT_MAPPING [ companyName ] ) {
37- await queryInterface . sequelize . query (
38- `UPDATE "At" SET "vendorId" = :vendorId
39- WHERE name = :atName` ,
40- {
41- replacements : { vendorId : vendor [ 0 ] . id , atName } ,
42- type : Sequelize . QueryTypes . UPDATE
43- }
44- ) ;
45- }
46- }
4769 }
4870 }
4971 } ,
0 commit comments