working #28

Merged
derek merged 8 commits from working into main 2025-08-14 21:51:05 -07:00
2 changed files with 90 additions and 73 deletions
Showing only changes of commit 88847f0ddc - Show all commits
+37 -13
View File
@@ -119,19 +119,28 @@ namespace BoredCareers.Services.DatabaseService {
using (var conn = GetConnection()) {
await conn.OpenAsync();
// Set ResumeID on layer 1 nodes
// Set ResumeID on all nodes
int _ResumeID = await SetResume(conn, resume);
if (resume.Millitary != null) { resume.Millitary.ResumeID = _ResumeID; }
foreach (ResumeExperience cur in resume.Experience) { cur.ResumeID = _ResumeID; }
if (resume.Millitary != null) {
resume.Millitary.ResumeID = _ResumeID;
foreach (ResumeMilitaryBullet cur in resume.Millitary.MillitaryBullets) {
cur.ResumeID = _ResumeID;
}
}
foreach (ResumeEducation cur in resume.Educations) { cur.ResumeID = _ResumeID; }
foreach (ResumeSkill cur in resume.Skills) { cur.ResumeID = _ResumeID; }
foreach (ResumeLanguage cur in resume.Languages) { cur.ResumeID = _ResumeID; }
foreach (ResumeCertification cur in resume.Certification) { cur.ResumeID = _ResumeID; }
foreach (ResumeProject cur in resume.Projects) { cur.ResumeID = _ResumeID; }
foreach (ResumeExperience cur in resume.Experience) {
cur.ResumeID = _ResumeID;
foreach (ResumeExperienceBullet us in cur.ExperienceBullets) {
us.ResumeID = _ResumeID;
}
}
// Async process all non child node SQL sets
Task[] tasks = [
SetResumeExperience(conn, resume.Experience),
SetResumeMilitary(conn, resume.Millitary),
SetResumeEducation(conn, resume.Educations),
SetResumeSkills(conn, resume.Skills),
SetResumeLanguages(conn, resume.Languages),
@@ -140,17 +149,32 @@ namespace BoredCareers.Services.DatabaseService {
];
await Task.WhenAll(tasks);
List<ResumeExperienceBullet> bullets = new List<ResumeExperienceBullet>();
// Setup military task
if (resume.Millitary != null) {
ResumeMilitary militaryTask = await SetResumeMilitary(conn, resume.Millitary);
foreach (ResumeMilitaryBullet cur in resume.Millitary.MillitaryBullets) {
cur.ResumeMilitaryID = Convert.ToInt32(militaryTask.ID);
}
await SetResumeMilitaryBullets(conn, resume.Millitary.MillitaryBullets);
}
// Setup async process all experience tasks
List<Task<ResumeExperience>> experienceTasks = new List<Task<ResumeExperience>>();
foreach (ResumeExperience cur in resume.Experience) {
foreach (ResumeExperienceBullet bullet in cur.ExperienceBullets) {
bullets.Add(bullet);
experienceTasks.Add(SetResumeExperience(conn, cur));
}
await Task.WhenAll(experienceTasks);
// Assuming they are returned in the same order they are sent
List<Task> experienceBulletTasks = new List<Task>();
for (int i = 0; i < experienceTasks.Count; i++) {
ResumeExperience self = await experienceTasks[i];
foreach (ResumeExperienceBullet cur in resume.Experience[i].ExperienceBullets) {
cur.ResumeExperienceID = Convert.ToInt32(self.ID);
experienceBulletTasks.Add(SetResumeExperienceBullets(conn, cur));
}
}
Task ResumeExperienceBulletTask = SetResumeExperienceBullets(ResumeExperienceBulletConnection, bullets.ToArray());
Task ResumeMilitaryBulletTask = SetResumeMilitaryBullets(ResumeMilitaryBulletConnection, resume.Millitary.MillitaryBullets);
return resume;
await Task.WhenAll(experienceBulletTasks);
}
}
@@ -49,8 +49,7 @@ namespace BoredCareers.Services.DatabaseService {
}
}
public async Task SetResumeExperienceBullets(MySqlConnection connection, ResumeExperienceBullet[] bullets) {
foreach (ResumeExperienceBullet cur in bullets) {
public async Task SetResumeExperienceBullets(MySqlConnection connection, ResumeExperienceBullet bullet) {
string command = @"
INSERT INTO Resume
(ID,ResumeID,ResumeExperienceID,JobFunction)
@@ -63,17 +62,15 @@ namespace BoredCareers.Services.DatabaseService {
";
MySqlCommand cmd = new MySqlCommand(command, connection);
cmd.Parameters.AddWithValue("@ID", cur.ID);
cmd.Parameters.AddWithValue("@ResumeID", cur.ResumeID);
cmd.Parameters.AddWithValue("@ResumeExperienceID", cur.ResumeExperienceID);
cmd.Parameters.AddWithValue("@JobFunction", cur.JobFunction);
cmd.Parameters.AddWithValue("@ID", bullet.ID);
cmd.Parameters.AddWithValue("@ResumeID", bullet.ResumeID);
cmd.Parameters.AddWithValue("@ResumeExperienceID", bullet.ResumeExperienceID);
cmd.Parameters.AddWithValue("@JobFunction", bullet.JobFunction);
await cmd.ExecuteNonQueryAsync();
}
}
public async Task<int> SetResumeExperience(MySqlConnection connection, ResumeExperience[] experiences) {
foreach (ResumeExperience cur in experiences) {
public async Task<ResumeExperience> SetResumeExperience(MySqlConnection connection, ResumeExperience experiences) {
string command = @"
INSERT INTO Resume
(ID,ResumeID,JobTitle,Company,PostalCode,Country,StateOrRegion,City,DateStarted,StillEmployed,DateEnded)
@@ -95,23 +92,20 @@ namespace BoredCareers.Services.DatabaseService {
";
MySqlCommand cmd = new MySqlCommand(command, connection);
cmd.Parameters.AddWithValue("@ID", cur.ID);
cmd.Parameters.AddWithValue("@ResumeID", cur.ResumeID);
cmd.Parameters.AddWithValue("@JobTitle", cur.JobTitle);
cmd.Parameters.AddWithValue("@Company", cur.Company);
cmd.Parameters.AddWithValue("@PostalCode", cur.PostalCode);
cmd.Parameters.AddWithValue("@DateStarted", cur.DateStarted.ToUniversalTime());
cmd.Parameters.AddWithValue("@StillEmployed", cur.StillEmployed);
cmd.Parameters.AddWithValue("@DateEnded", cur.DateEnded.ToUniversalTime());
cmd.Parameters.AddWithValue("@ID", experiences.ID);
cmd.Parameters.AddWithValue("@ResumeID", experiences.ResumeID);
cmd.Parameters.AddWithValue("@JobTitle", experiences.JobTitle);
cmd.Parameters.AddWithValue("@Company", experiences.Company);
cmd.Parameters.AddWithValue("@PostalCode", experiences.PostalCode);
cmd.Parameters.AddWithValue("@DateStarted", experiences.DateStarted.ToUniversalTime());
cmd.Parameters.AddWithValue("@StillEmployed", experiences.StillEmployed);
cmd.Parameters.AddWithValue("@DateEnded", experiences.DateEnded.ToUniversalTime());
object? result = await cmd.ExecuteScalarAsync();
if (cur.ID != null && cur.ID != 0) {
return Convert.ToInt32(cur.ID);
} else {
cmd.CommandText = "";
return Convert.ToInt32(result);
}
if (experiences.ID == null) {
experiences.ID = Convert.ToInt32(result);
}
return experiences;
}
public async Task SetResumeMilitaryBullets(MySqlConnection connection, ResumeMilitaryBullet[] bullets) {
@@ -139,7 +133,7 @@ namespace BoredCareers.Services.DatabaseService {
}
}
public async Task<int> SetResumeMilitary(MySqlConnection connection, ResumeMilitary? military) {
public async Task<ResumeMilitary> SetResumeMilitary(MySqlConnection connection, ResumeMilitary? military) {
if (military != null) {
string command = @"
INSERT INTO Resume
@@ -167,13 +161,12 @@ namespace BoredCareers.Services.DatabaseService {
cmd.Parameters.AddWithValue("@DateEnded", military.DateEnded.ToUniversalTime());
object? result = await cmd.ExecuteScalarAsync();
if (military.ID != null && military.ID != 0) {
return Convert.ToInt32(military.ID);
} else {
cmd.CommandText = "";
return Convert.ToInt32(result);
if (military.ID == null) {
military.ID = Convert.ToInt32(result);
}
return military;
}
return new ResumeMilitary();
}
public async Task SetResumeEducation(MySqlConnection connection, ResumeEducation[] educations) {