Skip to content

Commit 1539da2

Browse files
Merge pull request #27 from angelplusultra/refactor/move-save-outside-scrape-fn
Refactor/move save outside scrape fn
2 parents cd3ad73 + 0ecaa55 commit 1539da2

File tree

22 files changed

+37
-129
lines changed

22 files changed

+37
-129
lines changed

scripts/create_scraper.mjs

Lines changed: 2 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -70,11 +70,7 @@ pub async fn scrape_${name.toLowerCase()}(data: &mut Data) -> Result<JobsPayload
7070
serde_json::from_str(remote_object.value.unwrap().as_str().unwrap()).unwrap();
7171
7272
// Convert Vector of ScrapedJob into a JobsPayload
73-
let jobs_payload = JobsPayload::from_scraped_jobs(scraped_jobs, &data.data["${dataKey}"]);
74-
75-
// REMEBER TO SAVE THE NEW JOBS TO THE DATA STATE
76-
data.data.get_mut("${dataKey}").unwrap().jobs = jobs_payload.all_jobs.clone();
77-
data.save();
73+
let jobs_payload = JobsPayload::from_scraped_jobs(scraped_jobs, "${dataKey}", data);
7874
7975
// Return JobsPayload
8076
Ok(jobs_payload)
@@ -137,11 +133,7 @@ JSON.stringify(jobs);
137133
serde_json::from_str(remote_object.value.unwrap().as_str().unwrap()).unwrap();
138134
139135
// Convert Vector of ScrapedJob into a JobsPayload
140-
let jobs_payload = JobsPayload::from_scraped_jobs(scraped_jobs, &data.data["${dataKey}"]);
141-
142-
// REMEBER TO SAVE THE NEW JOBS TO THE DATA STATE
143-
data.data.get_mut("${dataKey}").unwrap().jobs = jobs_payload.all_jobs.clone();
144-
data.save();
136+
let jobs_payload = JobsPayload::from_scraped_jobs(scraped_jobs, "${dataKey}", data);
145137
146138
// Return JobsPayload
147139
Ok(jobs_payload)

src/handlers/handlers.rs

Lines changed: 1 addition & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -61,12 +61,7 @@ pub async fn default_scrape_jobs_handler(
6161
let scraped_jobs: Vec<ScrapedJob> =
6262
serde_json::from_str(engineering_jobs.value.unwrap().as_str().unwrap()).unwrap();
6363

64-
let jobs_payload =
65-
JobsPayload::from_scraped_jobs(scraped_jobs, &data.data[options.company_key]);
66-
67-
data.data.get_mut(options.company_key).unwrap().jobs = jobs_payload.all_jobs.clone();
68-
69-
data.save();
64+
let jobs_payload = JobsPayload::from_scraped_jobs(scraped_jobs, options.company_key, data);
7065

7166
Ok(jobs_payload)
7267
}

src/models/scraper.rs

Lines changed: 9 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -150,10 +150,15 @@ impl JobsPayload {
150150
}
151151
}
152152

153-
pub fn from_scraped_jobs(scraped_jobs: Vec<ScrapedJob>, company: &Company) -> Self {
153+
pub fn from_scraped_jobs(
154+
scraped_jobs: Vec<ScrapedJob>,
155+
company_key: &str,
156+
data: &mut Data,
157+
) -> Self {
154158
let mut all_jobs: Vec<Job> = Vec::new();
155159
let mut new_jobs: Vec<Job> = Vec::new();
156160

161+
let company = data.data.get_mut(company_key).unwrap();
157162
// Check for first scrape
158163
if company.jobs.is_empty() {
159164
all_jobs = scraped_jobs
@@ -201,6 +206,9 @@ impl JobsPayload {
201206
}
202207
}
203208

209+
company.jobs = all_jobs.clone();
210+
data.save();
211+
204212
return JobsPayload {
205213
are_new_jobs: new_jobs.len() > 0,
206214
new_jobs,

src/scrapers/airbnb/scraper.rs

Lines changed: 1 addition & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -65,13 +65,8 @@ JSON.stringify(scrapedJobs);
6565
// Acquire Vector of ScrapedJob
6666

6767
// Convert Vector of ScrapedJob into a JobsPayload
68-
let jobs_payload = JobsPayload::from_scraped_jobs(scraped_jobs, &data.data["AirBnB"]);
69-
70-
// REMEBER TO SAVE THE NEW JOBS TO THE DATA STATE
71-
data.data.get_mut("AirBnB").unwrap().jobs = jobs_payload.all_jobs.clone();
72-
data.save();
68+
let jobs_payload = JobsPayload::from_scraped_jobs(scraped_jobs, "AirBnB", data);
7369

7470
// Return JobsPayload
7571
Ok(jobs_payload)
7672
}
77-

src/scrapers/blizzard/scraper.rs

Lines changed: 3 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -63,7 +63,8 @@ JSON.stringify(jobs)
6363
let remote_object = tab.evaluate(js, false)?;
6464

6565
if let Some(value) = remote_object.value {
66-
let scraped_jobs_subset: Vec<ScrapedJob> = serde_json::from_str(value.as_str().unwrap())?;
66+
let scraped_jobs_subset: Vec<ScrapedJob> =
67+
serde_json::from_str(value.as_str().unwrap())?;
6768
scraped_jobs.extend(scraped_jobs_subset);
6869
} else {
6970
break;
@@ -72,9 +73,7 @@ JSON.stringify(jobs)
7273
results += 10;
7374
}
7475

75-
let jobs_payload = JobsPayload::from_scraped_jobs(scraped_jobs, &data.data["Blizzard"]);
76-
data.data.get_mut("Blizzard").unwrap().jobs = jobs_payload.all_jobs.clone();
77-
data.save();
76+
let jobs_payload = JobsPayload::from_scraped_jobs(scraped_jobs, "Blizzard", data);
7877

7978
Ok(jobs_payload)
8079
}

src/scrapers/chase/scraper.rs

Lines changed: 1 addition & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -34,13 +34,8 @@ pub async fn scrape_chase(data: &mut Data) -> Result<JobsPayload, Box<dyn Error>
3434
offset += 200;
3535
}
3636
// Convert Vector of ScrapedJob into a JobsPayload
37-
let jobs_payload = JobsPayload::from_scraped_jobs(scraped_jobs, &data.data["Chase"]);
38-
39-
// REMEBER TO SAVE THE NEW JOBS TO THE DATA STATE
40-
data.data.get_mut("Chase").unwrap().jobs = jobs_payload.all_jobs.clone();
41-
data.save();
37+
let jobs_payload = JobsPayload::from_scraped_jobs(scraped_jobs, "Chase", data);
4238

4339
// Return JobsPayload
4440
Ok(jobs_payload)
4541
}
46-

src/scrapers/cisco/scraper.rs

Lines changed: 1 addition & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -70,14 +70,7 @@ pub async fn scrape_cisco(data: &mut Data) -> Result<JobsPayload, Box<dyn Error>
7070
}
7171

7272
// Convert Vector of ScrapedJob into a JobsPayload
73-
let jobs_payload = JobsPayload::from_scraped_jobs(scraped_jobs, &data.data["Cisco"]);
74-
75-
// Save the new jobs to the data state
76-
data.data.get_mut("Cisco").unwrap().jobs = jobs_payload.all_jobs.clone();
77-
78-
if cfg!(test) == false {
79-
data.save();
80-
}
73+
let jobs_payload = JobsPayload::from_scraped_jobs(scraped_jobs, "Cisco", data);
8174

8275
// Return JobsPayload
8376
Ok(jobs_payload)
@@ -92,6 +85,5 @@ mod test {
9285
let mut data = Data::default();
9386

9487
let v = scrape_cisco(&mut data).await.unwrap();
95-
9688
}
9789
}

src/scrapers/cloudflare/scraper.rs

Lines changed: 1 addition & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -53,13 +53,8 @@ pub async fn scrape_cloudflare(data: &mut Data) -> Result<JobsPayload, Box<dyn E
5353
}
5454

5555
// Convert Vector of ScrapedJob into a JobsPayload
56-
let jobs_payload = JobsPayload::from_scraped_jobs(scraped_jobs, &data.data["Cloudflare"]);
57-
58-
// REMEBER TO SAVE THE NEW JOBS TO THE DATA STATE
59-
data.data.get_mut("Cloudflare").unwrap().jobs = jobs_payload.all_jobs.clone();
60-
data.save();
56+
let jobs_payload = JobsPayload::from_scraped_jobs(scraped_jobs, "Cloudflare", data);
6157

6258
// Return JobsPayload
6359
Ok(jobs_payload)
6460
}
65-

src/scrapers/coinbase/scraper.rs

Lines changed: 1 addition & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,6 @@ pub async fn scrape_coinbase(data: &mut Data) -> Result<JobsPayload, Box<dyn Err
1313
window_size: Some((1920, 1080)),
1414
enable_logging: false,
1515

16-
1716
..LaunchOptions::default()
1817
};
1918
let browser = Browser::new(launch_options)?;
@@ -61,12 +60,7 @@ JSON.stringify(jobs);
6160
let scraped_jobs: Vec<ScrapedJob> =
6261
serde_json::from_str(scraped_jobs.value.unwrap().as_str().unwrap()).unwrap();
6362

64-
let jobs_payload = JobsPayload::from_scraped_jobs(scraped_jobs, &data.data["Coinbase"]);
65-
66-
data.data.get_mut("Coinbase").unwrap().jobs = jobs_payload.all_jobs.clone();
67-
68-
data.save();
63+
let jobs_payload = JobsPayload::from_scraped_jobs(scraped_jobs, "Coinbase", data);
6964

7065
Ok(jobs_payload)
7166
}
72-

src/scrapers/costar_group/scraper.rs

Lines changed: 1 addition & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -47,13 +47,8 @@ pub async fn scrape_costar_group(data: &mut Data) -> Result<JobsPayload, Box<dyn
4747
}
4848

4949
// Convert Vector of ScrapedJob into a JobsPayload
50-
let jobs_payload = JobsPayload::from_scraped_jobs(scraped_jobs, &data.data["CoStar Group"]);
51-
52-
// REMEBER TO SAVE THE NEW JOBS TO THE DATA STATE
53-
data.data.get_mut("CoStar Group").unwrap().jobs = jobs_payload.all_jobs.clone();
54-
data.save();
50+
let jobs_payload = JobsPayload::from_scraped_jobs(scraped_jobs, "CoStar Group", data);
5551

5652
// Return JobsPayload
5753
Ok(jobs_payload)
5854
}
59-

0 commit comments

Comments
 (0)