using BoredCareers.Entities; using BoredCareers.Services.TimerService; using MySql.Data.MySqlClient; using System.Data; using System.Data.Common; namespace BoredCareers.Services.DatabaseService { public partial class DatabaseService { public async Task GetJobListingPage(int PageNumber, int CountPerPage) { List joblistings = new List(); using (MySqlConnection connection = GetConnection()) { await connection.OpenAsync(); string command = @" SELECT * FROM JobListing WHERE IsDeleted = FALSE ORDER BY CreatedTime DESC LIMIT @PageSize OFFSET @PageNumber; "; MySqlCommand cmd = new MySqlCommand(command, connection); cmd.Parameters.AddWithValue("@PageSize", CountPerPage); cmd.Parameters.AddWithValue("@PageNumber", (PageNumber - 1) * CountPerPage); using (DbDataReader reader = await cmd.ExecuteReaderAsync()) { while (await reader.ReadAsync()) { int _id = reader.GetInt32("ID"); int _companyid = reader.GetInt32("CompanyID"); string _title = reader.GetString("Title"); string _postalcode = reader.GetString("PostalCode"); string _country = reader.GetString("Country"); string _state = reader.GetString("StateOrRegion"); string _city = reader.GetString("City"); int _salarymin = reader.GetInt32("SalaryMin"); int _salarymax = reader.GetInt32("SalaryMax"); string _jobtype = reader.GetString("JobType"); bool _remote = reader.GetBoolean("Remote"); string _description = reader.GetString("Description"); JobListingSkill[] _skills = await GetJobListingSkills(_id); DateTime _createtime = reader.GetDateTime("CreatedTime"); DateTime _modifiedtime = reader.GetDateTime("ModifiedTime"); bool _isdeleted = reader.GetBoolean("IsDeleted"); joblistings.Add(new JobListing() { ID = _id, CompanyID = _companyid, Title = _title, PostalCode = _postalcode, Country = _country, StateOrRegion = _state, City = _city, SalaryMin = _salarymin, SalaryMax = _salarymax, JobType = _jobtype, Remote = _remote, Description = _description, Skills = _skills, CreatedTime = _createtime, ModifiedTime = _modifiedtime, IsDeleted = _isdeleted }); } } } return joblistings.ToArray(); } public async Task GetJobListingFromCompany(int CompanyID) { List joblistings = new List(); ; using (MySqlConnection connection = GetConnection()) { await connection.OpenAsync(); string command = @" SELECT * FROM JobListing WHERE IsDeleted = FALSE AND CompanyID = @CompanyID; "; MySqlCommand cmd = new MySqlCommand(command, connection); cmd.Parameters.AddWithValue("@CompanyID", CompanyID); using (DbDataReader reader = await cmd.ExecuteReaderAsync()) { while (await reader.ReadAsync()) { int _id = reader.GetInt32("ID"); int _companyid = reader.GetInt32("CompanyID"); string _title = reader.GetString("Title"); string _postalcode = reader.GetString("PostalCode"); string _country = reader.GetString("Country"); string _state = reader.GetString("StateOrRegion"); string _city = reader.GetString("City"); int _salarymin = reader.GetInt32("SalaryMin"); int _salarymax = reader.GetInt32("SalaryMax"); string _jobtype = reader.GetString("JobType"); bool _remote = reader.GetBoolean("Remote"); string _description = reader.GetString("Description"); JobListingSkill[] _skills = await GetJobListingSkills(_id); DateTime _createtime = reader.GetDateTime("CreatedTime"); DateTime _modifiedtime = reader.GetDateTime("ModifiedTime"); bool _isdeleted = reader.GetBoolean("IsDeleted"); joblistings.Add(new JobListing() { ID = _id, CompanyID = _companyid, Title = _title, PostalCode = _postalcode, Country = _country, StateOrRegion = _state, City = _city, SalaryMin = _salarymin, SalaryMax = _salarymax, JobType = _jobtype, Remote = _remote, Description = _description, Skills = _skills, CreatedTime = _createtime, ModifiedTime = _modifiedtime, IsDeleted = _isdeleted }); } } } return joblistings.ToArray(); } public async Task GetJobListing(int JobListingID) { JobListing? joblisting = null; using (MySqlConnection connection = GetConnection()) { await connection.OpenAsync(); string command = @" SELECT * FROM JobListing WHERE ID = @ID; "; MySqlCommand cmd = new MySqlCommand(command, connection); cmd.Parameters.AddWithValue("@ID", JobListingID); using (DbDataReader reader = await cmd.ExecuteReaderAsync()) { while (await reader.ReadAsync()) { int _id = reader.GetInt32("ID"); int _companyid = reader.GetInt32("CompanyID"); string _title = reader.GetString("Title"); string _postalcode = reader.GetString("PostalCode"); string _country = reader.GetString("Country"); string _state = reader.GetString("StateOrRegion"); string _city = reader.GetString("City"); int _salarymin = reader.GetInt32("SalaryMin"); int _salarymax = reader.GetInt32("SalaryMax"); string _jobtype = reader.GetString("JobType"); bool _remote = reader.GetBoolean("Remote"); string _description = reader.GetString("Description"); JobListingSkill[] _skills = await GetJobListingSkills(_id); DateTime _createtime = reader.GetDateTime("CreatedTime"); DateTime _modifiedtime = reader.GetDateTime("ModifiedTime"); bool _isdeleted = reader.GetBoolean("IsDeleted"); joblisting = new JobListing() { ID = _id, CompanyID = _companyid, Title = _title, PostalCode = _postalcode, Country = _country, StateOrRegion = _state, City = _city, SalaryMin = _salarymin, SalaryMax = _salarymax, JobType = _jobtype, Remote = _remote, Description = _description, Skills = _skills, CreatedTime = _createtime, ModifiedTime = _modifiedtime, IsDeleted = _isdeleted }; } } } return joblisting; } public async Task GetJobListingsPastExipre() { List joblistings = new List(); using (MySqlConnection connection = GetConnection()) { await connection.OpenAsync(); string command = @" SELECT ID, CompanyID FROM JobListing WHERE IsDeleted = FALSE AND CreatedTime < NOW() - INTERVAL 1 MONTH; "; MySqlCommand cmd = new MySqlCommand(command, connection); using (DbDataReader reader = await cmd.ExecuteReaderAsync()) { while (await reader.ReadAsync()) { int _id = reader.GetInt32("ID"); int _companyid = reader.GetInt32("CompanyID"); joblistings.Add(new JobListingDTO() { JobListingID = _id, CompanyID = _companyid }); } } } return joblistings.ToArray(); } public async Task SetJobListing(JobListing jobListing) { using (MySqlConnection connection = GetConnection()) { await connection.OpenAsync(); string command = @" INSERT INTO JobListing (ID,CompanyID,Title,PostalCode,Country,StateOrRegion,City,SalaryMin,SalaryMax,JobType,Remote,Description,CreatedTime,ModifiedTime,IsDeleted) VALUES (@ID,@CompanyID,@Title,@PostalCode,@Country,@StateOrRegion,@City,@SalaryMin,@SalaryMax,@JobType,@Remote,@Description,@CreatedTime,@ModifiedTime,@IsDeleted) ON DUPLICATE KEY UPDATE CompanyID = @CompanyID, Title = @Title, PostalCode = @PostalCode, Country = @Country, StateOrRegion = @StateOrRegion, City = @City, SalaryMin = @SalaryMin, SalaryMax = @SalaryMax, JobType = @JobType, Remote = @Remote, Description = @Description, ModifiedTime = @ModifiedTime, IsDeleted = @IsDeleted; "; MySqlCommand cmd = new MySqlCommand(command, connection); cmd.Parameters.AddWithValue("@ID", jobListing.ID); cmd.Parameters.AddWithValue("@CompanyID", jobListing.CompanyID); cmd.Parameters.AddWithValue("@Title", jobListing.Title); cmd.Parameters.AddWithValue("@PostalCode", jobListing.PostalCode); cmd.Parameters.AddWithValue("@Country", jobListing.Country); cmd.Parameters.AddWithValue("@StateOrRegion", jobListing.StateOrRegion); cmd.Parameters.AddWithValue("@City", jobListing.City); cmd.Parameters.AddWithValue("@SalaryMin", jobListing.SalaryMin); cmd.Parameters.AddWithValue("@SalaryMax", jobListing.SalaryMax); cmd.Parameters.AddWithValue("@JobType", jobListing.JobType); cmd.Parameters.AddWithValue("@Remote", jobListing.Remote); cmd.Parameters.AddWithValue("@Description", jobListing.Description); cmd.Parameters.AddWithValue("@CreatedTime", DateTime.UtcNow); cmd.Parameters.AddWithValue("@ModifiedTime", DateTime.UtcNow); cmd.Parameters.AddWithValue("@IsDeleted", jobListing.IsDeleted); await cmd.ExecuteNonQueryAsync(); foreach (JobListingSkill cur in jobListing.Skills) { await SetJobListingSkills(cur); } } } public async Task DeleteJobListingsPastExipre() { using (MySqlConnection connection = GetConnection()) { await connection.OpenAsync(); string command = @" UPDATE JobListing SET IsDeleted = TRUE WHERE IsDeleted = FALSE AND CreatedTime < NOW() - INTERVAL 1 MONTH; "; MySqlCommand cmd = new MySqlCommand(command, connection); await cmd.ExecuteNonQueryAsync(); } } public async Task DeleteJobListing(int JobListingID) { using (MySqlConnection connection = GetConnection()) { MySqlCommand cmd; await connection.OpenAsync(); string command = @" UPDATE JobListing SET IsDeleted = TRUE WHERE ID = @ID; "; cmd = new MySqlCommand(command, connection); cmd.Parameters.AddWithValue("@ID", JobListingID); await cmd.ExecuteNonQueryAsync(); } } } }