diff --git a/.DS_Store b/.DS_Store deleted file mode 100644 index d81daf067..000000000 Binary files a/.DS_Store and /dev/null differ diff --git a/.gitignore b/.gitignore new file mode 100644 index 000000000..a547bf36d --- /dev/null +++ b/.gitignore @@ -0,0 +1,24 @@ +# Logs +logs +*.log +npm-debug.log* +yarn-debug.log* +yarn-error.log* +pnpm-debug.log* +lerna-debug.log* + +node_modules +dist +dist-ssr +*.local + +# Editor directories and files +.vscode/* +!.vscode/extensions.json +.idea +.DS_Store +*.suo +*.ntvs* +*.njsproj +*.sln +*.sw? diff --git a/Node and MySQL Guide.txt b/Node and MySQL Guide.txt deleted file mode 100644 index e445520f6..000000000 --- a/Node and MySQL Guide.txt +++ /dev/null @@ -1,32 +0,0 @@ -Download Node: https://nodejs.org/en/download/ - -Download MySQL: https://dev.mysql.com/downloads/installer/ - - Make sure you select "Legacy Password" instead of the recommended password. - -Install this specific CSV reader: https://github.com/vanillaes/csv - - -npm install mysql -npm install sql-template-strings -npm install csv-parse - - - - -Put this code into a .mjs file and edit the password: - -var mysql = require('mysql'); -var con = mysql.createConnection({ - host: "localhost", - user: "root", - password: "[PUT YOUR PASSWORD HERE]" -}); -con.connect(function(err) { - if (err) throw err; - console.log("Connected!"); -}); - - -Test if it works: -> node "[PUT YOUR FILE PATH HERE]" -Connected! diff --git a/README.md b/README.md deleted file mode 100644 index a40ba35bd..000000000 --- a/README.md +++ /dev/null @@ -1,12 +0,0 @@ -# CMPSC483 -1. Download NodeJS https://nodejs.org/en/ - - -2. (Git) pull the repository https://github.com/jiwoongjeon/CMPSC483 - - -3. (Terminal) At the directory, cd until you see the pacakge.json, and at the directory npm install - - -4. run the program by npm start - diff --git a/SQLconnection.js b/SQLconnection.js deleted file mode 100644 index c8b6a1ae8..000000000 --- a/SQLconnection.js +++ /dev/null @@ -1,10 +0,0 @@ -var mysql = require('mysql'); -var con = mysql.createConnection({ - host: "localhost", - user: "mav5499", - password: "password" -}); -con.connect(function(err) { - if (err) throw err; - console.log("Connected!"); -}); \ No newline at end of file diff --git a/Students Without Prefs.csv b/Students Without Prefs.csv index 2dc681670..64c7251e8 100644 --- a/Students Without Prefs.csv +++ b/Students Without Prefs.csv @@ -1,123 +1,123 @@ First Name,Last Name,E-mail Address,Course,Time -Elias,Abboud,EFA5156@psu.edu,EE 403W 001,T R 8:00 am-9:55 am -Alaa,Abdou,AAA383@psu.edu,BME 450W 001,T R 8:00 am-9:55 am -Ian,Abrams,IXA5134@psu.edu,CMPSC 483W 002,T R 11:15 am-1:10 pm -Talal,Abu Alzeinat,TZA5224@psu.edu,EDSGN 460W 001,T R 8:00 am-9:55 am -Noor,Al Jashmi,NQA5267@psu.edu,ME 440W 004,T R 11:15 am-1:10 pm -Sebastian,Alba Campos,SBA5411@psu.edu,IE 480W 001,T R 8:00 am-9:55 am -Omar,Ali,OQA5105@psu.edu,EE 403W 002,T R 11:15 am-1:10 pm -Jacob,Allen,JNA5232@psu.edu,ME 440W 006,T R 11:15 am-1:10 pm -Travis,Allen,TAA5321@psu.edu,IE 480W 001,T R 8:00 am-9:55 am -Waleed,Alqarni,WZA5083@psu.edu,ESC 460W 001,T R 8:00 am-9:55 am -Yunhao,An,YZA5096@psu.edu,CMPSC 483W 001,T R 8:00 am-9:55 am -Nelloe,Anonyuo,CMA5964@psu.edu,CMPSC 483W 002,T R 11:15 am-1:10 pm -Andrew,Barker,ADB5865@psu.edu,EE 403W 001,T R 8:00 am-9:55 am -Matthew,Brittain,MBB5896@psu.edu,EE 403W 002,T R 11:15 am-1:10 pm -Nicholas,Bromley,NEB5269@psu.edu,EE 403W 002,T R 11:15 am-1:10 pm -Summer,Brown,SRB5782@psu.edu,ME 440W 004,T R 11:15 am-1:10 pm -Maxton,Case,MSC5580@psu.edu,CMPSC 483W 002,T R 11:15 am-1:10 pm -Michael,Castell,MBC5674@psu.edu,CMPSC 483W 002,T R 11:15 am-1:10 pm -Po Jung,Chen,PJC5660@psu.edu,CMPSC 483W 002,T R 11:15 am-1:10 pm -Xiaowen,Chen,XFC5079@psu.edu,ME 440W 005,T R 11:15 am-1:10 pm -Kai-Ting,Chou,KBC5434@psu.edu,CMPEN 482W 001,T R 8:00 am-9:55 am -Samantha,Ciccarelli,SKC5759@psu.edu,BME 450W 002,T R 11:15 am-1:10 pm -Jonathon,Cogar,JJC5995@psu.edu,EE 403W 002,T R 11:15 am-1:10 pm -Joseph,Dignazio,JZD5717@psu.edu,IE 480W 001,T R 8:00 am-9:55 am -Isaiah,Dillard,IRD5026@psu.edu,ME 440W 005,T R 11:15 am-1:10 pm -Ethan,Duncan,EPD5199@psu.edu,MATSE 493W 001,T R 11:15 am-1:10 pm -Opemipo,Esan,OBE5029@psu.edu,CMPSC 483W 001,T R 8:00 am-9:55 am -Ian,Eviston,ITE5011@psu.edu,CMPSC 483W 002,T R 11:15 am-1:10 pm -Dominic,Fiorino,DAF5508@psu.edu,CMPEN 482W 001,T R 8:00 am-9:55 am -Yamiya,Fowlkes,YAF5014@psu.edu,IE 480W 001,T R 8:00 am-9:55 am -Yuan,Gao,YKG5108@psu.edu,CMPSC 483W 001,T R 8:00 am-9:55 am -Nicholas,Gehring,NAG5310@psu.edu,CMPSC 483W 002,T R 11:15 am-1:10 pm -Levi,Gerber,LXG5364@psu.edu,CMPSC 483W 002,T R 11:15 am-1:10 pm -Reggie,Gesicho,RRG5177@psu.edu,CMPSC 483W 001,T R 8:00 am-9:55 am -Tyler,Hackert,TRH39@psu.edu,EE 403W 001,T R 8:00 am-9:55 am -Eric,Han,EDH5204@psu.edu,CMPSC 483W 002,T R 11:15 am-1:10 pm -Isaac,Hess,IMH5115@psu.edu,ME 440W 005,T R 11:15 am-1:10 pm -Vivian,Ho,VKH5079@psu.edu,IE 480W 001,T R 8:00 am-9:55 am -Tao,Huang,TJH5996@psu.edu,CMPSC 483W 002,T R 11:15 am-1:10 pm -Nishit,Jain,NKJ5123@psu.edu,CMPSC 483W 002,T R 11:15 am-1:10 pm -Jiwoong,Jeon,JVJ5534@psu.edu,CMPSC 483W 001,T R 8:00 am-9:55 am -Lin,Jia,LZJ5174@psu.edu,CMPEN 482W 001,T R 8:00 am-9:55 am -Abdulaziz,Johar,AOJ5193@psu.edu,IE 480W 001,T R 8:00 am-9:55 am -Kevin,Jones,KXJ189@psu.edu,ME 440W 006,T R 11:15 am-1:10 pm -Lukas,Jones-Godshalk,LQJ5169@psu.edu,CMPSC 483W 001,T R 8:00 am-9:55 am -Samiksha,Kature,SSK5399@psu.edu,CMPSC 483W 002,T R 11:15 am-1:10 pm -Saleen,Khraishi,SFK5557@psu.edu,IE 480W 001,T R 8:00 am-9:55 am -Hyunjin,Kim,HBK5173@psu.edu,EE 403W 001,T R 8:00 am-9:55 am -Michael,Komara,MKK5631@psu.edu,EDSGN 460W 002,T R 11:15 am-1:10 pm -Richard,Kralik,RWK5343@psu.edu,CMPSC 483W 001,T R 8:00 am-9:55 am -Alexander,Lahr,ALL5843@psu.edu,CMPSC 483W 002,T R 11:15 am-1:10 pm -Kiernan,Lavelle,KZL5508@psu.edu,CMPSC 483W 002,T R 11:15 am-1:10 pm -Grace,Lavin,GCL5087@psu.edu,EE 403W 001,T R 8:00 am-9:55 am -Kwando,Lee,KZL5496@psu.edu,BME 450W 002,T R 11:15 am-1:10 pm -Peng,Li,PFL5148@psu.edu,CMPSC 483W 002,T R 11:15 am-1:10 pm -George,Lilja,GVL5165@psu.edu,IE 480W 001,T R 8:00 am-9:55 am -Yu Chieh,Lin,YKL5476@psu.edu,MATSE 493W 001,T R 11:15 am-1:10 pm -Yu Chieh,Lin,YKL5476@psu.edu,EDSGN 460W 002,T R 11:15 am-1:10 pm -Zimeng,Liu,ZXL5419@psu.edu,CMPSC 483W 002,T R 11:15 am-1:10 pm -Jacob,Madel,JDM6362@psu.edu,ME 440W 005,T R 11:15 am-1:10 pm -Alexander,Malaro,AMM8956@psu.edu,ESC 460W 001,T R 8:00 am-9:55 am -David,Masaka,DJM6809@psu.edu,CMPSC 483W 002,T R 11:15 am-1:10 pm -Dominic,Massi,DFM5588@psu.edu,EE 403W 001,T R 8:00 am-9:55 am -Mark,Massi,MVM6541@psu.edu,EE 403W 001,T R 8:00 am-9:55 am -Nicholas,McCabe,NJM5758@psu.edu,EE 403W 001,T R 8:00 am-9:55 am -Mitchell,McCoy,MLM6795@psu.edu,CMPSC 483W 002,T R 11:15 am-1:10 pm -Yiling,Mou,YKM5093@psu.edu,CMPSC 483W 002,T R 11:15 am-1:10 pm -Joseph,O'Brien,JPO5294@psu.edu,CMPEN 482W 001,T R 8:00 am-9:55 am -Seyilayo,Olagbami,OAO5125@psu.edu,CMPSC 483W 002,T R 11:15 am-1:10 pm -Alejandro,Pardinas,AKP5553@psu.edu,EDSGN 460W 001,T R 8:00 am-9:55 am -Shareef,Parkes,SMP6467@psu.edu,IE 480W 001,T R 8:00 am-9:55 am -William,Petersen,WQP5077@psu.edu,IE 480W 001,T R 8:00 am-9:55 am -Tobin,Philip,TKP5180@psu.edu,EDSGN 460W 001,T R 8:00 am-9:55 am -Christian,Piccioni,CUP285@psu.edu,IE 480W 001,T R 8:00 am-9:55 am -Timothy,Prioleau,TCP5172@psu.edu,ME 440W 006,T R 11:15 am-1:10 pm -Sicheng,Qian,SBQ5045@psu.edu,CMPSC 483W 002,T R 11:15 am-1:10 pm -Louay,Qubain,LRQ5013@psu.edu,IE 480W 001,T R 8:00 am-9:55 am -Kevin,Raneri,KMR6179@psu.edu,CMPSC 483W 002,T R 11:15 am-1:10 pm -Anurag,Rao,ABR5650@psu.edu,CMPSC 483W 002,T R 11:15 am-1:10 pm -Aditya,Ravi,AFR5499@psu.edu,IE 480W 001,T R 8:00 am-9:55 am -Tatiana,Redmond,TDR5225@psu.edu,IE 480W 001,T R 8:00 am-9:55 am -Logan,Rinehart,LJR5451@psu.edu,EE 403W 001,T R 8:00 am-9:55 am -Sebastian,Rodriguez Traconis,SPR5501@psu.edu,IE 480W 001,T R 8:00 am-9:55 am -Sebastian,Schweitzer,SHS5206@psu.edu,CMPEN 482W 001,T R 8:00 am-9:55 am -Itzel,Segura-Ortiz,IZS5145@psu.edu,IE 480W 001,T R 8:00 am-9:55 am -Sichen,Shao,SKS6427@psu.edu,CMPSC 483W 002,T R 11:15 am-1:10 pm -Quan,Shi,QKS5036@psu.edu,CMPSC 483W 002,T R 11:15 am-1:10 pm -William,Snyder,WXS207@psu.edu,ESC 460W 001,T R 8:00 am-9:55 am -Joel,Songer,JCS6366@psu.edu,IE 480W 001,T R 8:00 am-9:55 am -Brandon,Soriano,BJS6310@psu.edu,IE 480W 001,T R 8:00 am-9:55 am -Grant,Southard,GRS5327@psu.edu,EE 403W 002,T R 11:15 am-1:10 pm -Brady,St Pierre,BJS85@psu.edu,IE 480W 001,T R 8:00 am-9:55 am -Daniel,Stebbins,DRS5972@psu.edu,CMPSC 483W 001,T R 8:00 am-9:55 am -Tyler,Steigerwalt,TSS5380@psu.edu,EE 403W 002,T R 11:15 am-1:10 pm -Guangwen,Sun,GKS5260@psu.edu,CMPSC 483W 002,T R 11:15 am-1:10 pm -Kyle,Sweeney,KDS5667@psu.edu,ME 440W 004,T R 11:15 am-1:10 pm -Shirui,Tian,SJT5660@psu.edu,CMPSC 483W 002,T R 11:15 am-1:10 pm -Matthew,To,MQT5514@psu.edu,EDSGN 460W 003,T R 8:00 am-9:55 am -Andrew,Tran,ALT5457@psu.edu,CMPSC 483W 002,T R 11:15 am-1:10 pm -Walton,Tucker,WPT5062@psu.edu,ESC 460W 001,T R 8:00 am-9:55 am -Isaac,Tyger,IST5023@psu.edu,BME 450W 001,T R 8:00 am-9:55 am -John,Vance,JPV5208@psu.edu,ESC 460W 001,T R 8:00 am-9:55 am -Ethan,Vannoy,EWV5067@psu.edu,EE 403W 001,T R 8:00 am-9:55 am -Mark,Vernachio,MUV67@psu.edu,CMPSC 483W 002,T R 11:15 am-1:10 pm -Michelle,Vu,MAV5499@psu.edu,CMPSC 483W 001,T R 8:00 am-9:55 am -John,Walsh,JJW5989@psu.edu,CMPSC 483W 001,T R 8:00 am-9:55 am -How-Yeh,Wan,HQW5272@psu.edu,CMPSC 483W 002,T R 11:15 am-1:10 pm -Boyang,Wang,BZW5308@psu.edu,CMPEN 482W 001,T R 8:00 am-9:55 am -Kefan,Wang,KBW5410@psu.edu,CMPSC 483W 001,T R 8:00 am-9:55 am -Yiyang,Wang,YKW5222@psu.edu,IE 480W 001,T R 8:00 am-9:55 am -Joshua,Williams,JDW5916@psu.edu,EE 403W 002,T R 11:15 am-1:10 pm -Thomas Elliott,Worrall,TZW5376@psu.edu,CMPSC 483W 002,T R 11:15 am-1:10 pm -Haonan,Yan,HPY5108@psu.edu,CMPSC 483W 002,T R 11:15 am-1:10 pm -Christopher,Yang,CZY5197@psu.edu,EE 403W 001,T R 8:00 am-9:55 am -Kaiqi,Yang,KPY5080@psu.edu,CMPSC 483W 002,T R 11:15 am-1:10 pm -Jinzhuang,Ye,JQY5412@psu.edu,CMPSC 483W 002,T R 11:15 am-1:10 pm -Andrew,Yurick,AJY5231@psu.edu,CMPSC 483W 001,T R 8:00 am-9:55 am -Zachary,Zajacs,ZQZ5316@psu.edu,EE 403W 002,T R 11:15 am-1:10 pm -Daudi,Zein,DMZ5217@psu.edu,ME 440W 004,T R 11:15 am-1:10 pm -Difan,Zeng,DVZ5156@psu.edu,IE 480W 001,T R 8:00 am-9:55 am -Runcheng,Zhang,RZZ5157@psu.edu,CMPSC 483W 002,T R 11:15 am-1:10 pm -Maksim,Zingman,MFZ5130@psu.edu,EE 403W 001,T R 8:00 am-9:55 am +Elias,Abboud,EFA5156@psu.edu,EE�403W�001,T R 8:00 am-9:55 am +Alaa,Abdou,AAA383@psu.edu,BME�450W�001,T R 8:00 am-9:55 am +Ian,Abrams,IXA5134@psu.edu,CMPSC�483W�002,T R 11:15 am-1:10 pm +Talal,Abu Alzeinat,TZA5224@psu.edu,EDSGN�460W�001,T R 8:00 am-9:55 am +Noor,Al Jashmi,NQA5267@psu.edu,ME�440W�004,T R 11:15 am-1:10 pm +Sebastian,Alba Campos,SBA5411@psu.edu,IE�480W�001,T R 8:00 am-9:55 am +Omar,Ali,OQA5105@psu.edu,EE�403W�002,T R 11:15 am-1:10 pm +Jacob,Allen,JNA5232@psu.edu,ME�440W�006,T R 11:15 am-1:10 pm +Travis,Allen,TAA5321@psu.edu,IE�480W�001,T R 8:00 am-9:55 am +Waleed,Alqarni,WZA5083@psu.edu,ESC�460W�001,T R 8:00 am-9:55 am +Yunhao,An,YZA5096@psu.edu,CMPSC�483W�001,T R 8:00 am-9:55 am +Nelloe,Anonyuo,CMA5964@psu.edu,CMPSC�483W�002,T R 11:15 am-1:10 pm +Andrew,Barker,ADB5865@psu.edu,EE�403W�001,T R 8:00 am-9:55 am +Matthew,Brittain,MBB5896@psu.edu,EE�403W�002,T R 11:15 am-1:10 pm +Nicholas,Bromley,NEB5269@psu.edu,EE�403W�002,T R 11:15 am-1:10 pm +Summer,Brown,SRB5782@psu.edu,ME�440W�004,T R 11:15 am-1:10 pm +Maxton,Case,MSC5580@psu.edu,CMPSC�483W�002,T R 11:15 am-1:10 pm +Michael,Castell,MBC5674@psu.edu,CMPSC�483W�002,T R 11:15 am-1:10 pm +Po Jung,Chen,PJC5660@psu.edu,CMPSC�483W�002,T R 11:15 am-1:10 pm +Xiaowen,Chen,XFC5079@psu.edu,ME�440W�005,T R 11:15 am-1:10 pm +Kai-Ting,Chou,KBC5434@psu.edu,CMPEN�482W�001,T R 8:00 am-9:55 am +Samantha,Ciccarelli,SKC5759@psu.edu,BME�450W�002,T R 11:15 am-1:10 pm +Jonathon,Cogar,JJC5995@psu.edu,EE�403W�002,T R 11:15 am-1:10 pm +Joseph,Dignazio,JZD5717@psu.edu,IE�480W�001,T R 8:00 am-9:55 am +Isaiah,Dillard,IRD5026@psu.edu,ME�440W�005,T R 11:15 am-1:10 pm +Ethan,Duncan,EPD5199@psu.edu,MATSE�493W�001,T R 11:15 am-1:10 pm +Opemipo,Esan,OBE5029@psu.edu,CMPSC�483W�001,T R 8:00 am-9:55 am +Ian,Eviston,ITE5011@psu.edu,CMPSC�483W�002,T R 11:15 am-1:10 pm +Dominic,Fiorino,DAF5508@psu.edu,CMPEN�482W�001,T R 8:00 am-9:55 am +Yamiya,Fowlkes,YAF5014@psu.edu,IE�480W�001,T R 8:00 am-9:55 am +Yuan,Gao,YKG5108@psu.edu,CMPSC�483W�001,T R 8:00 am-9:55 am +Nicholas,Gehring,NAG5310@psu.edu,CMPSC�483W�002,T R 11:15 am-1:10 pm +Levi,Gerber,LXG5364@psu.edu,CMPSC�483W�002,T R 11:15 am-1:10 pm +Reggie,Gesicho,RRG5177@psu.edu,CMPSC�483W�001,T R 8:00 am-9:55 am +Tyler,Hackert,TRH39@psu.edu,EE�403W�001,T R 8:00 am-9:55 am +Eric,Han,EDH5204@psu.edu,CMPSC�483W�002,T R 11:15 am-1:10 pm +Isaac,Hess,IMH5115@psu.edu,ME�440W�005,T R 11:15 am-1:10 pm +Vivian,Ho,VKH5079@psu.edu,IE�480W�001,T R 8:00 am-9:55 am +Tao,Huang,TJH5996@psu.edu,CMPSC�483W�002,T R 11:15 am-1:10 pm +Nishit,Jain,NKJ5123@psu.edu,CMPSC�483W�002,T R 11:15 am-1:10 pm +Jiwoong,Jeon,JVJ5534@psu.edu,CMPSC�483W�001,T R 8:00 am-9:55 am +Lin,Jia,LZJ5174@psu.edu,CMPEN�482W�001,T R 8:00 am-9:55 am +Abdulaziz,Johar,AOJ5193@psu.edu,IE�480W�001,T R 8:00 am-9:55 am +Kevin,Jones,KXJ189@psu.edu,ME�440W�006,T R 11:15 am-1:10 pm +Lukas,Jones-Godshalk,LQJ5169@psu.edu,CMPSC�483W�001,T R 8:00 am-9:55 am +Samiksha,Kature,SSK5399@psu.edu,CMPSC�483W�002,T R 11:15 am-1:10 pm +Saleen,Khraishi,SFK5557@psu.edu,IE�480W�001,T R 8:00 am-9:55 am +Hyunjin,Kim,HBK5173@psu.edu,EE�403W�001,T R 8:00 am-9:55 am +Michael,Komara,MKK5631@psu.edu,EDSGN�460W�002,T R 11:15 am-1:10 pm +Richard,Kralik,RWK5343@psu.edu,CMPSC�483W�001,T R 8:00 am-9:55 am +Alexander,Lahr,ALL5843@psu.edu,CMPSC�483W�002,T R 11:15 am-1:10 pm +Kiernan,Lavelle,KZL5508@psu.edu,CMPSC�483W�002,T R 11:15 am-1:10 pm +Grace,Lavin,GCL5087@psu.edu,EE�403W�001,T R 8:00 am-9:55 am +Kwando,Lee,KZL5496@psu.edu,BME�450W�002,T R 11:15 am-1:10 pm +Peng,Li,PFL5148@psu.edu,CMPSC�483W�002,T R 11:15 am-1:10 pm +George,Lilja,GVL5165@psu.edu,IE�480W�001,T R 8:00 am-9:55 am +Yu Chieh,Lin,YKL5476@psu.edu,MATSE�493W�001,T R 11:15 am-1:10 pm +Yu Chieh,Lin,YKL5476@psu.edu,EDSGN�460W�002,T R 11:15 am-1:10 pm +Zimeng,Liu,ZXL5419@psu.edu,CMPSC�483W�002,T R 11:15 am-1:10 pm +Jacob,Madel,JDM6362@psu.edu,ME�440W�005,T R 11:15 am-1:10 pm +Alexander,Malaro,AMM8956@psu.edu,ESC�460W�001,T R 8:00 am-9:55 am +David,Masaka,DJM6809@psu.edu,CMPSC�483W�002,T R 11:15 am-1:10 pm +Dominic,Massi,DFM5588@psu.edu,EE�403W�001,T R 8:00 am-9:55 am +Mark,Massi,MVM6541@psu.edu,EE�403W�001,T R 8:00 am-9:55 am +Nicholas,McCabe,NJM5758@psu.edu,EE�403W�001,T R 8:00 am-9:55 am +Mitchell,McCoy,MLM6795@psu.edu,CMPSC�483W�002,T R 11:15 am-1:10 pm +Yiling,Mou,YKM5093@psu.edu,CMPSC�483W�002,T R 11:15 am-1:10 pm +Joseph,O'Brien,JPO5294@psu.edu,CMPEN�482W�001,T R 8:00 am-9:55 am +Seyilayo,Olagbami,OAO5125@psu.edu,CMPSC�483W�002,T R 11:15 am-1:10 pm +Alejandro,Pardinas,AKP5553@psu.edu,EDSGN�460W�001,T R 8:00 am-9:55 am +Shareef,Parkes,SMP6467@psu.edu,IE�480W�001,T R 8:00 am-9:55 am +William,Petersen,WQP5077@psu.edu,IE�480W�001,T R 8:00 am-9:55 am +Tobin,Philip,TKP5180@psu.edu,EDSGN�460W�001,T R 8:00 am-9:55 am +Christian,Piccioni,CUP285@psu.edu,IE�480W�001,T R 8:00 am-9:55 am +Timothy,Prioleau,TCP5172@psu.edu,ME�440W�006,T R 11:15 am-1:10 pm +Sicheng,Qian,SBQ5045@psu.edu,CMPSC�483W�002,T R 11:15 am-1:10 pm +Louay,Qubain,LRQ5013@psu.edu,IE�480W�001,T R 8:00 am-9:55 am +Kevin,Raneri,KMR6179@psu.edu,CMPSC�483W�002,T R 11:15 am-1:10 pm +Anurag,Rao,ABR5650@psu.edu,CMPSC�483W�002,T R 11:15 am-1:10 pm +Aditya,Ravi,AFR5499@psu.edu,IE�480W�001,T R 8:00 am-9:55 am +Tatiana,Redmond,TDR5225@psu.edu,IE�480W�001,T R 8:00 am-9:55 am +Logan,Rinehart,LJR5451@psu.edu,EE�403W�001,T R 8:00 am-9:55 am +Sebastian,Rodriguez Traconis,SPR5501@psu.edu,IE�480W�001,T R 8:00 am-9:55 am +Sebastian,Schweitzer,SHS5206@psu.edu,CMPEN�482W�001,T R 8:00 am-9:55 am +Itzel,Segura-Ortiz,IZS5145@psu.edu,IE�480W�001,T R 8:00 am-9:55 am +Sichen,Shao,SKS6427@psu.edu,CMPSC�483W�002,T R 11:15 am-1:10 pm +Quan,Shi,QKS5036@psu.edu,CMPSC�483W�002,T R 11:15 am-1:10 pm +William,Snyder,WXS207@psu.edu,ESC�460W�001,T R 8:00 am-9:55 am +Joel,Songer,JCS6366@psu.edu,IE�480W�001,T R 8:00 am-9:55 am +Brandon,Soriano,BJS6310@psu.edu,IE�480W�001,T R 8:00 am-9:55 am +Grant,Southard,GRS5327@psu.edu,EE�403W�002,T R 11:15 am-1:10 pm +Brady,St Pierre,BJS85@psu.edu,IE�480W�001,T R 8:00 am-9:55 am +Daniel,Stebbins,DRS5972@psu.edu,CMPSC�483W�001,T R 8:00 am-9:55 am +Tyler,Steigerwalt,TSS5380@psu.edu,EE�403W�002,T R 11:15 am-1:10 pm +Guangwen,Sun,GKS5260@psu.edu,CMPSC�483W�002,T R 11:15 am-1:10 pm +Kyle,Sweeney,KDS5667@psu.edu,ME�440W�004,T R 11:15 am-1:10 pm +Shirui,Tian,SJT5660@psu.edu,CMPSC�483W�002,T R 11:15 am-1:10 pm +Matthew,To,MQT5514@psu.edu,EDSGN�460W�003,T R 8:00 am-9:55 am +Andrew,Tran,ALT5457@psu.edu,CMPSC�483W�002,T R 11:15 am-1:10 pm +Walton,Tucker,WPT5062@psu.edu,ESC�460W�001,T R 8:00 am-9:55 am +Isaac,Tyger,IST5023@psu.edu,BME�450W�001,T R 8:00 am-9:55 am +John,Vance,JPV5208@psu.edu,ESC�460W�001,T R 8:00 am-9:55 am +Ethan,Vannoy,EWV5067@psu.edu,EE�403W�001,T R 8:00 am-9:55 am +Mark,Vernachio,MUV67@psu.edu,CMPSC�483W�002,T R 11:15 am-1:10 pm +Michelle,Vu,MAV5499@psu.edu,CMPSC�483W�001,T R 8:00 am-9:55 am +John,Walsh,JJW5989@psu.edu,CMPSC�483W�001,T R 8:00 am-9:55 am +How-Yeh,Wan,HQW5272@psu.edu,CMPSC�483W�002,T R 11:15 am-1:10 pm +Boyang,Wang,BZW5308@psu.edu,CMPEN�482W�001,T R 8:00 am-9:55 am +Kefan,Wang,KBW5410@psu.edu,CMPSC�483W�001,T R 8:00 am-9:55 am +Yiyang,Wang,YKW5222@psu.edu,IE�480W�001,T R 8:00 am-9:55 am +Joshua,Williams,JDW5916@psu.edu,EE�403W�002,T R 11:15 am-1:10 pm +Thomas Elliott,Worrall,TZW5376@psu.edu,CMPSC�483W�002,T R 11:15 am-1:10 pm +Haonan,Yan,HPY5108@psu.edu,CMPSC�483W�002,T R 11:15 am-1:10 pm +Christopher,Yang,CZY5197@psu.edu,EE�403W�001,T R 8:00 am-9:55 am +Kaiqi,Yang,KPY5080@psu.edu,CMPSC�483W�002,T R 11:15 am-1:10 pm +Jinzhuang,Ye,JQY5412@psu.edu,CMPSC�483W�002,T R 11:15 am-1:10 pm +Andrew,Yurick,AJY5231@psu.edu,CMPSC�483W�001,T R 8:00 am-9:55 am +Zachary,Zajacs,ZQZ5316@psu.edu,EE�403W�002,T R 11:15 am-1:10 pm +Daudi,Zein,DMZ5217@psu.edu,ME�440W�004,T R 11:15 am-1:10 pm +Difan,Zeng,DVZ5156@psu.edu,IE�480W�001,T R 8:00 am-9:55 am +Runcheng,Zhang,RZZ5157@psu.edu,CMPSC�483W�002,T R 11:15 am-1:10 pm +Maksim,Zingman,MFZ5130@psu.edu,EE�403W�001,T R 8:00 am-9:55 am \ No newline at end of file diff --git a/backend.js b/backend.js deleted file mode 100644 index b4de935a1..000000000 --- a/backend.js +++ /dev/null @@ -1,553 +0,0 @@ -const { toHaveErrorMessage } = require('@testing-library/jest-dom/dist/matchers'); -let csv = require('csv-parse'); -let createCsvWriter = require('csv-writer').createObjectCsvWriter; -let fs = require('fs'); -let mySQL = require('mysql') -let SQL = require('sql-template-strings'); - - -// Edit with your MySQL Password: -const mySQLPassword = 'password' - -const preferencesCSV = 'studentsFinal.csv'; -const projectsCSV = 'projectsFinal.csv'; -const studentsCSV = 'studentAssignments.csv'; -const studentsNoSurveyCSV = 'Students Without Prefs.csv'; - -const majors = ['BME', 'CMPEN', 'CMPSC', 'DS', 'ED', 'EE', 'EGEE', 'ESC', 'IE', 'MATSE', 'ME']; - -let preferences; -let projects; -let students; -let studentsNoSurvey; - -// MySQL connection objects. -const mySQLConnection = mySQL.createConnection({ - host: 'localhost', - user: 'root', - password: mySQLPassword -}); - -const databaseName = 'capstone' -const databaseConnection = mySQL.createConnection({ - host: 'localhost', - user: 'root', - password: mySQLPassword, - database: databaseName -}); - - -// Main code. -databaseSetup(function () { - readCSVs(function () { - // Test Data. - addStudent('drs5972', 'Dan', 'Stebbins', 'CMPSC', 1, 1, 0, function() {}); - addProject('XKCD', 'PSU', 'Test Project', 'CMPSC', 'EE', 'ME; CMPEN', 1, 0, '4 AM', 'CMPSC -2^10', 1, function() {}); - addPreference('XKCD', 'drs5972', '8 AM', '10 AM', '4 AM', 2, 'Please no anything but this project I hate it.', function() {}); - addAssignment('XKCD', 'drs5972', function() {}); - writeAssignmentsCSV(function() {}); - // loadTables(function () { }); - }); -}); - - -// ==================================== DATABASE SETUP ==================================== - -function databaseSetup(callback) { - connectToMySQL(function () { - createDatabase(function () { - connectToDatabase(function () { - createTables(function () { - callback(); - }); - }); - }); - }); -} - -function connectToMySQL(callback) { - mySQLConnection.connect(function (err) { - if (err) throw err; - console.log('Connected to MySQL!'); - callback(); - }); -} - -function createDatabase(callback) { - mySQLConnection.query(`CREATE DATABASE IF NOT EXISTS ${databaseName}`, function (err, result) { - if (err) throw err; - console.log('Database created!'); - callback(); - }); -} - -function connectToDatabase(callback) { - databaseConnection.connect(function (err) { - if (err) throw err; - console.log('Connected to the database!'); - callback(); - }); -} - -// Really does delete all data, be careful. -function dropDatabase(callback) { - databaseConnection.query(`DROP DATABASE ${databaseName}`, function (err, result) { - if (err) throw err; - console.log('Database dropped!'); - callback(); - }); -} - - -// ==================================== TABLE CREATION ==================================== - -function createTables(callback) { - createAssignmentsTable(function () { - createPreferencesTable(function () { - createProjectsTable(function () { - createStudentsTable(function () { - callback(); - }); - }); - }); - }); -} - -function createAssignmentsTable(callback) { - const query = (SQL `CREATE TABLE IF NOT EXISTS assignments ( - project_id VARCHAR(64), - student_id VARCHAR(64))`); - databaseConnection.query(query, function (err, result) { - if (err) throw err; - console.log('Assignments table created!'); - callback(); - }); -} - -function createPreferencesTable(callback) { - const query = (SQL `CREATE TABLE IF NOT EXISTS preferences ( - project_id VARCHAR(64), - student_id VARCHAR(64), - time_a VARCHAR(64), - time_b VARCHAR(64), - time_c VARCHAR(64), - preference TINYINT(1), - comment TEXT)`); - databaseConnection.query(query, function (err, result) { - if (err) throw err; - console.log('Preferences table created!'); - callback(); - }); -} - -function createProjectsTable(callback) { - const query = (SQL `CREATE TABLE IF NOT EXISTS projects ( - id VARCHAR(64), - company VARCHAR(255), - title VARCHAR(255), - primary_major VARCHAR(16), - secondary_major VARCHAR(16), - tertiary_majors VARCHAR(255), - confidentiality TINYINT(1), - ip TINYINT(1), - course_time VARCHAR(64), - course_name VARCHAR(64), - prototype TINYINT(1))`); - databaseConnection.query(query, function (err, result) { - if (err) throw err; - console.log('Projects table created!'); - callback(); - }); -} - -function createStudentsTable(callback) { - const query = (SQL `CREATE TABLE IF NOT EXISTS students ( - id VARCHAR(64), - first_name VARCHAR(255), - last_name VARCHAR(255), - major VARCHAR(16), - nda TINYINT(1), - ip TINYINT(1), - on_campus TINYINT(1))`); - databaseConnection.query(query, function (err, result) { - if (err) throw err; - console.log('Students table created!'); - callback(); - }); -} - - -// ==================================== CSV READING AND TABLE LOADING ==================================== - -function readCSVs(callback) { - readCSV(preferencesCSV, csv.parse({ delimiter: ',' }, function (err, data) { preferences = data.slice(1, data.length) }), function () { - readCSV(projectsCSV, csv.parse({ delimiter: ',' }, function (err, data) { projects = data.slice(1, data.length) }), function () { - readCSV(studentsCSV, csv.parse({ delimiter: ',' }, function (err, data) { students = data.slice(1, data.length) }), function () { - readCSV(studentsNoSurveyCSV, csv.parse({ delimiter: ',' }, function (err, data) { studentsNoSurvey = data.slice(1, data.length) }), function () { - callback(); - }); - }); - }); - }); -} - -function readCSV(file, parser, callback) { - fs.createReadStream(file).pipe(parser).on('error', function (err) { console.log(err) }).on('close', callback); -} - -function loadTables(callback) { - loadAssignmentsTable(function () { - loadPreferencesTable(function () { - loadProjectsTable(function () { - loadStudentsTable(function () { - callback(); - }); - }); - }); - }); -} - -async function loadAssignmentsTable(callback) { - for (const student of students) { - // studentid, projectid - await addAssignment(student[8], student[1], function () { }); - } - callback(); -} - -async function loadPreferencesTable(callback) { - for (const preference of preferences) { - // projectID, studentID, timeA, timeB, timeC, preference, comment. - await addPreference(preference[1], preference[9], preference[2], preference[3], preference[4], preference[5], preference[6], function () { }); - } - console.log("Preference Table Loaded!"); - callback(); -} - -async function loadProjectsTable(callback) { - for (const project of projects) { - // Getting primary, secondary, and tertiary majors from 1-2-3 format - let primary = ""; - let secondary = ""; - let tertiary = ""; - for (let j = 0; j < majors.length; j++) { - if (project[j + 3] == 1) primary = majors[j]; - else if (project[j + 3] == 2) secondary = majors[j]; - else if (project[j + 3] == 3) tertiary += majors[j] + ";"; - } - - // id, company, title, primary, secondary, tertiary, confidentiality, ip, courseTime, courseName, prototype. - await addProject(project[0], project[1], project[2], primary, secondary, tertiary, project[14], project[15], project[16], project[17], project[18], function () { }); - } - console.log("Projects Table Loaded!"); - callback(); -} - -async function loadStudentsTable(callback) { - for (const student of students) { - // id, first, last, major, nda, ip, onCampus. - await addStudent(student[8], student[10], student[9], student[0], student[6], student[7], (student[11] == "Yes") ? 1 : 0, function () { }); - - } - for (const student of studentsNoSurvey) { - // Assume NULL for major and 0 for NDA, IP, and onCampus until further notice. - await addStudent(student[2].substring(0, student[2].indexOf("@")), student[0], student[1], '', 0, 0, 0, function () { }); - } - callback(); -} - -// ==================================== CSV WRITING FROM TABLES ==================================== - -// I'm assuming the other CSVs don't need to be written to, but they can be added later if they do. -async function writeAssignmentsCSV(callback) { - const csvWriter = createCsvWriter({ - path: 'tempStudentAssignments.csv', - header: [ - {id: 'major', title: 'Major'}, - {id: 'projectID', title: 'ProjectID'}, - {id: 'timeA', title: 'TimeA'}, - {id: 'timeB', title: 'TimeB'}, - {id: 'timeC', title: 'TimeC'}, - {id: 'comments', title: 'Comments'}, - {id: 'nda', title: 'Student_NDA'}, - {id: 'ip', title: 'Student_IP'}, - {id: 'studentID', title: 'campus_id'}, - {id: 'lastName', title: 'last_name'}, - {id: 'firstName', title: 'first_name'}, - {id: 'onCampus', title: 'OnCampus'}, - ] - }); - - const data = [ - // { - // name: 'John', - // surname: 'Snow', - // age: 26, - // gender: 'M' - // }, { - // name: 'Clair', - // surname: 'White', - // age: 33, - // gender: 'F', - // }, { - // name: 'Fancy', - // surname: 'Brown', - // age: 78, - // gender: 'F' - // } - ]; - var assignments = await getAssignments(); - for (const assignment of assignments) { - - } - console.log(temp) - callback(); -} - - -// ==================================== QUERIES ==================================== - -// Gets all assignments. -function getAssignments() { - return new Promise(function (resolve, reject) { - const query = (SQL `SELECT * FROM assignments`); - databaseConnection.query(query, function (err, result) { - if (err) throw err; - else { - console.log('Assignments Retrieved!'); - resolve(result); - } - }); - }); -} - -// Adding rows to tables. -function addAssignment(studentID, projectID) { - return new Promise(function (resolve, reject) { - const query = (SQL `INSERT INTO assignments - (student_id, project_id) - VALUES (${studentID}, ${projectID})`); - databaseConnection.query(query, function (err, result) { - if (err) throw err; - else { - console.log('Assignment added!'); - resolve(); - } - }); - }); -} - -//can we note when it finishes adding all preferences or something -function addPreference(projectID, studentID, timeA, timeB, timeC, preference, comment) { - return new Promise(function (resolve, reject) { - const query = (SQL `INSERT INTO preferences - (project_id, student_id, time_a, time_b, time_c, preference, comment) - VALUES (${projectID}, ${studentID}, ${timeA}, ${timeB}, ${timeC}, ${preference}, ${comment})`); - databaseConnection.query(query, function (err, result) { - if (err) reject(err); - else { - console.log('Preference added!'); - resolve(); - } - }); - }); -} - -function addProject(id, company, title, primary, secondary, tertiary, confidentiality, ip, courseTime, courseName, prototype) { - return new Promise(function (resolve, reject) { - const query = (SQL `INSERT INTO projects - (id, company, title, primary_major, secondary_major, tertiary_majors, confidentiality, ip, course_time, course_name, prototype) - VALUES (${id}, ${company}, ${title}, ${primary}, ${secondary}, ${tertiary}, ${confidentiality}, ${ip}, ${courseTime}, ${courseName}, ${prototype})`); - databaseConnection.query(query, function (err, result) { - if (err) reject(err); - else { - console.log('Project added!'); - resolve(); - } - }); - }); -} - -function addStudent(id, first, last, major, nda, ip, onCampus, callback) { - return new Promise(function (resolve, reject) { - const query = (SQL `INSERT INTO students - (id, first_name, last_name, major, nda, ip, on_campus) - VALUES (${id}, ${first}, ${last}, NULLIF(${major}, ''), ${nda}, ${ip}, ${onCampus})`); - databaseConnection.query(query, function (err, result) { - if (err) reject(err); - else { - console.log('Student added!'); - resolve(); - } - }); - }); -} - - -// ==================================== QUERY FUNCTIONS ==================================== - -// Given a number, return all the teams that have greater than that number of students. -//Maybe also get it to display the count -function getTeamsAbove(n, callback) { - // Put the query in the ``. - const query = (SQL `SELECT projects.title, projects.company, projects.id - FROM projects - INNER JOIN assignments - ON projects.id = assignments.project_id - GROUP BY assignments.project_id - HAVING COUNT(assignments.project_id) >= ${n}`); - databaseConnection.query(query, function (err, result) { - if (err) throw err; - return result; - callback(); - }); -} - -// Given a number, return all the teams that have less than that number of students. -function getTeamsBelow(n, callback) { - // Put the query in the ``. - const query = (SQL `SELECT projects.title, projects.company, projects.id - FROM projects - INNER JOIN assignments - ON projects.id = assignments.project_id - GROUP BY assignments.project_id - HAVING COUNT(assignments.project_id) <= ${n}`); - databaseConnection.query(query, function (err, result) { - if (err) throw err; - return result; - callback(); - }); -} - -//Displays the number of students on a team given a project ID -function getTeamCount(projectID, callback) { - // Put the query in the ``. - const query = (SQL `SELECT COUNT(assignments.project_id) - FROM assignments - WHERE assignments.project_id = ${projectID} - GROUP BY assignments.project_id`) - databaseConnection.query(query, function (err, result) { - if (err) throw err; - return result; - callback(); - }); -} - -// Given a project and a major, return how many students of that major are on that project. -function getMajorCount(projectID, major, callback) { - // Put the query in the ``. - const query = (SQL `SELECT COUNT(s.id) - FROM assignments AS a - INNER JOIN students AS s - ON a.student_id = s.id - WHERE a.project_id = ${projectID} AND s.major = ${major}`); - databaseConnection.query(query, function (err, result) { - if (err) throw err; - return result; - callback(); - }); -} - -// Given a project, return whether or not it has the right amount of primary, secondary, and tertiary majors. -function holdsMajorInequality(projectID, callback) { - // Put the query in the ``. Remember to use getMajorCount(). - const query = (SQL `SELECT `); - databaseConnection.query(query, function (err, result) { - if (err) throw err; - return result; - callback(); - }); -} - -// Given a student, return a list of other projects they could be moved to according to their preferences and major. -function getAlternateProjects(studentID, callback) { - // Put the query in the ``. - const query = (SQL ``); - databaseConnection.query(query, function (err, result) { - if (err) throw err; - return result; - callback(); - }); -} - -// Given a project, return all display information for that project. -function getProjectData(projectID, callback) { - // Put the query in the ``. - const query = (SQL `SELECT p.company, p.title, - p.primary_major, p.secondary_major,p.tertiary_majors - p.confidentiality, p.ip, p.course_time, - p.couse_name, p.prototype - FROM projects AS p - WHERE p.id = ${projectID}`); - databaseConnection.query(query, function (err, result) { - if (err) throw err; - return result; - callback(); - }); -} - -// Given a student, return all display information for that student. -//want to add current project -function getStudentData(studentID, callback) { - // Put the query in the ``. - const query = (SQL `SELECT s.first_name, s.last_name, s.major, - s.nda, s.ip, s.on_campus, - p.company, p.title - FROM assignments AS a - INNER JOIN students AS s - ON a.student_id = s.id - INNER JOIN projects AS p - ON a.project_id = p.id - WHERE a.student_id = ${studentID}`); - databaseConnection.query(query, function (err, result) { - if (err) throw err; - return result; - callback(); - }); -} - -// Given a project, return all display information for all of it's students. -function getStudentsInProject(projectID, callback) { - // Put the query in the ``. - const query = (SQL `SELECT `); - databaseConnection.query(query, function (err, result) { - if (err) throw err; - // Do something with the result. - callback(); - }); -} - -// Given a student and a project, update the student’s entry in the assignments table to move them to that project. -function updateAssignment(studentID, projectID, callback) { - // Put the query in the ``. - const query = (SQL `UPDATE assigments - SET project_id = ${projectID} - WHERE student_id = $${studentID}`); - databaseConnection.query(query, function (err, result) { - if (err) throw err; - // Do something with the result. - callback(); - }); -} - -function getMajorDistribution(callback) { - // Put the query in the ``. - const query = (SQL `SELECT - s.major, COUNT(*) - FROM students AS s - GROUP BY s.major;`); - databaseConnection.query(query, function (err, result) { - if (err) throw err; - // Do something with the result. - callback(); - }); -} - -function getCompletedPercent(callback){ - const query = (SQL ``); - databaseConnection.query(query, function (err, result) { - if (err) throw err; - // Do something with the result. - callback(); - }); -} \ No newline at end of file diff --git a/backend/builddb.js b/backend/builddb.js new file mode 100644 index 000000000..244ebd017 --- /dev/null +++ b/backend/builddb.js @@ -0,0 +1,415 @@ +const { + addAssignment, + addPreference, + addProject, + addStudent, + mySQLConnection, + databaseConnection, + connectToMySQL, + connectToDatabase, + databaseName, + getAssignmentsQuery, + getStudentDataForWriteQuery, + getCommentQuery, +} = require("./db.js"); +Error.stackTraceLimit = Infinity; + +const createCsvWriter = require("csv-writer").createObjectCsvWriter; +const csv = require("csv-parse"); +const fs = require("fs"); +const SQL = require("sql-template-strings"); +const { exit } = require("process"); + +const preferencesCSV = "studentsFinal.csv"; +const projectsCSV = "projectsFinal.csv"; +const studentsCSV = "studentAssignments.csv"; +const studentsNoSurveyCSV = "Students Without Prefs.csv"; + +const majors = [ + "BME", + "CMPEN", + "CMPSC", + "DS", + "ED", + "EE", + "EGEE", + "ESC", + "IE", + "MATSE", + "ME", +]; + +async function loadAssignmentsTable(callback) { + console.log("loadAssigmentsTable()"); + for (const student of students) { + // studentid, projectid + await addAssignment(student[8], student[1], function () {}); + } + for (const student of studentsNoSurvey) { + await addAssignment( + student[2].substring(0, student[2].indexOf("@")), + null, + function () {} + ); + } + callback(); +} + +async function loadPreferencesTable(callback) { + console.log("loadPreferencesTable()"); + for (const preference of preferences) { + // projectID, studentID, timeA, timeB, timeC, preference, comment. + await addPreference( + preference[1], + preference[9], + preference[2], + preference[3], + preference[4], + preference[5], + preference[6], + function () {} + ); + } + console.log("Preference Table Loaded!"); + callback(); +} + +async function loadProjectsTable(callback) { + console.log("loadProjectsTable()"); + for (const project of projects) { + // Getting primary, secondary, and tertiary majors from 1-2-3 format + let primary = ""; + let secondary = ""; + let tertiary = ""; + for (let j = 0; j < majors.length; j++) { + if (project[j + 3] == 1) primary = majors[j]; + else if (project[j + 3] == 2) secondary = majors[j]; + else if (project[j + 3] == 3) tertiary += majors[j] + ";"; + } + + // id, company, title, primary, secondary, tertiary, confidentiality, ip, courseTime, courseName, prototype. + await addProject( + project[0], + project[1], + project[2], + primary, + secondary, + tertiary, + project[14], + project[15], + project[16], + project[17], + project[18], + function () {} + ); + } + console.log("Projects Table Loaded!"); + callback(); +} + +async function loadStudentsTable(callback) { + console.log("loadStudentsTable()"); + for (const student of students) { + // id, first, last, major, nda, ip, onCampus. + await addStudent( + student[8], + student[10], + student[9], + student[0], + student[6], + student[7], + student[11] == "Yes" ? 1 : 0, + function () {} + ); + } + for (const student of studentsNoSurvey) { + // Assume NULL for major and 0 for NDA, IP, and onCampus until further notice. + await addStudent( + student[2].substring(0, student[2].indexOf("@")), + student[0], + student[1], + "", + 0, + 0, + 0, + function () {} + ); + } + callback(); +} + +function loadTables(callback) { + loadAssignmentsTable(function () { + loadPreferencesTable(function () { + loadProjectsTable(function () { + loadStudentsTable(function () { + callback(); + }); + }); + }); + }); +} + +function createAssignmentsTable(callback) { + console.log("createAssignmentsTable()"); + const query = SQL`CREATE TABLE IF NOT EXISTS assignments ( + project_id VARCHAR(64), + student_id VARCHAR(64))`; + databaseConnection.query(query, function (err, result) { + if (err) throw err; + console.log("Assignments table created!"); + callback(); + }); +} + +function createPreferencesTable(callback) { + console.log("createPreferencesTable()"); + const query = SQL`CREATE TABLE IF NOT EXISTS preferences ( + project_id VARCHAR(64), + student_id VARCHAR(64), + time_a VARCHAR(64), + time_b VARCHAR(64), + time_c VARCHAR(64), + preference TINYINT(1), + comment TEXT)`; + databaseConnection.query(query, function (err, result) { + if (err) throw err; + console.log("Preferences table created!"); + callback(); + }); +} + +function createProjectsTable(callback) { + console.log("createProjectsTable()"); + const query = SQL`CREATE TABLE IF NOT EXISTS projects ( + id VARCHAR(64), + company VARCHAR(255), + title VARCHAR(255), + primary_major VARCHAR(16), + secondary_major VARCHAR(16), + tertiary_majors VARCHAR(255), + confidentiality TINYINT(1), + ip TINYINT(1), + course_time VARCHAR(64), + course_name VARCHAR(64), + prototype TINYINT(1))`; + databaseConnection.query(query, function (err, result) { + if (err) throw err; + console.log("Projects table created!"); + callback(); + }); +} + +function createStudentsTable(callback) { + console.log("createStudentsTable()"); + const query = SQL`CREATE TABLE IF NOT EXISTS students ( + id VARCHAR(64), + first_name VARCHAR(255), + last_name VARCHAR(255), + major VARCHAR(16), + nda TINYINT(1), + ip TINYINT(1), + on_campus TINYINT(1))`; + databaseConnection.query(query, function (err, result) { + if (err) throw err; + console.log("Students table created!"); + callback(); + }); +} + +function databaseSetup(callback) { + console.log("databaseSetup()"); + connectToMySQL(() => { + createDatabase(() => { + connectToDatabase(() => { + createTables(() => { + callback(); + }); + }); + }); + }); +} + +function readCSVFile(file, parser, callback) { + console.log("readCSVFile()"); + fs.createReadStream(file) + .pipe(parser) + .on("error", function (err) { + console.log(err); + }) + .on("close", callback); +} + +function readCSVs(callback) { + console.log("readCSVs()"); + readCSVFile( + preferencesCSV, + csv.parse({ delimiter: "," }, function (err, data) { + preferences = data.slice(1, data.length); + }), + function () { + readCSVFile( + projectsCSV, + csv.parse({ delimiter: "," }, function (err, data) { + projects = data.slice(1, data.length); + }), + function () { + readCSVFile( + studentsCSV, + csv.parse({ delimiter: "," }, function (err, data) { + students = data.slice(1, data.length); + }), + function () { + readCSVFile( + studentsNoSurveyCSV, + csv.parse({ delimiter: "," }, function (err, data) { + studentsNoSurvey = data.slice(1, data.length); + }), + function () { + callback(); + } + ); + } + ); + } + ); + } + ); +} + +function createTables(callback) { + console.log("createTables()"); + createAssignmentsTable(function () { + createPreferencesTable(function () { + createProjectsTable(function () { + createStudentsTable(function () { + callback(); + }); + }); + }); + }); +} + +function createDatabase(callback) { + console.log("createDatabase()"); + mySQLConnection.query( + `CREATE DATABASE IF NOT EXISTS ${databaseName}`, + function (err, result) { + //if (err) throw err; + console.log("Database created!"); + callback(); + } + ); +} + +const getAssignments = () => { + console.log("getAssignments()"); + return new Promise((resolve, reject) => { + databaseConnection.query(getAssignmentsQuery(), (err, result) => { + if (err) reject(err); + else { + console.log("Assignments Retrieved!"); + resolve(result); + } + }); + }); +}; + +const getStudentDataForWrite = (studentID) => { + console.log("getStudentDataForWrite()"); + return new Promise((resolve, reject) => { + databaseConnection.query( + getStudentDataForWriteQuery(studentID), + (err, result) => { + if (err) { + console.log("Error!"); + reject(err); + } else { + console.log("Student Data Retrieved!"); + resolve(result); + } + } + ); + }); +}; + +const getComment = (studentID, projectID) => { + console.log("getComment()"); + return new Promise((resolve, reject) => { + databaseConnection.query( + getCommentQuery(studentID, projectID), + (err, result) => { + if (err) reject(err); + else { + console.log("Comment Retrieved!"); + resolve(result); + } + } + ); + }); +}; + +// I'm assuming the other CSVs don't need to be written to, but they can be added later if they do. +async function writeAssignmentsCSV(callback) { + console.log("writeAssignmentsCSV()"); + const csvWriter = createCsvWriter({ + path: "tempStudentAssignments.csv", + header: [ + { id: "major", title: "Major" }, + { id: "projectID", title: "ProjectID" }, + { id: "timeA", title: "TimeA" }, + { id: "timeB", title: "TimeB" }, + { id: "timeC", title: "TimeC" }, + { id: "comment", title: "Comments" }, + { id: "nda", title: "Student_NDA" }, + { id: "ip", title: "Student_IP" }, + { id: "studentID", title: "campus_id" }, + { id: "lastName", title: "last_name" }, + { id: "firstName", title: "first_name" }, + { id: "onCampus", title: "OnCampus" }, + ], + }); + + let data = []; + let assignments = await getAssignments(); + for (const assignment of assignments) { + let row = {}; + row["studentID"] = assignment.student_id; + row["projectID"] = assignment.project_id; + + console.log(assignment.student_id); + const studentList = await getStudentDataForWrite(assignment.student_id); + student = studentList[0]; + + row["firstName"] = student.first_name; + row["lastName"] = student.last_name; + row["major"] = student.major; + row["nda"] = student.nda; + row["ip"] = student.ip; + row["onCampus"] = student.on_campus == 1 ? "Yes" : "No"; + + const commentList = await getComment( + assignment.student_id, + assignment.project_id + ); + + const comment = commentList[0]; + row["comment"] = comment.comment; + + data.push(row); + } + + await csvWriter.writeRecords(data); + console.log("CSV Written!"); + exit(0); +} + +// Main code. +databaseSetup(() => { + readCSVs(() => { + loadTables(() => { + console.log("Done!"); + exit(0); + }); + }); +}); diff --git a/backend/db.js b/backend/db.js new file mode 100644 index 000000000..f7bce9286 --- /dev/null +++ b/backend/db.js @@ -0,0 +1,190 @@ +const mySQL = require("mysql2"); +const SQL = require("sql-template-strings"); + +// Edit with your MySQL Password: +const mySQLPassword = "password"; + +// MySQL connection objects. +const mySQLConnection = mySQL.createConnection({ + host: "localhost", + user: "root", + password: mySQLPassword, +}); + +const databaseName = "capstone"; +const databaseConnection = mySQL.createConnection({ + host: "localhost", + user: "root", + password: mySQLPassword, + database: databaseName, +}); + +function connectToMySQL(callback) { + mySQLConnection.connect(function (err) { + //if (err) throw err; + console.log("Connected to MySQL!"); + callback(); + }); +} + +function connectToDatabase(callback) { + databaseConnection.connect(function (err) { + //if (err) throw err; + callback(); + }); +} + +// Adding rows to tables. +function addAssignment(studentID, projectID) { + return new Promise(function (resolve, reject) { + const query = SQL`INSERT INTO assignments + (student_id, project_id) + VALUES (${studentID}, ${projectID})`; + databaseConnection.query(query, function (err, result) { + //if (err) throw err; + + console.log("Assignment added!"); + resolve(); + }); + }); +} + +//can we note when it finishes adding all preferences or something +function addPreference( + projectID, + studentID, + timeA, + timeB, + timeC, + preference, + comment +) { + return new Promise(function (resolve, reject) { + const query = SQL`INSERT INTO preferences + (project_id, student_id, time_a, time_b, time_c, preference, comment) + VALUES (${projectID}, ${studentID}, ${timeA}, ${timeB}, ${timeC}, ${preference}, ${comment})`; + databaseConnection.query(query, function (err, result) { + if (err) reject(err); + else { + console.log("Preference added!"); + resolve(); + } + }); + }); +} + +function addProject( + id, + company, + title, + primary, + secondary, + tertiary, + confidentiality, + ip, + courseTime, + courseName, + prototype +) { + return new Promise(function (resolve, reject) { + const query = SQL`INSERT INTO projects + (id, company, title, primary_major, secondary_major, tertiary_majors, confidentiality, ip, course_time, course_name, prototype) + VALUES (${id}, ${company}, ${title}, ${primary}, ${secondary}, ${tertiary}, ${confidentiality}, ${ip}, ${courseTime}, ${courseName}, ${prototype})`; + databaseConnection.query(query, function (err, result) { + if (err) reject(err); + else { + console.log("Project added!"); + resolve(); + } + }); + }); +} + +async function addStudent(id, first, last, major, nda, ip, onCampus) { + return new Promise(function (resolve, reject) { + const query = SQL`INSERT INTO students + (id, first_name, last_name, major, nda, ip, on_campus) + VALUES (${id}, ${first}, ${last}, NULLIF(${major}, ''), ${nda}, ${ip}, ${onCampus})`; + databaseConnection.query(query, (err, result) => { + if (err) { + console.log("Fail!"); + reject(err); + } else { + console.log("Student added!"); + resolve(); + } + }); + }); +} + +const getAssignmentsQuery = () => SQL`SELECT * FROM assignments`; +const getStudentDataForWriteQuery = (studentID) => { + return SQL`SELECT first_name, last_name, major, nda, ip, on_campus + FROM students + WHERE id = ${studentID}`; +}; + +const getCommentQuery = (studentID, projectID) => { + return SQL`SELECT comment + FROM preferences + WHERE student_id = ${studentID} AND project_id = ${projectID}`; +}; + +const addAssignmentQuery = (studentID, projectID) => { + return SQL`INSERT INTO assignments + (student_id, project_id) + VALUES (${studentID}, ${projectID})`; +}; + +const addPreferenceQuery = function ( + projectID, + studentID, + timeA, + timeB, + timeC, + preference, + comment +) { + return SQL`INSERT INTO preferences + (project_id, student_id, time_a, time_b, time_c, preference, comment) + VALUES (${projectID}, ${studentID}, ${timeA}, ${timeB}, ${timeC}, ${preference}, ${comment})`; +}; + +const addProjectQuery = function addProject( + id, + company, + title, + primary, + secondary, + tertiary, + confidentiality, + ip, + courseTime, + courseName, + prototype +) { + return SQL`INSERT INTO projects + (id, company, title, primary_major, secondary_major, tertiary_majors, confidentiality, ip, course_time, course_name, prototype) + VALUES (${id}, ${company}, ${title}, ${primary}, ${secondary}, ${tertiary}, ${confidentiality}, ${ip}, ${courseTime}, ${courseName}, ${prototype})`; +}; + +const addStudentQuery = function (id, first, last, major, nda, ip, onCampus) { + return SQL`INSERT INTO students + (id, first_name, last_name, major, nda, ip, on_campus) + VALUES (${id}, ${first}, ${last}, NULLIF(${major}, ''), ${nda}, ${ip}, ${onCampus})`; +}; + +module.exports = { + addAssignment, + addPreference, + addProject, + addStudent, + mySQLConnection, + databaseConnection, + connectToMySQL, + connectToDatabase, + databaseName, + getAssignmentsQuery, + getStudentDataForWriteQuery, + getCommentQuery, +}; diff --git a/backend/server.js b/backend/server.js index 8662c775a..23eac028b 100644 --- a/backend/server.js +++ b/backend/server.js @@ -1,9 +1,5 @@ const cors = require("cors"); -const createCsvWriter = require("csv-writer").createObjectCsvWriter; -const csv = require("csv-parse"); const express = require("express"); -const fs = require("fs"); -const mySQL = require("mysql2"); const SQL = require("sql-template-strings"); const app = express(); @@ -11,6 +7,19 @@ const corsOptions = { origin: "http://localhost:8081", }; +console.log("Server is runbning"); + +const { + addAssignment, + addPreference, + addProject, + addStudent, + databaseConnection, + connectToMySQL, + connectToDatabase, + getAssignmentsQuery, +} = require("./db.js"); + app.use(cors(corsOptions)); app.use(express.json()); app.use((req, res, next) => { @@ -21,376 +30,27 @@ app.use((req, res, next) => { next(); }); -// Edit with your MySQL Password: -const mySQLPassword = "password"; - -const preferencesCSV = "studentsFinal.csv"; -const projectsCSV = "projectsFinal.csv"; -const studentsCSV = "studentAssignments.csv"; -const studentsNoSurveyCSV = "Students Without Prefs.csv"; - -const majors = [ - "BME", - "CMPEN", - "CMPSC", - "DS", - "ED", - "EE", - "EGEE", - "ESC", - "IE", - "MATSE", - "ME", -]; - let preferences = undefined; let projects = undefined; let students = undefined; let studentsNoSurvey = undefined; -// MySQL connection objects. -const mySQLConnection = mySQL.createConnection({ - host: "localhost", - user: "root", - password: mySQLPassword, -}); - -const databaseName = "capstone"; -const databaseConnection = mySQL.createConnection({ - host: "localhost", - user: "root", - password: mySQLPassword, - database: databaseName, -}); - -function connectToMySQL(callback) { - mySQLConnection.connect(function (err) { - //if (err) throw err; - console.log("Connected to MySQL!"); - callback(); - }); -} - -function createDatabase(callback) { - mySQLConnection.query( - `CREATE DATABASE IF NOT EXISTS ${databaseName}`, - function (err, result) { - //if (err) throw err; - console.log("Database created!"); - callback(); - } - ); -} - -function connectToDatabase(callback) { - databaseConnection.connect(function (err) { - //if (err) throw err; - console.log("Connected to the database!"); - callback(); - }); -} - -function createAssignmentsTable(callback) { - const query = SQL`CREATE TABLE IF NOT EXISTS assignments ( - project_id VARCHAR(64), - student_id VARCHAR(64))`; - databaseConnection.query(query, function (err, result) { - if (err) throw err; - console.log("Assignments table created!"); - callback(); - }); -} - -function createPreferencesTable(callback) { - const query = SQL`CREATE TABLE IF NOT EXISTS preferences ( - project_id VARCHAR(64), - student_id VARCHAR(64), - time_a VARCHAR(64), - time_b VARCHAR(64), - time_c VARCHAR(64), - preference TINYINT(1), - comment TEXT)`; - databaseConnection.query(query, function (err, result) { - if (err) throw err; - console.log("Preferences table created!"); - callback(); - }); -} - -function createProjectsTable(callback) { - const query = SQL`CREATE TABLE IF NOT EXISTS projects ( - id VARCHAR(64), - company VARCHAR(255), - title VARCHAR(255), - primary_major VARCHAR(16), - secondary_major VARCHAR(16), - tertiary_majors VARCHAR(255), - confidentiality TINYINT(1), - ip TINYINT(1), - course_time VARCHAR(64), - course_name VARCHAR(64), - prototype TINYINT(1))`; - databaseConnection.query(query, function (err, result) { - if (err) throw err; - console.log("Projects table created!"); - callback(); - }); -} - -function createStudentsTable(callback) { - const query = SQL`CREATE TABLE IF NOT EXISTS students ( - id VARCHAR(64), - first_name VARCHAR(255), - last_name VARCHAR(255), - major VARCHAR(16), - nda TINYINT(1), - ip TINYINT(1), - on_campus TINYINT(1))`; - databaseConnection.query(query, function (err, result) { - if (err) throw err; - console.log("Students table created!"); - callback(); - }); -} - -function createTables(callback) { - createAssignmentsTable(function () { - createPreferencesTable(function () { - createProjectsTable(function () { - createStudentsTable(function () { - callback(); - }); - }); - }); - }); -} - function databaseSetup(callback) { connectToMySQL(() => { - createDatabase(() => { - connectToDatabase(() => { - createTables(() => { - callback(); - }); - }); - }); - }); -} - -function readCSVFile(file, parser, callback) { - fs.createReadStream(file) - .pipe(parser) - .on("error", function (err) { - console.log(err); - }) - .on("close", callback); -} - -function readCSVs(callback) { - readCSVFile( - preferencesCSV, - csv.parse({ delimiter: "," }, function (err, data) { - preferences = data.slice(1, data.length); - }), - function () { - readCSVFile( - projectsCSV, - csv.parse({ delimiter: "," }, function (err, data) { - projects = data.slice(1, data.length); - }), - function () { - readCSVFile( - studentsCSV, - csv.parse({ delimiter: "," }, function (err, data) { - students = data.slice(1, data.length); - }), - function () { - readCSVFile( - studentsNoSurveyCSV, - csv.parse({ delimiter: "," }, function (err, data) { - studentsNoSurvey = data.slice(1, data.length); - }), - function () { - callback(); - } - ); - } - ); - } - ); - } - ); -} - -// Adding rows to tables. -function addAssignment(studentID, projectID) { - return new Promise(function (resolve, reject) { - const query = SQL`INSERT INTO assignments - (student_id, project_id) - VALUES (${studentID}, ${projectID})`; - databaseConnection.query(query, function (err, result) { - //if (err) throw err; - - console.log("Assignment added!"); - resolve(); - }); - }); -} - -//can we note when it finishes adding all preferences or something -function addPreference( - projectID, - studentID, - timeA, - timeB, - timeC, - preference, - comment -) { - return new Promise(function (resolve, reject) { - const query = SQL`INSERT INTO preferences - (project_id, student_id, time_a, time_b, time_c, preference, comment) - VALUES (${projectID}, ${studentID}, ${timeA}, ${timeB}, ${timeC}, ${preference}, ${comment})`; - databaseConnection.query(query, function (err, result) { - if (err) reject(err); - else { - console.log("Preference added!"); - resolve(); - } - }); - }); -} - -function addProject( - id, - company, - title, - primary, - secondary, - tertiary, - confidentiality, - ip, - courseTime, - courseName, - prototype -) { - return new Promise(function (resolve, reject) { - const query = SQL`INSERT INTO projects - (id, company, title, primary_major, secondary_major, tertiary_majors, confidentiality, ip, course_time, course_name, prototype) - VALUES (${id}, ${company}, ${title}, ${primary}, ${secondary}, ${tertiary}, ${confidentiality}, ${ip}, ${courseTime}, ${courseName}, ${prototype})`; - databaseConnection.query(query, function (err, result) { - if (err) reject(err); - else { - console.log("Project added!"); - resolve(); - } - }); - }); -} - -function addStudent(id, first, last, major, nda, ip, onCampus, callback) { - return new Promise(function (resolve, reject) { - const query = SQL`INSERT INTO students - (id, first_name, last_name, major, nda, ip, on_campus) - VALUES (${id}, ${first}, ${last}, NULLIF(${major}, ''), ${nda}, ${ip}, ${onCampus})`; - databaseConnection.query(query, function (err, result) { - if (err) reject(err); - else { - console.log("Student added!"); - resolve(); - } + connectToDatabase(() => { + callback(); }); }); } -// I'm assuming the other CSVs don't need to be written to, but they can be added later if they do. -async function writeAssignmentsCSV(callback) { - const csvWriter = createCsvWriter({ - path: "tempStudentAssignments.csv", - header: [ - { id: "major", title: "Major" }, - { id: "projectID", title: "ProjectID" }, - { id: "timeA", title: "TimeA" }, - { id: "timeB", title: "TimeB" }, - { id: "timeC", title: "TimeC" }, - { id: "comments", title: "Comments" }, - { id: "nda", title: "Student_NDA" }, - { id: "ip", title: "Student_IP" }, - { id: "studentID", title: "campus_id" }, - { id: "lastName", title: "last_name" }, - { id: "firstName", title: "first_name" }, - { id: "onCampus", title: "OnCampus" }, - ], - }); - - const data = [ - // { - // name: 'John', - // surname: 'Snow', - // age: 26, - // gender: 'M' - // }, { - // name: 'Clair', - // surname: 'White', - // age: 33, - // gender: 'F', - // }, { - // name: 'Fancy', - // surname: 'Brown', - // age: 78, - // gender: 'F' - // } - ]; - /*var assignments = await getAssignments(); - for (const assignment of assignments) { - - } - console.log(temp) */ - callback(); -} - -// Main code. -databaseSetup(function () { - readCSVs(function () { - // Test Data. - addStudent("drs5972", "Dan", "Stebbins", "CMPSC", 1, 1, 0, function () {}); - addProject( - "XKCD", - "PSU", - "Test Project", - "CMPSC", - "EE", - "ME; CMPEN", - 1, - 0, - "4 AM", - "CMPSC -2^10", - 1, - function () {} - ); - addPreference( - "XKCD", - "drs5972", - "8 AM", - "10 AM", - "4 AM", - 2, - "Please no anything but this project I hate it.", - function () {} - ); - addAssignment("XKCD", "drs5972", function () {}); - writeAssignmentsCSV(() => { - app.listen(PORT, () => console.log(`listening on ${PORT}`)); - }); - // loadTables(function () { }); - }); +databaseSetup(() => { + app.listen(PORT, () => console.log(`listening on ${PORT}`)); }); - const PORT = process.env.PORT || 8081; // Gets all assignments. app.get("/api/assignments", async (req, res) => { - const query = SQL`SELECT * FROM assignments`; + const query = getAssignmentsQuery(); databaseConnection.execute(query, (error, result) => { if (error) { res @@ -415,12 +75,12 @@ app.get("/api/highteams/:count", async (req, res) => { .status(401) .json({ message: `Error occurred when querying database: ${error}` }); } - console.log("Assignments Retrieved!"); + console.log("highteams Retrieved!"); res.json(result); }); }); -app.get("api/lowteams/:count", async (req, res) => { +app.get("/api/lowteams/:count", async (req, res) => { const query = SQL`SELECT projects.title, projects.company, projects.id FROM projects INNER JOIN assignments @@ -433,12 +93,12 @@ app.get("api/lowteams/:count", async (req, res) => { .status(401) .json({ message: `Error occurred when querying database: ${error}` }); } - console.log("Assignments Retrieved!"); + console.log("lowteams Retrieved!"); res.json(result); }); }); -app.get("api/projects", async (req, res) => { +app.get("/api/projects", async (req, res) => { const query = SQL`SELECT * from projects`; databaseConnection.execute(query, (error, result) => { if (error) { @@ -446,7 +106,54 @@ app.get("api/projects", async (req, res) => { .status(401) .json({ message: `Error occurred when querying database: ${error}` }); } - console.log("Assignments Retrieved!"); + console.log("Projects Retrieved!"); + res.json(result); + }); +}); + +app.get("/api/students", async (req, res) => { + const query = SQL`SELECT * from students`; + databaseConnection.execute(query, (error, result) => { + if (error) { + res + .status(401) + .json({ message: `Error occurred when querying database: ${error}` }); + } + console.log("Students Retrieved!"); + res.json(result); + }); +}); + +app.get("/api/dashboard-major", async (req, res) => { + const query = SQL`SELECT + s.major, COUNT(*) AS count + FROM students AS s + GROUP BY s.major;`; + + databaseConnection.execute(query, (error, result) => { + if (error) { + res + .status(401) + .json({ message: `Error occurred when querying database: ${error}` }); + } + console.log("Major Distribution Retrieved!"); + res.json(result); + }); +}); + +app.get("/api/student-assignments", async (req, res) => { + const query = SQL`SELECT * + FROM students AS s + INNER JOIN assignments AS a + ON s.id = a.student_id`; + + databaseConnection.execute(query, (error, result) => { + if (error) { + res + .status(401) + .json({ message: `Error occurred when querying database: ${error}` }); + } + console.log("Student Assignments Recieved!"); res.json(result); }); }); diff --git a/backend/tempStudentAssignments.csv b/backend/tempStudentAssignments.csv new file mode 100644 index 000000000..9b9848154 --- /dev/null +++ b/backend/tempStudentAssignments.csv @@ -0,0 +1,2 @@ +Major,ProjectID,TimeA,TimeB,TimeC,Comments,Student_NDA,Student_IP,campus_id,last_name,first_name,OnCampus +CMPSC,XKCD,,,,Please no anything but this project I hate it.,1,1,drs5972,Stebbins,Dan,No diff --git a/config/esbuild.inject.js b/config/esbuild.inject.js new file mode 100644 index 000000000..6f17a034d --- /dev/null +++ b/config/esbuild.inject.js @@ -0,0 +1 @@ +export let Buffer = require("buffer").Buffer diff --git a/index.html b/index.html index 52a266c9f..79c470191 100644 --- a/index.html +++ b/index.html @@ -1,43 +1,13 @@ -
- - -Testing Testing Testing
-- testtesttesttesttesttesttest -
-