diff --git a/src/Client/src/app/pages/resumes/editor/editor.component.html b/src/Client/src/app/pages/resumes/editor/editor.component.html index 179d15c..c520e48 100644 --- a/src/Client/src/app/pages/resumes/editor/editor.component.html +++ b/src/Client/src/app/pages/resumes/editor/editor.component.html @@ -8,6 +8,7 @@ +

Public:

@@ -16,7 +17,7 @@
- @for(experience of resume.experience; track experience.trackUUID ){ + @for(experience of resume.experiences; track experience.trackUUID ){
@@ -53,7 +54,7 @@ } - @for(military of resume.military.millitaryBullets; track military.trackUUID ){ + @for(military of resume.military.militaryBullets; track military.trackUUID ){
@@ -66,7 +67,7 @@
- @for(education of resume.education; track education.trackUUID){ + @for(education of resume.educations; track education.trackUUID){
@@ -113,7 +114,7 @@
- @for(cert of resume.certification; track cert.trackUUID){ + @for(cert of resume.certifications; track cert.trackUUID){
diff --git a/src/Client/src/app/pages/resumes/editor/editor.component.ts b/src/Client/src/app/pages/resumes/editor/editor.component.ts index f7aa2f0..925131e 100644 --- a/src/Client/src/app/pages/resumes/editor/editor.component.ts +++ b/src/Client/src/app/pages/resumes/editor/editor.component.ts @@ -57,13 +57,13 @@ export class ResumesEditorComponent { } addExperience(){ - this.resume.experience.push( new ResumeExperience ); + this.resume.experiences.push( new ResumeExperience ); } delExperience(self: ResumeExperience){ - for(let i=0; i[] tasks = [ @@ -94,21 +94,21 @@ namespace BoredCareers.Services.DatabaseService { ResumeCertification[] certs = await GetResumeCertification(await tasks[7]); ResumeProject[] projects = await GetResumeProjects(await tasks[8]); - Dictionary groupedExperienceBullets = bullets.GroupBy(b => b.ResumeExperienceID).ToDictionary(g => g.Key, g => g.ToArray()); + Dictionary groupedExperienceBullets = bullets.GroupBy(b => Convert.ToInt32(b.ResumeExperienceID)).ToDictionary(g => g.Key, g => g.ToArray()); foreach (var exp in experience) { exp.ExperienceBullets = groupedExperienceBullets.TryGetValue(Convert.ToInt32(exp.ID), out var b) ? b : Array.Empty(); } - resume.Experience = experience; + resume.Experiences = experience; resume.Educations = education; resume.Skills = skills; resume.Languages = languages; - resume.Certification = certs; + resume.Certifications = certs; resume.Projects = projects; if (military != null) { - military.MillitaryBullets = militaryBullets; - resume.Millitary = military; + military.MilitaryBullets = militaryBullets; + resume.Military = military; } return resume; @@ -116,66 +116,62 @@ namespace BoredCareers.Services.DatabaseService { } public async Task SetResume(Resume resume) { - using (var conn = GetConnection()) { - await conn.OpenAsync(); - - // Set ResumeID on all nodes - int _ResumeID = await SetResume(conn, resume); - 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) { + // Set ResumeID on all nodes + int _ResumeID = await SetResumeHeader(resume); + if (resume.Military != null) { + resume.Military.ResumeID = _ResumeID; + foreach (ResumeMilitaryBullet cur in resume.Military.MilitaryBullets) { cur.ResumeID = _ResumeID; - foreach (ResumeExperienceBullet us in cur.ExperienceBullets) { - us.ResumeID = _ResumeID; - } } - - // Async process all non child node SQL sets - Task[] tasks = [ - SetResumeEducation(conn, resume.Educations), - SetResumeSkills(conn, resume.Skills), - SetResumeLanguages(conn, resume.Languages), - SetResumeCertification(conn, resume.Certification), - SetResumeProjects(conn, resume.Projects) - ]; - await Task.WhenAll(tasks); - - // 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> experienceTasks = new List>(); - foreach (ResumeExperience cur in resume.Experience) { - experienceTasks.Add(SetResumeExperience(conn, cur)); - } - await Task.WhenAll(experienceTasks); - - // Assuming they are returned in the same order they are sent - List experienceBulletTasks = new List(); - 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)); - } - } - await Task.WhenAll(experienceBulletTasks); } + 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.Certifications) { cur.ResumeID = _ResumeID; } + foreach (ResumeProject cur in resume.Projects) { cur.ResumeID = _ResumeID; } + foreach (ResumeExperience cur in resume.Experiences) { + cur.ResumeID = _ResumeID; + foreach (ResumeExperienceBullet us in cur.ExperienceBullets) { + us.ResumeID = _ResumeID; + } + } + + // Async process all non child node SQL sets + Task[] tasks = [ + SetResumeEducation(resume.Educations), + SetResumeSkills(resume.Skills), + SetResumeLanguages(resume.Languages), + SetResumeCertification(resume.Certifications), + SetResumeProjects(resume.Projects) + ]; + await Task.WhenAll(tasks); + + // Setup military task + if (resume.Military != null) { + ResumeMilitary militaryTask = await SetResumeMilitary(resume.Military); + foreach (ResumeMilitaryBullet cur in resume.Military.MilitaryBullets) { + cur.ResumeMilitaryID = Convert.ToInt32(militaryTask.ID); + } + await SetResumeMilitaryBullets(resume.Military.MilitaryBullets); + } + + // Setup async process all experience tasks + List> experienceTasks = new List>(); + foreach (ResumeExperience cur in resume.Experiences) { + experienceTasks.Add(SetResumeExperience(cur)); + } + await Task.WhenAll(experienceTasks); + + // Assuming they are returned in the same order they are sent + List experienceBulletTasks = new List(); + for (int i = 0; i < experienceTasks.Count; i++) { + ResumeExperience self = await experienceTasks[i]; + foreach (ResumeExperienceBullet cur in resume.Experiences[i].ExperienceBullets) { + cur.ResumeExperienceID = Convert.ToInt32(self.ID); + experienceBulletTasks.Add(SetResumeExperienceBullets(cur)); + } + } + await Task.WhenAll(experienceBulletTasks); } public async Task DeleteResume( int ResumeID ) { diff --git a/src/Server/Services/DatabaseService/ResumeParts/GetResumeParts.cs b/src/Server/Services/DatabaseService/ResumeParts/GetResumeParts.cs index 152e5e3..b0f4409 100644 --- a/src/Server/Services/DatabaseService/ResumeParts/GetResumeParts.cs +++ b/src/Server/Services/DatabaseService/ResumeParts/GetResumeParts.cs @@ -5,7 +5,7 @@ using System.Data.Common; namespace BoredCareers.Services.DatabaseService { public partial class DatabaseService { - public async Task GetResume(DbDataReader reader) { + public async Task GetResumeHeader(DbDataReader reader) { while (await reader.ReadAsync()) { if (reader == null) { break; } int _id = reader.GetInt32("ID"); diff --git a/src/Server/Services/DatabaseService/ResumeParts/SetResumeParts.cs b/src/Server/Services/DatabaseService/ResumeParts/SetResumeParts.cs index 47054ab..2c4833e 100644 --- a/src/Server/Services/DatabaseService/ResumeParts/SetResumeParts.cs +++ b/src/Server/Services/DatabaseService/ResumeParts/SetResumeParts.cs @@ -4,303 +4,336 @@ using MySql.Data.MySqlClient; namespace BoredCareers.Services.DatabaseService { public partial class DatabaseService { - public async Task SetResume(MySqlConnection connection, Resume resume) { - string command = @" - INSERT INTO Resume - (ID,AccountID,Title,Name,Field,Email,PhoneNumber,PostalCode,Country,StateOrRegion,City,IsActive) - VALUES - (@ID,@AccountID,@Title,@Name,@Field,@Email,@PhoneNumber,@PostalCode,@Country,@StateOrRegion,@City,@IsActive) - ON DUPLICATE KEY UPDATE - AccountID = @AccountID, - Title = @Title, - Name = @Name, - Field = @Field, - Email = @Email, - PhoneNumber = @PhoneNumber, - PostalCode = @PostalCode, - Country = @Country, - StateOrRegion = @StateOrRegion, - City = @City, - IsActive = @IsActive; - - SELECT LAST_INSERT_ID(); - "; - - MySqlCommand cmd = new MySqlCommand(command, connection); - cmd.Parameters.AddWithValue("@ID", resume.ID); - cmd.Parameters.AddWithValue("@AccountID", resume.AccountID); - cmd.Parameters.AddWithValue("@Title", resume.Title); - cmd.Parameters.AddWithValue("@Name", resume.Name); - cmd.Parameters.AddWithValue("@Field", resume.Field); - cmd.Parameters.AddWithValue("@Email", resume.Email); - cmd.Parameters.AddWithValue("@PhoneNumber", resume.PhoneNumber); - cmd.Parameters.AddWithValue("@PostalCode", resume.PostalCode); - cmd.Parameters.AddWithValue("@Country", resume.Country); - cmd.Parameters.AddWithValue("@StateOrRegion", resume.StateOrRegion); - cmd.Parameters.AddWithValue("@City", resume.City); - cmd.Parameters.AddWithValue("@IsActive", resume.IsActive); - object? result = await cmd.ExecuteScalarAsync(); - - if (resume.ID != null && resume.ID != 0) { - return Convert.ToInt32(resume.ID); - } else { - cmd.CommandText = ""; - return Convert.ToInt32(result); - } - } - - public async Task SetResumeExperienceBullets(MySqlConnection connection, ResumeExperienceBullet bullet) { - string command = @" - INSERT INTO Resume - (ID,ResumeID,ResumeExperienceID,JobFunction) - VALUES - (@ID,@ResumeID,@ResumeExperienceID,@JobFunction) - ON DUPLICATE KEY UPDATE - ResumeID = @ResumeID, - ResumeExperienceID = @ResumeExperienceID, - JobFunction = @JobFunction; - "; - - MySqlCommand cmd = new MySqlCommand(command, connection); - 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 SetResumeExperience(MySqlConnection connection, ResumeExperience experiences) { - string command = @" - INSERT INTO Resume - (ID,ResumeID,JobTitle,Company,PostalCode,Country,StateOrRegion,City,DateStarted,StillEmployed,DateEnded) - VALUES - (@ID,@ResumeID,@JobTitle,@Company,@PostalCode,@Country,@StateOrRegion,@City,@DateStarted,@StillEmployed,@DateEnded) - ON DUPLICATE KEY UPDATE - ResumeID = @ResumeID, - JobTitle = @JobTitle, - Company = @Company, - PostalCode = @PostalCode, - Country = @Country, - StateOrRegion = @StateOrRegion, - City = @City, - DateStarted = @DateStarted, - StillEmployed = @StillEmployed, - DateEnded = @DateEnded; - - SELECT LAST_INSERT_ID(); - "; - - MySqlCommand cmd = new MySqlCommand(command, connection); - 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 (experiences.ID == null) { - experiences.ID = Convert.ToInt32(result); - } - return experiences; - } - - public async Task SetResumeMilitaryBullets(MySqlConnection connection, ResumeMilitaryBullet[] bullets) { - foreach (ResumeMilitaryBullet cur in bullets) { + public async Task SetResumeHeader(Resume resume) { + using (var conn = GetConnection()) { + await conn.OpenAsync(); string command = @" INSERT INTO Resume - (ID,ResumeID,ResumeMilitaryID,Achievement) + (ID,AccountID,Title,Name,Field,Email,PhoneNumber,PostalCode,Country,StateOrRegion,City,IsActive) VALUES - (@ID,@ResumeID,@ResumeMilitaryID,@Achievement) + (@ID,@AccountID,@Title,@Name,@Field,@Email,@PhoneNumber,@PostalCode,@Country,@StateOrRegion,@City,@IsActive) ON DUPLICATE KEY UPDATE - ResumeID = @ResumeID, - ResumeMilitaryID = @ResumeMilitaryID, - Achievement = @Achievement, - Description = @Description; + AccountID = @AccountID, + Title = @Title, + Name = @Name, + Field = @Field, + Email = @Email, + PhoneNumber = @PhoneNumber, + PostalCode = @PostalCode, + Country = @Country, + StateOrRegion = @StateOrRegion, + City = @City, + IsActive = @IsActive; + + SELECT LAST_INSERT_ID(); "; - MySqlCommand cmd = new MySqlCommand(command, connection); - cmd.Parameters.AddWithValue("@ID", cur.ID); - cmd.Parameters.AddWithValue("@ResumeID", cur.ResumeID); - cmd.Parameters.AddWithValue("@ResumeMilitaryID", cur.ResumeMilitaryID); - cmd.Parameters.AddWithValue("@Achievement", cur.Achievement); - cmd.Parameters.AddWithValue("@Description", cur.Description); + MySqlCommand cmd = new MySqlCommand(command, conn); + cmd.Parameters.AddWithValue("@ID", resume.ID); + cmd.Parameters.AddWithValue("@AccountID", resume.AccountID); + cmd.Parameters.AddWithValue("@Title", resume.Title); + cmd.Parameters.AddWithValue("@Name", resume.Name); + cmd.Parameters.AddWithValue("@Field", resume.Field); + cmd.Parameters.AddWithValue("@Email", resume.Email); + cmd.Parameters.AddWithValue("@PhoneNumber", resume.PhoneNumber); + cmd.Parameters.AddWithValue("@PostalCode", resume.PostalCode); + cmd.Parameters.AddWithValue("@Country", resume.Country); + cmd.Parameters.AddWithValue("@StateOrRegion", resume.StateOrRegion); + cmd.Parameters.AddWithValue("@City", resume.City); + cmd.Parameters.AddWithValue("@IsActive", resume.IsActive); + object? result = await cmd.ExecuteScalarAsync(); + + if (resume.ID != null && resume.ID != 0) { + return Convert.ToInt32(resume.ID); + } else { + cmd.CommandText = ""; + return Convert.ToInt32(result); + } + } + } + + public async Task SetResumeExperienceBullets(ResumeExperienceBullet bullet) { + using (var conn = GetConnection()) { + await conn.OpenAsync(); + string command = @" + INSERT INTO ResumeExperienceBullet + (ID,ResumeID,ResumeExperienceID,JobFunction) + VALUES + (@ID,@ResumeID,@ResumeExperienceID,@JobFunction) + ON DUPLICATE KEY UPDATE + ResumeID = @ResumeID, + ResumeExperienceID = @ResumeExperienceID, + JobFunction = @JobFunction; + "; + + MySqlCommand cmd = new MySqlCommand(command, conn); + 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 SetResumeMilitary(MySqlConnection connection, ResumeMilitary? military) { - if (military != null) { + public async Task SetResumeExperience(ResumeExperience experiences) { + using (var conn = GetConnection()) { + await conn.OpenAsync(); string command = @" - INSERT INTO Resume - (ID,ResumeID,Country,Rank,DateStarted,StillServing,DateEnded) + INSERT INTO ResumeExperience + (ID,ResumeID,JobTitle,Company,PostalCode,Country,StateOrRegion,City,DateStarted,StillEmployed,DateEnded) VALUES - (@ID,@ResumeID,@Country,@Rank,@DateStarted,@StillServing,@DateEnded) + (@ID,@ResumeID,@JobTitle,@Company,@PostalCode,@Country,@StateOrRegion,@City,@DateStarted,@StillEmployed,@DateEnded) ON DUPLICATE KEY UPDATE ResumeID = @ResumeID, - Country = @Country, - Rank = @Rank, - DateStarted = @DateStarted, - StillServing = @StillServing, - DateEnded = @DateEnded; - - SELECT LAST_INSERT_ID(); - "; - - MySqlCommand cmd = new MySqlCommand(command, connection); - cmd.Parameters.AddWithValue("@ID", military.ID); - cmd.Parameters.AddWithValue("@ResumeID", military.ResumeID); - cmd.Parameters.AddWithValue("@Country", military.Country); - cmd.Parameters.AddWithValue("@Rank", military.Rank); - cmd.Parameters.AddWithValue("@DateStarted", military.DateStarted.ToUniversalTime()); - cmd.Parameters.AddWithValue("@StillServing", military.StillServing); - cmd.Parameters.AddWithValue("@DateEnded", military.DateEnded.ToUniversalTime()); - object? result = await cmd.ExecuteScalarAsync(); - - if (military.ID == null) { - military.ID = Convert.ToInt32(result); - } - return military; - } - return new ResumeMilitary(); - } - - public async Task SetResumeEducation(MySqlConnection connection, ResumeEducation[] educations) { - foreach (ResumeEducation cur in educations) { - string command = @" - INSERT INTO Resume - (ID,ResumeID,DegreeType,DegreeField,School,PostalCode,Country,StateOrRegion,City,DateStarted,StillStudying,DateEnded) - VALUES - (@ID,@ResumeID,@DegreeType,@DegreeField,@School,@PostalCode,@Country,@StateOrRegion,@City,@DateStarted,@StillStudying,@DateEnded) - ON DUPLICATE KEY UPDATE - ResumeID = @ResumeID, - DegreeType = @DegreeType, - DegreeField = @DegreeField, - School = @School, + JobTitle = @JobTitle, + Company = @Company, PostalCode = @PostalCode, Country = @Country, StateOrRegion = @StateOrRegion, City = @City, DateStarted = @DateStarted, - StillStudying = @StillStudying, + StillEmployed = @StillEmployed, DateEnded = @DateEnded; + + SELECT LAST_INSERT_ID(); "; - MySqlCommand cmd = new MySqlCommand(command, connection); - cmd.Parameters.AddWithValue("@ID", cur.ID); - cmd.Parameters.AddWithValue("@ResumeID", cur.ResumeID); - cmd.Parameters.AddWithValue("@DegreeType", cur.DegreeType); - cmd.Parameters.AddWithValue("@DegreeField", cur.DegreeField); - cmd.Parameters.AddWithValue("@School", cur.School); - cmd.Parameters.AddWithValue("@PostalCode", cur.PostalCode); - cmd.Parameters.AddWithValue("@Country", cur.Country); - cmd.Parameters.AddWithValue("@StateOrRegion", cur.StateOrRegion); - cmd.Parameters.AddWithValue("@City", cur.City); - cmd.Parameters.AddWithValue("@DateStarted", cur.DateStarted.ToUniversalTime()); - cmd.Parameters.AddWithValue("@StillStudying", cur.StillStudying); - cmd.Parameters.AddWithValue("@DateEnded", cur.DateEnded.ToUniversalTime()); + MySqlCommand cmd = new MySqlCommand(command, conn); + 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("@Country", experiences.Country); + cmd.Parameters.AddWithValue("@StateOrRegion", experiences.StateOrRegion); + cmd.Parameters.AddWithValue("@City", experiences.City); + 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(); - await cmd.ExecuteNonQueryAsync(); + if (experiences.ID == null) { + experiences.ID = Convert.ToInt32(result); + } + return experiences; } } - public async Task SetResumeSkills(MySqlConnection connection, ResumeSkill[] skills) { - foreach (ResumeSkill cur in skills) { - string command = @" - INSERT INTO Resume - (ID,ResumeID,Name,Description) - VALUES - (@ID,@ResumeID,@Name,@Description) - ON DUPLICATE KEY UPDATE - ResumeID = @ResumeID, - Name = @Name, - Description = @Description; - "; + public async Task SetResumeMilitaryBullets(ResumeMilitaryBullet[] bullets) { + using (var conn = GetConnection()) { + await conn.OpenAsync(); + foreach (ResumeMilitaryBullet cur in bullets) { + string command = @" + INSERT INTO ResumeMilitaryBullet + (ID,ResumeID,ResumeMilitaryID,Achievement) + VALUES + (@ID,@ResumeID,@ResumeMilitaryID,@Achievement) + ON DUPLICATE KEY UPDATE + ResumeID = @ResumeID, + ResumeMilitaryID = @ResumeMilitaryID, + Achievement = @Achievement, + Description = @Description; + "; - MySqlCommand cmd = new MySqlCommand(command, connection); - cmd.Parameters.AddWithValue("@ID", cur.ID); - cmd.Parameters.AddWithValue("@ResumeID", cur.ResumeID); - cmd.Parameters.AddWithValue("@Name", cur.Name); - cmd.Parameters.AddWithValue("@Description", cur.Description); + MySqlCommand cmd = new MySqlCommand(command, conn); + cmd.Parameters.AddWithValue("@ID", cur.ID); + cmd.Parameters.AddWithValue("@ResumeID", cur.ResumeID); + cmd.Parameters.AddWithValue("@ResumeMilitaryID", cur.ResumeMilitaryID); + cmd.Parameters.AddWithValue("@Achievement", cur.Achievement); + cmd.Parameters.AddWithValue("@Description", cur.Description); - await cmd.ExecuteNonQueryAsync(); + await cmd.ExecuteNonQueryAsync(); + } } } - public async Task SetResumeLanguages(MySqlConnection connection, ResumeLanguage[] languages) { - foreach (ResumeLanguage cur in languages) { - string command = @" - INSERT INTO Resume - (ID,ResumeID,Language,Proficiency) - VALUES - (@ID,@ResumeID,@Language,@Proficiency) - ON DUPLICATE KEY UPDATE - ResumeID = @ResumeID, - Language = @Language, - Proficiency = @Proficiency; - "; + public async Task SetResumeMilitary(ResumeMilitary? military) { + using (var conn = GetConnection()) { + await conn.OpenAsync(); + if (military != null) { + string command = @" + INSERT INTO ResumeMilitary + (ID,ResumeID,Country,`Rank`,DateStarted,StillServing,DateEnded) + VALUES + (@ID,@ResumeID,@Country,@Rank,@DateStarted,@StillServing,@DateEnded) + ON DUPLICATE KEY UPDATE + ResumeID = @ResumeID, + Country = @Country, + `Rank` = @Rank, + DateStarted = @DateStarted, + StillServing = @StillServing, + DateEnded = @DateEnded; - MySqlCommand cmd = new MySqlCommand(command, connection); - cmd.Parameters.AddWithValue("@ID", cur.ID); - cmd.Parameters.AddWithValue("@ResumeID", cur.ResumeID); - cmd.Parameters.AddWithValue("@Language", cur.Language); - cmd.Parameters.AddWithValue("@Proficiency", cur.Proficiency); + SELECT LAST_INSERT_ID(); + "; - await cmd.ExecuteNonQueryAsync(); + MySqlCommand cmd = new MySqlCommand(command, conn); + cmd.Parameters.AddWithValue("@ID", military.ID); + cmd.Parameters.AddWithValue("@ResumeID", military.ResumeID); + cmd.Parameters.AddWithValue("@Country", military.Country); + cmd.Parameters.AddWithValue("@Rank", military.Rank); + cmd.Parameters.AddWithValue("@DateStarted", military.DateStarted.ToUniversalTime()); + cmd.Parameters.AddWithValue("@StillServing", military.StillServing); + cmd.Parameters.AddWithValue("@DateEnded", military.DateEnded.ToUniversalTime()); + object? result = await cmd.ExecuteScalarAsync(); + + if (military.ID == null) { + military.ID = Convert.ToInt32(result); + } + return military; + } + return new ResumeMilitary(); } } - public async Task SetResumeCertification(MySqlConnection connection, ResumeCertification[] certifications) { - foreach (ResumeCertification cur in certifications) { - string command = @" - INSERT INTO Resume - (ID,ResumeID,Name,VerificationURL,Description) - VALUES - (@ID,@ResumeID,@Name,@VerificationURL,@Description) - ON DUPLICATE KEY UPDATE - ResumeID = @ResumeID, - Name = @DegreeNameType, - VerificationURL = @VerificationURL, - Description = @Description; - "; + public async Task SetResumeEducation(ResumeEducation[] educations) { + using (var conn = GetConnection()) { + await conn.OpenAsync(); + foreach (ResumeEducation cur in educations) { + string command = @" + INSERT INTO ResumeEducation + (ID,ResumeID,DegreeType,DegreeField,School,PostalCode,Country,StateOrRegion,City,DateStarted,StillStudying,DateEnded) + VALUES + (@ID,@ResumeID,@DegreeType,@DegreeField,@School,@PostalCode,@Country,@StateOrRegion,@City,@DateStarted,@StillStudying,@DateEnded) + ON DUPLICATE KEY UPDATE + ResumeID = @ResumeID, + DegreeType = @DegreeType, + DegreeField = @DegreeField, + School = @School, + PostalCode = @PostalCode, + Country = @Country, + StateOrRegion = @StateOrRegion, + City = @City, + DateStarted = @DateStarted, + StillStudying = @StillStudying, + DateEnded = @DateEnded; + "; - MySqlCommand cmd = new MySqlCommand(command, connection); - cmd.Parameters.AddWithValue("@ID", cur.ID); - cmd.Parameters.AddWithValue("@ResumeID", cur.ResumeID); - cmd.Parameters.AddWithValue("@Name", cur.Name); - cmd.Parameters.AddWithValue("@VerificationURL", cur.VerificationURL); - cmd.Parameters.AddWithValue("@Description", cur.Description); + MySqlCommand cmd = new MySqlCommand(command, conn); + cmd.Parameters.AddWithValue("@ID", cur.ID); + cmd.Parameters.AddWithValue("@ResumeID", cur.ResumeID); + cmd.Parameters.AddWithValue("@DegreeType", cur.DegreeType); + cmd.Parameters.AddWithValue("@DegreeField", cur.DegreeField); + cmd.Parameters.AddWithValue("@School", cur.School); + cmd.Parameters.AddWithValue("@PostalCode", cur.PostalCode); + cmd.Parameters.AddWithValue("@Country", cur.Country); + cmd.Parameters.AddWithValue("@StateOrRegion", cur.StateOrRegion); + cmd.Parameters.AddWithValue("@City", cur.City); + cmd.Parameters.AddWithValue("@DateStarted", cur.DateStarted.ToUniversalTime()); + cmd.Parameters.AddWithValue("@StillStudying", cur.StillStudying); + cmd.Parameters.AddWithValue("@DateEnded", cur.DateEnded.ToUniversalTime()); - await cmd.ExecuteNonQueryAsync(); + await cmd.ExecuteNonQueryAsync(); + } } } - public async Task SetResumeProjects(MySqlConnection connection, ResumeProject[] projects) { - foreach (ResumeProject cur in projects) { - string command = @" - INSERT INTO Resume - (ID,ResumeID,Name,URL,Description) - VALUES - (@ID,@ResumeID,@Name,@URL,@Description) - ON DUPLICATE KEY UPDATE - ResumeID = @ResumeID, - Name = @Name, - URL = @URL, - Description = @Description; - "; + public async Task SetResumeSkills(ResumeSkill[] skills) { + using (var conn = GetConnection()) { + await conn.OpenAsync(); + foreach (ResumeSkill cur in skills) { + string command = @" + INSERT INTO ResumeSkill + (ID,ResumeID,Name,Description) + VALUES + (@ID,@ResumeID,@Name,@Description) + ON DUPLICATE KEY UPDATE + ResumeID = @ResumeID, + Name = @Name, + Description = @Description; + "; - MySqlCommand cmd = new MySqlCommand(command, connection); - cmd.Parameters.AddWithValue("@ID", cur.ID); - cmd.Parameters.AddWithValue("@ResumeID", cur.ResumeID); - cmd.Parameters.AddWithValue("@Name", cur.Name); - cmd.Parameters.AddWithValue("@URL", cur.URL); - cmd.Parameters.AddWithValue("@Description", cur.Description); + MySqlCommand cmd = new MySqlCommand(command, conn); + cmd.Parameters.AddWithValue("@ID", cur.ID); + cmd.Parameters.AddWithValue("@ResumeID", cur.ResumeID); + cmd.Parameters.AddWithValue("@Name", cur.Name); + cmd.Parameters.AddWithValue("@Description", cur.Description); - await cmd.ExecuteNonQueryAsync(); + await cmd.ExecuteNonQueryAsync(); + } + } + } + + public async Task SetResumeLanguages(ResumeLanguage[] languages) { + using (var conn = GetConnection()) { + await conn.OpenAsync(); + foreach (ResumeLanguage cur in languages) { + string command = @" + INSERT INTO ResumeLanguage + (ID,ResumeID,Language,Proficiency) + VALUES + (@ID,@ResumeID,@Language,@Proficiency) + ON DUPLICATE KEY UPDATE + ResumeID = @ResumeID, + Language = @Language, + Proficiency = @Proficiency; + "; + + MySqlCommand cmd = new MySqlCommand(command, conn); + cmd.Parameters.AddWithValue("@ID", cur.ID); + cmd.Parameters.AddWithValue("@ResumeID", cur.ResumeID); + cmd.Parameters.AddWithValue("@Language", cur.Language); + cmd.Parameters.AddWithValue("@Proficiency", cur.Proficiency); + + await cmd.ExecuteNonQueryAsync(); + } + } + } + + public async Task SetResumeCertification(ResumeCertification[] certifications) { + using (var conn = GetConnection()) { + await conn.OpenAsync(); + foreach (ResumeCertification cur in certifications) { + string command = @" + INSERT INTO ResumeCertification + (ID,ResumeID,Name,VerificationURL,Description) + VALUES + (@ID,@ResumeID,@Name,@VerificationURL,@Description) + ON DUPLICATE KEY UPDATE + ResumeID = @ResumeID, + Name = @Name, + VerificationURL = @VerificationURL, + Description = @Description; + "; + + MySqlCommand cmd = new MySqlCommand(command, conn); + cmd.Parameters.AddWithValue("@ID", cur.ID); + cmd.Parameters.AddWithValue("@ResumeID", cur.ResumeID); + cmd.Parameters.AddWithValue("@Name", cur.Name); + cmd.Parameters.AddWithValue("@VerificationURL", cur.VerificationURL); + cmd.Parameters.AddWithValue("@Description", cur.Description); + + await cmd.ExecuteNonQueryAsync(); + } + } + } + + public async Task SetResumeProjects(ResumeProject[] projects) { + using (var conn = GetConnection()) { + await conn.OpenAsync(); + foreach (ResumeProject cur in projects) { + string command = @" + INSERT INTO ResumeProject + (ID,ResumeID,Name,URL,Description) + VALUES + (@ID,@ResumeID,@Name,@URL,@Description) + ON DUPLICATE KEY UPDATE + ResumeID = @ResumeID, + Name = @Name, + URL = @URL, + Description = @Description; + "; + + MySqlCommand cmd = new MySqlCommand(command, conn); + cmd.Parameters.AddWithValue("@ID", cur.ID); + cmd.Parameters.AddWithValue("@ResumeID", cur.ResumeID); + cmd.Parameters.AddWithValue("@Name", cur.Name); + cmd.Parameters.AddWithValue("@URL", cur.URL); + cmd.Parameters.AddWithValue("@Description", cur.Description); + + await cmd.ExecuteNonQueryAsync(); + } } }