Get DbDriver Set working

This commit is contained in:
2025-08-14 16:53:07 -07:00
parent 2d6644fc0e
commit 5ad7ca0c3e
5 changed files with 367 additions and 337 deletions
+59 -63
View File
@@ -68,7 +68,7 @@ namespace BoredCareers.Services.DatabaseService {
using (var conn = GetConnection()) {
await conn.OpenAsync();
Resume? resume = await GetResume(await ExecuteReaderAsync(conn, "SELECT * FROM Resume WHERE ID = @ResumeID;", ResumeID));
Resume? resume = await GetResumeHeader(await ExecuteReaderAsync(conn, "SELECT * FROM Resume WHERE ID = @ResumeID;", ResumeID));
if (resume == null) { return null; }
Task<DbDataReader>[] tasks = [
@@ -94,21 +94,21 @@ namespace BoredCareers.Services.DatabaseService {
ResumeCertification[] certs = await GetResumeCertification(await tasks[7]);
ResumeProject[] projects = await GetResumeProjects(await tasks[8]);
Dictionary<int, ResumeExperienceBullet[]> groupedExperienceBullets = bullets.GroupBy(b => b.ResumeExperienceID).ToDictionary(g => g.Key, g => g.ToArray());
Dictionary<int, ResumeExperienceBullet[]> 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<ResumeExperienceBullet>();
}
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<Task<ResumeExperience>> experienceTasks = new List<Task<ResumeExperience>>();
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<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));
}
}
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<Task<ResumeExperience>> experienceTasks = new List<Task<ResumeExperience>>();
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<Task> experienceBulletTasks = new List<Task>();
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 ) {
@@ -5,7 +5,7 @@ using System.Data.Common;
namespace BoredCareers.Services.DatabaseService {
public partial class DatabaseService {
public async Task<Resume?> GetResume(DbDataReader reader) {
public async Task<Resume?> GetResumeHeader(DbDataReader reader) {
while (await reader.ReadAsync()) {
if (reader == null) { break; }
int _id = reader.GetInt32("ID");
@@ -4,303 +4,336 @@ using MySql.Data.MySqlClient;
namespace BoredCareers.Services.DatabaseService {
public partial class DatabaseService {
public async Task<int> 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<ResumeExperience> 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<int> 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<ResumeMilitary> SetResumeMilitary(MySqlConnection connection, ResumeMilitary? military) {
if (military != null) {
public async Task<ResumeExperience> 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<ResumeMilitary> 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();
}
}
}