Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
30 changes: 30 additions & 0 deletions src/.dockerignore
Original file line number Diff line number Diff line change
@@ -0,0 +1,30 @@
**/.classpath
**/.dockerignore
**/.env
**/.git
**/.gitignore
**/.project
**/.settings
**/.toolstarget
**/.vs
**/.vscode
**/*.*proj.user
**/*.dbmdl
**/*.jfm
**/azds.yaml
**/bin
**/charts
**/docker-compose*
**/Dockerfile*
**/node_modules
**/npm-debug.log
**/obj
**/secrets.dev.yaml
**/values.dev.yaml
LICENSE
README.md
!**/.gitignore
!.git/HEAD
!.git/config
!.git/packed-refs
!.git/refs/heads/**
85 changes: 20 additions & 65 deletions src/Backend/Controllers/JobSearchController.cs
Original file line number Diff line number Diff line change
Expand Up @@ -2,102 +2,57 @@ namespace Backend.Controllers
{
using Backend.Operations;
using Microsoft.AspNetCore.Mvc;
using Common.Models;
using Common.Models.Public;
using Common.Repositories;
using System.Threading.Tasks;
using Common.Managers;
using Common.Engines;
using Common.Queries;
using Common.DatabaseModels;

[ApiController]
[Route("api")]
public class JobSearchController : ControllerBase
{
private readonly GSEngine gsEngine;
private readonly AIEngine aiEngine;
private readonly JobScrapperManager jobscrapperManager;
private readonly JobsRepository jobsContainer;
private readonly JobsRepository jobsRepository;
private readonly ILogger<JobSearchController> logger;
public JobSearchController(GSEngine gsEngine, AIEngine aiEngine, JobsRepository jobsContainer, JobScrapperManager jobscrapperManager, ILogger<JobSearchController> logger)
public JobSearchController(JobsRepository jobsRepository, ILogger<JobSearchController> logger)
{
this.gsEngine = gsEngine;
this.aiEngine = aiEngine;
this.logger = logger;
this.jobscrapperManager = jobscrapperManager;
this.jobsContainer = jobsContainer;
this.jobsRepository = jobsRepository;
}

[HttpGet]
[HttpPost]
[Route("jobs/search")]
public async Task<ActionResult<List<ScrappedJob>>> SearchJobs(
[FromQuery(Name = "q")] string query,
[FromQuery(Name = "d")] int nPreviousDays)
public async Task<ActionResult<List<ScrappedJob>>> SearchJobs([FromBody] JobQuery jobquery)
{
var result = await this.gsEngine.SearchBasicQueryAsync(query, nPreviousDays);
if (result != null)
{
var levels = await this.aiEngine.GetJobLevelAsync(result);
foreach (var level in levels)
{
var job = result.FirstOrDefault(j => j.id == level.Key);
if (job != null)
{
job.tags.Add(level.Value);
}
}
return Ok(result);
}
return StatusCode(500, "Error occurred while searching for jobs.");
return Ok(await jobsRepository.GetJobsFromQuery(jobquery));
}

[HttpGet]
[Route("jobs/latest")]
public async Task<ActionResult<string>> GetLatestJobsFromScrapper()
public async Task<ActionResult<string>> GetLatestJobsFromDb()
{
return Ok(await this.jobsContainer.GetAllLatestJobsAsync());
return Ok(await this.jobsRepository.GetAllLatestJobsAsync());
}

[HttpGet]
[Route("jobs/lastOneDay")]
public async Task<ActionResult<string>> GetLastOneDayJobsFromDb()
{
return Ok(await this.jobsRepository.GetAllJobsInLastOneDay());
}

[HttpGet]
[Route("jobs/profile/{id}")]
public async Task<ActionResult<string>> GetJobById(string id)
{
var job = await this.jobsContainer.GetJobByIdAsync(id);
var job = await this.jobsRepository.GetJobByIdAsync(id);
if (job != null)
{
return Ok(job);
}
return Ok("Not found.");
}

[HttpGet]
[Route("jobs/scrappers")]
public ActionResult<List<ScrapperSettings>> GetAllJobScrappers()
{
// Placeholder implementation for getting all scrappers
return Ok(this.jobscrapperManager.settingsManager.GetAllSettings());
}

[HttpPut]
[Route("jobs/scrappers/{id}")]
public ActionResult<ScrapperSettings> CreateOrUpdateJobScrapperSettings(string id, [FromBody] ScrapperSettings settings)
{
// Placeholder implementation for updating scrapper settings
return Ok(this.jobscrapperManager.settingsManager.CreateOrUpdateSettings(id, settings));
}

[HttpGet]
[Route("jobs/scrappers/{id}")]
public ActionResult<ScrapperSettings> GetJobScrapperSettings(string id)
{
// Placeholder implementation for getting scrapper settings
return Ok(this.jobscrapperManager.settingsManager.GetSettingsById(id));
}

[HttpGet]
[Route("jobs/scrappers/{id}/trigger")]
public ActionResult<ScrapperSettings> TriggerScrapper(string id)
{
// Placeholder implementation for getting scrapper settings
this.jobscrapperManager.RunScrapperByIdAsync(id);
return Ok($"Started scrapper for settings id: {id}");
}
}
}
58 changes: 58 additions & 0 deletions src/Backend/Controllers/ScrapperSettingsController.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,58 @@
using Common.DatabaseModels;
using Common.Engines;
using Common.Managers;
using Common.Models;
using Common.Models.Public;
using Common.Repositories;
using Microsoft.AspNetCore.Mvc;

namespace Backend.Controllers
{
[ApiController]
[Route("api/[controller]")]
public class ScrapperSettingsController : ControllerBase
{
private readonly JobScrapperSettingsManager _settingsManager;

private readonly ILogger<JobSearchController> _logger;

public ScrapperSettingsController( JobScrapperSettingsManager jobScrapperSettingsManager,
ILogger<JobSearchController> logger)
{
_settingsManager = jobScrapperSettingsManager;
_logger = logger;
}

[HttpGet]
[Route("jobs/scrappers")]
public async Task<ActionResult<List<JobScrapperSettings>>> GetAllJobScrappers()
{
// Placeholder implementation for getting all scrappers
return Ok(await _settingsManager.GetAllSettings());
}

[HttpPut]
[Route("jobs/scrappers/{id}")]
public async Task<ActionResult<JobScrapperSettings>> UpdateJobScrapperSettings(string id, [FromBody] ScrapperSettings settings)
{
// Placeholder implementation for updating scrapper settings
return Ok(await _settingsManager.CreateOrUpdateSettings(id, settings));
}

[HttpPost]
[Route("jobs/scrappers/Add")]
public async Task<ActionResult<JobScrapperSettings>> CreateNewJobScrapperSettings([FromBody] ScrapperSettings settings)
{
// Placeholder implementation for updating scrapper settings
return Ok(await _settingsManager.CreateOrUpdateSettings(string.Empty, settings));
}

[HttpGet]
[Route("jobs/scrappers/{id}")]
public async Task<ActionResult<JobScrapperSettings>> GetJobScrapperSettings(string id)
{
// Placeholder implementation for getting scrapper settings
return Ok(await _settingsManager.GetSettingsById(id));
}
}
}
9 changes: 0 additions & 9 deletions src/Backend/Filters/IFilter.cs

This file was deleted.

3 changes: 2 additions & 1 deletion src/Backend/Filters/ProblemFilter.cs
Original file line number Diff line number Diff line change
@@ -1,8 +1,9 @@
using Common;
using Common.Models;

namespace Backend.Filters
{
public class ProblemFilter : IFilter
public class ProblemFilter : IFilter<Problem>
{
private int skip = 0;
private int limit = 50;
Expand Down
3 changes: 2 additions & 1 deletion src/Backend/Operations/DataProvider.cs
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
namespace Backend.Operations
{
using Backend.Filters;
using Common;
using Common.Cache;
using Common.Constants;
using Common.Models;
Expand All @@ -15,7 +16,7 @@ public DataProvider([FromKeyedServices(CacheConstants.ProblemCacheKey)] ICache p
_logger = logger;
}

public async Task<List<Problem>> GetProblemsAsync(IFilter? filter = null)
public async Task<List<Problem>> GetProblemsAsync(IFilter<Problem>? filter = null)
{
var allProblems = await GetAllProblemsAsync();
if (filter != null)
Expand Down
Loading