@@ -1305,6 +1305,41 @@ func removeDuplicateEntries() error {
13051305 "University of Maryland College Park" ,
13061306 "University Of Maryland College Park" ,
13071307 "University Of Maryland, College Park" ,
1308+
1309+ // Purdue University variants
1310+ "Indiana University-Purdue University At Indianapolis" ,
1311+
1312+ // University Of Massachusetts Amherst
1313+ "University of Massachusetts Amherst" ,
1314+ "University Of Massachusetts Amherst" ,
1315+ "University Of Massachusetts - Amherst" ,
1316+
1317+ // University Of California, Irvine
1318+ "University Of California Irvine" ,
1319+ "Univ. of California - Irvine" ,
1320+ "University Of California At Irvine" ,
1321+ "University Of California, Irvine" ,
1322+ "Univ of California Irvine" ,
1323+ "Univ Of California Irvine" ,
1324+
1325+ // University Of California, Santa Barbara
1326+ "University Of California Santa Barbara" ,
1327+ "University Of Califonia, Santa Barbara" ,
1328+ "Univ. of California - Santa Barbara" ,
1329+ "Univ of California Santa Barbara" ,
1330+ "University Of California, Santa Barbara" ,
1331+ "Univ Of California Santa Barbara" ,
1332+
1333+ // University Of North Carolina Chapel Hill
1334+ "University Of North Carolina Chapel Hill" ,
1335+ "University Of North Carolina, Chapel Hill" ,
1336+
1337+ // University Of Minnesota Twin Cities
1338+ "University Of Minnesota Twin Cities" ,
1339+ "University Of Minnesota - Twin Cities" ,
1340+
1341+ // University Of Pennsylvania State University
1342+ "Penn State University, University Park" ,
13081343 }},
13091344 } {
13101345 for column , values := range duplicates {
@@ -1356,6 +1391,122 @@ func removeTagsFromProfessorNames() error {
13561391 return nil
13571392}
13581393
1394+ func copyLabsFromUniversitiesToLabsTable () error {
1395+ db , err := GetDB ()
1396+ if err != nil {
1397+ logger .Errorf ("β Cannot get DB: %v" , err )
1398+ return fmt .Errorf ("cannot get DB: %w" , err )
1399+ }
1400+
1401+ logger .Infof ("π Searching for labs in universities table..." )
1402+
1403+ // Find all labs in universities table
1404+ rows , err := db .Query (`
1405+ SELECT institution, street_address, city, phone, zip_code, country, region, countryabbrv, homepage, latitude, longitude
1406+ FROM universities
1407+ WHERE institution ILIKE '%lab%'
1408+ OR institution ILIKE '%laboratory%'
1409+ OR institution ILIKE '%research center%'
1410+ OR institution ILIKE '%research centre%'
1411+ OR institution ILIKE '%llc%'
1412+ OR institution ILIKE '%inc%'
1413+ OR institution ILIKE '%dept%'
1414+ ` )
1415+ if err != nil {
1416+ logger .Errorf ("β Failed to query labs from universities: %v" , err )
1417+ return fmt .Errorf ("failed to query labs from universities: %w" , err )
1418+ }
1419+
1420+ defer rows .Close ()
1421+
1422+ var labs []LabModel
1423+ var scannedRows int
1424+
1425+ for rows .Next () {
1426+ var institution , streetAddr , city , phone , zipCode , country , region , countryAbbrv , homepage string
1427+ var latitude , longitude float64
1428+ rowScanErr := rows .Scan (& institution , & streetAddr , & city , & phone , & zipCode , & country , & region , & countryAbbrv , & homepage , & latitude , & longitude )
1429+ if rowScanErr != nil {
1430+ logger .Errorf ("β Failed to scan lab row: %v" , rowScanErr )
1431+ return fmt .Errorf ("failed to scan lab row: %w" , rowScanErr )
1432+ }
1433+ labs = append (labs , LabModel {
1434+ Insitution : institution ,
1435+ StreetAddress : streetAddr ,
1436+ City : city ,
1437+ Phone : phone ,
1438+ ZipCode : zipCode ,
1439+ Country : country ,
1440+ Region : region ,
1441+ CountryAbbrv : countryAbbrv ,
1442+ Homepage : homepage ,
1443+ Latitude : latitude ,
1444+ Longitude : longitude ,
1445+ })
1446+ scannedRows ++
1447+ }
1448+
1449+ if len (labs ) == 0 {
1450+ logger .Warnf ("β οΈ No labs found in universities table to copy." )
1451+ return nil
1452+ }
1453+
1454+ logger .Infof ("Found %d labs to copy from universities table." , scannedRows )
1455+
1456+ // Insert labs into labs table
1457+ tx , err := db .Begin ()
1458+ if err != nil {
1459+ logger .Errorf ("β Failed to begin transaction: %v" , err )
1460+ return fmt .Errorf ("failed to begin transaction: %w" , err )
1461+ }
1462+
1463+ stmt , err := tx .Prepare (`
1464+ INSERT INTO labs (lab, street_address, city, phone, zip_code, country, region, countryabbrv, homepage, latitude, longitude)
1465+ VALUES ($1, $2, $3, $4, $5, $6, $7, $8, $9, $10, $11)
1466+ ON CONFLICT (lab) DO NOTHING;
1467+ ` )
1468+ if err != nil {
1469+ logger .Errorf ("β Failed to prepare insert statement: %v" , err )
1470+ tx .Rollback ()
1471+ return fmt .Errorf ("failed to prepare insert statement: %w" , err )
1472+ }
1473+
1474+ defer stmt .Close ()
1475+
1476+ var insertedLabs int
1477+ for _ , lab := range labs {
1478+ _ , statementExecErr := stmt .Exec (lab .Insitution , lab .StreetAddress , lab .City , lab .Phone , lab .ZipCode , lab .Country , lab .Region , lab .CountryAbbrv , lab .Homepage , lab .Latitude , lab .Longitude )
1479+ if statementExecErr != nil {
1480+ logger .Errorf ("β Failed to insert lab '%s': %v" , lab .Insitution , statementExecErr )
1481+ tx .Rollback ()
1482+ return fmt .Errorf ("failed to insert lab: %w" , statementExecErr )
1483+ }
1484+ insertedLabs ++
1485+ logger .Debugf ("β Inserted lab '%s' into labs table." , lab .Insitution )
1486+ }
1487+
1488+ logger .Infof ("ποΈ Deleting copied labs from universities table..." )
1489+
1490+ var deletedLabs int
1491+ for _ , lab := range labs {
1492+ if _ , err := tx .Exec (`DELETE FROM universities WHERE institution = $1` , lab .Insitution ); err != nil {
1493+ logger .Errorf ("β Failed to delete lab '%s' from universities: %v" , lab .Insitution , err )
1494+ tx .Rollback ()
1495+ return fmt .Errorf ("failed to delete lab from universities: %w" , err )
1496+ }
1497+ deletedLabs ++
1498+ logger .Debugf ("ποΈ Deleted lab '%s' from universities table." , lab .Insitution )
1499+ }
1500+
1501+ if err := tx .Commit (); err != nil {
1502+ logger .Errorf ("β Failed to commit transaction: %v" , err )
1503+ return fmt .Errorf ("failed to commit transaction: %w" , err )
1504+ }
1505+
1506+ logger .Infof ("β
Copied %d labs from universities to labs table and deleted them from universities." , insertedLabs )
1507+ return nil
1508+ }
1509+
13591510func markPipelineAsCompleted (step string , status string ) {
13601511 db , err := GetDB ()
13611512 if err != nil {
@@ -1497,6 +1648,12 @@ func populatePostgres() {
14971648 return
14981649 }
14991650
1651+ if initProgressErr := copyLabsFromUniversitiesToLabsTable (); initProgressErr != nil {
1652+ logger .Errorf ("failed to copy labs from universities to labs table: %v" , initProgressErr )
1653+ markPipelineAsCompleted (string (PIPELINE_POPULATE_POSTGRES ), string (PIPELINE_STATUS_FAILED ))
1654+ return
1655+ }
1656+
15001657 logger .Infof ("π Postgres population completed successfully." )
15011658 markPipelineAsCompleted (string (PIPELINE_POPULATE_POSTGRES ), string (PIPELINE_STATUS_COMPLETED ))
15021659 markPipelineAsCompleted (string (POPULATION_SUCCEEDED_MESSAGE ), string (POPULATION_STATUS_SUCCEEDED ))
0 commit comments