@@ -22,7 +22,7 @@ public JobsRepository(ICosmosContainerFactory cosmosContainerFactory,
2222
2323 public async Task < List < ScrappedJob > > GetAllLatestJobsAsync ( )
2424 {
25- var query = "SELECT * FROM c ORDER BY c.scrappedTime DESC OFFSET 0 LIMIT 100 " ;
25+ var query = "SELECT * FROM c ORDER BY c.scrappedTime DESC OFFSET 0 LIMIT 2000 " ;
2626 return await QueryJobsAsync ( query ) ;
2727 }
2828
@@ -32,26 +32,6 @@ public async Task<List<ScrappedJob>> GetAllJobsInLastOneDay()
3232 return await QueryJobsAsync ( query ) ;
3333 }
3434
35- public async Task < ScrappedJob > GetJobByIdAsync ( string id )
36- {
37- try
38- {
39- // TODO: NOT working as expected
40- var response = await this . jobsContainer . ReadItemAsync < ScrappedJob > ( id , new PartitionKey ( id ) ) ;
41- return response . Resource ;
42- }
43- catch ( CosmosException cosmosEx ) when ( cosmosEx . StatusCode == System . Net . HttpStatusCode . NotFound )
44- {
45- this . logger . LogWarning ( $ "Job: { id } not found in container.") ;
46- return null ;
47- }
48- catch ( Exception ex )
49- {
50- this . logger . LogError ( $ "Failed to retrieve job: { id } from container. Ex: { ex } ") ;
51- return null ;
52- }
53- }
54-
5535 /// <summary>
5636 /// Create the item only if it does not already exist using a single DB call.
5737 /// Returns true if the item was created, false if it already existed.
@@ -95,6 +75,32 @@ public async Task<List<ScrappedJob>> GetJobsEasyQueryAsync(string location, stri
9575 return res ;
9676 }
9777
78+ public async Task < List < string > > GetJobIdsInLastNDaysAsync ( int lookbackdays )
79+ {
80+ var cutoffDate = DateTime . UtcNow . AddDays ( - lookbackdays ) ;
81+ var query = "SELECT c.id FROM c WHERE c.scrappedTime >= @cutoffDate" ;
82+ var queryDefinition = new QueryDefinition ( query ) . WithParameter ( "@cutoffDate" , cutoffDate ) ;
83+ var queryResultSetIterator = jobsContainer . GetItemQueryIterator < ScrappedJob > ( queryDefinition ) ;
84+ List < string > results = new List < string > ( ) ;
85+ while ( queryResultSetIterator . HasMoreResults )
86+ {
87+ var response = await queryResultSetIterator . ReadNextAsync ( ) ;
88+ results . AddRange ( response . Select ( j => j . id ) ) ;
89+ }
90+ this . logger . LogInformation ( $ "Retrieved { results . Count } job IDs from Cosmos DB in last { lookbackdays } days.") ;
91+ return results ;
92+ }
93+
94+ public async Task < List < ScrappedJob > > GetJobsAsync ( string location , int lookbackdays )
95+ {
96+ var cutoffDate = DateTime . UtcNow . AddDays ( - lookbackdays ) ;
97+ var query = "SELECT * FROM c WHERE (LOWER(c.location) = @location OR LOWER(c.location) = @unknown) AND c.scrappedTime >= @cutoffDate ORDER BY c.scrappedTime DESC" ;
98+ var queryDefinition = new QueryDefinition ( query )
99+ . WithParameter ( "@location" , location . ToLower ( ) )
100+ . WithParameter ( "@unknown" , "unknown" )
101+ . WithParameter ( "@cutoffDate" , cutoffDate . ToString ( "yyyy-MM-ddTHH:mm:ss" ) ) ;
102+ return await QueryJobsAsync ( queryDefinition ) ;
103+ }
98104
99105 private async Task < List < ScrappedJob > > QueryJobsAsync ( string query )
100106 {
0 commit comments