From 84fb9f14b10b9f02c7635c477f508be682c7539f Mon Sep 17 00:00:00 2001 From: Derek Holloway Date: Sun, 13 Jul 2025 21:31:01 -0700 Subject: [PATCH] Start work on crazy SQL requests. with multithreading --- src/Server/Services/DatabaseService/Resume.cs | 215 ++++++++++++++++++ 1 file changed, 215 insertions(+) create mode 100644 src/Server/Services/DatabaseService/Resume.cs diff --git a/src/Server/Services/DatabaseService/Resume.cs b/src/Server/Services/DatabaseService/Resume.cs new file mode 100644 index 0000000..d322c48 --- /dev/null +++ b/src/Server/Services/DatabaseService/Resume.cs @@ -0,0 +1,215 @@ +using BoredCareers.Entities; +using MySql.Data.MySqlClient; +using System.Data; +using System.Data.Common; + +namespace BoredCareers.Services.DatabaseService { + public partial class DatabaseService { + + public async Task GetResumes(int AccountID) { + List resumes = new List(); + using (MySqlConnection connection = GetConnection()) { + connection.Open(); + string command = @" + SELECT * + FROM Resume + WHERE AccountID = @AccountID; + "; + + MySqlCommand cmd = new MySqlCommand(command, connection); + cmd.Parameters.AddWithValue("@AccountID", AccountID); + + using (DbDataReader reader = await cmd.ExecuteReaderAsync()) { + while (await reader.ReadAsync()) { + if (reader == null) { + break; + } + + int _id = reader.GetInt32("ID"); + int _accountid = reader.GetInt32("AccountID"); + string _name = reader.GetString("Name"); + string _field = reader.GetString("Field"); + string _email = reader.GetString("Email"); + string _phonenumber = reader.GetString("PhoneNumber"); + string _postalcode = reader.GetString("PostalCode"); + string _country = reader.GetString("Country"); + string _state = reader.GetString("StateOrRegion"); + string _city = reader.GetString("City"); + bool _isactive = reader.GetBoolean("IsActive"); + + resumes.Add( new Resume() { + ID = _id, + AccountID = _accountid, + Name = _name, + Field = _field, + Email = _email, + PhoneNumber = _phonenumber, + PostalCode = _postalcode, + Country = _country, + StateOrRegion = _state, + City = _city, + IsActive = _isactive + } ); + } + } + } + return resumes.ToArray(); + } + + public async Task GetResume(int ResumeID) { + Resume? resume = null; + using (MySqlConnection connection = GetConnection()) { + + connection.Open(); + MySqlCommand resumeCommand = new MySqlCommand("SELECT * FROM Resume WHERE ID = @ResumeID;", connection); + MySqlCommand ResumeExperienceCommand = new MySqlCommand("SELECT * FROM ResumeExperience WHERE ResumeID = @ResumeID;", connection); + MySqlCommand ResumeMillitaryCommand = new MySqlCommand("SELECT * FROM ResumeMillitary WHERE ResumeID = @ResumeID;", connection); + MySqlCommand ResumeEducationCommand = new MySqlCommand("SELECT * FROM ResumeEducation WHERE ResumeID = @ResumeID;", connection); + MySqlCommand ResumeSkillCommand = new MySqlCommand("SELECT * FROM ResumeSkill WHERE ResumeID = @ResumeID;", connection); + MySqlCommand ResumeLanguageCommand = new MySqlCommand("SELECT * FROM ResumeLanguage WHERE ResumeID = @ResumeID;", connection); + MySqlCommand ResumeCertificationCommand = new MySqlCommand("SELECT * FROM ResumeCertification WHERE ResumeID = @ResumeID;", connection); + MySqlCommand ResumeProjectCommand = new MySqlCommand("SELECT * FROM ResumeProject WHERE ResumeID = @ResumeID;", connection); + + resumeCommand.Parameters.AddWithValue("@ResumeID", ResumeID); + ResumeExperienceCommand.Parameters.AddWithValue("@ResumeID", ResumeID); + ResumeMillitaryCommand.Parameters.AddWithValue("@ResumeID", ResumeID); + ResumeEducationCommand.Parameters.AddWithValue("@ResumeID", ResumeID); + ResumeSkillCommand.Parameters.AddWithValue("@ResumeID", ResumeID); + ResumeLanguageCommand.Parameters.AddWithValue("@ResumeID", ResumeID); + ResumeCertificationCommand.Parameters.AddWithValue("@ResumeID", ResumeID); + ResumeProjectCommand.Parameters.AddWithValue("@ResumeID", ResumeID); + + Task resumeReader = resumeCommand.ExecuteReaderAsync(); + Task ResumeExperienceReader = ResumeExperienceCommand.ExecuteReaderAsync(); + Task ResumeMillitaryReader = ResumeMillitaryCommand.ExecuteReaderAsync(); + Task ResumeEducationReader = ResumeEducationCommand.ExecuteReaderAsync(); + Task ResumeSkillReader = ResumeSkillCommand.ExecuteReaderAsync(); + Task ResumeLanguageReader = ResumeLanguageCommand.ExecuteReaderAsync(); + Task ResumeCertificationReader = ResumeCertificationCommand.ExecuteReaderAsync(); + Task ResumeProjectnReader = ResumeProjectCommand.ExecuteReaderAsync(); + + await Task.WhenAll(resumeReader, ResumeExperienceReader, ResumeMillitaryReader, ResumeEducationReader, ResumeSkillReader, ResumeLanguageReader, ResumeCertificationReader, ResumeProjectnReader); + + using (DbDataReader reader = await resumeReader) { + while (await reader.ReadAsync()) { + if (reader == null) { + break; + } + + int _id = reader.GetInt32("ID"); + int _accountid = reader.GetInt32("AccountID"); + string _name = reader.GetString("Name"); + string _field = reader.GetString("Field"); + string _email = reader.GetString("Email"); + string _phonenumber = reader.GetString("PhoneNumber"); + string _postalcode = reader.GetString("PostalCode"); + string _country = reader.GetString("Country"); + string _state = reader.GetString("StateOrRegion"); + string _city = reader.GetString("City"); + bool _isactive = reader.GetBoolean("IsActive"); + + resume = new Resume() { + ID = _id, + AccountID = _accountid, + Name = _name, + Field = _field, + Email = _email, + PhoneNumber = _phonenumber, + PostalCode = _postalcode, + Country = _country, + StateOrRegion = _state, + City = _city, + IsActive = _isactive + }; + } + } + + using (DbDataReader reader = await ResumeExperienceReader) { + // Need to run ResumeExperienceBullet after + + } + + using (DbDataReader reader = await ResumeMillitaryReader) { + // Need to run ResumeMillitaryBullet after + + } + + using (DbDataReader reader = await ResumeEducationReader) { + + } + + using (DbDataReader reader = await ResumeSkillReader) { + + } + + using (DbDataReader reader = await ResumeLanguageReader) { + + } + + using (DbDataReader reader = await ResumeCertificationReader) { + + } + + using (DbDataReader reader = await ResumeProjectnReader) { + + } + } + return resume; + } + + public async Task SetResume( Resume resume ) { + using( MySqlConnection connection = GetConnection() ) { + connection.Open(); + + string command = @" + INSERT INTO Account + (ID,UserName,Email,EmailVerified,PasswordHash,FailedPasswordLock,PasswordAttempts,CurrentPasswordAttempts,Role,EmailToken,DataServer) + VALUES + (@ID,@UserName,@Email,@EmailVerified,@PasswordHash,@FailedPasswordLock,@PasswordAttempts,@CurrentPasswordAttempts,@Role,@EmailToken,@DataServer); + ON DUPLICATE KEY UPDATE + UserName = @UserName, + Email = @Email, + EmailVerified = @EmailVerified, + PasswordHash = @PasswordHash, + FailedPasswordLock = @FailedPasswordLock, + PasswordAttempts = @PasswordAttempts, + CurrentPasswordAttempts = @CurrentPasswordAttempts, + Role = @Role, + EmailToken = @EmailToken; + DataServer = @DataServer; + "; + + MySqlCommand cmd = new MySqlCommand( command , connection); + cmd.Parameters.AddWithValue("@ID", Profile.ID); + cmd.Parameters.AddWithValue("@UserName", Profile.UserName); + cmd.Parameters.AddWithValue("@Email", Profile.Email); + cmd.Parameters.AddWithValue("@EmailVerified", Profile.EmailVerified); + cmd.Parameters.AddWithValue("@PasswordHash", Profile.PasswordHash); + cmd.Parameters.AddWithValue("@FailedPasswordLock", Profile.FailedPasswordLock); + cmd.Parameters.AddWithValue("@PasswordAttempts", Profile.PasswordAttempts); + cmd.Parameters.AddWithValue("@CurrentPasswordAttempts", Profile.CurrentPasswordAttempts); + cmd.Parameters.AddWithValue("@Role", Profile.Role); + cmd.Parameters.AddWithValue("@EmailToken", Profile.EmailToken); + cmd.Parameters.AddWithValue("@DataServer", Profile.DataServer); + + await cmd.ExecuteNonQueryAsync(); + } + } + + public async Task DeleteResume( int ID ) { + using( MySqlConnection connection = GetConnection() ) { + MySqlCommand cmd; + connection.Open(); + + string command = @" + DELETE FROM Resume WHERE ID = @ID; + "; + cmd = new MySqlCommand( command, connection ); + cmd.Parameters.AddWithValue("@ID", ID); + + await cmd.ExecuteNonQueryAsync(); + } + } + + } +}