working #28

Merged
derek merged 8 commits from working into main 2025-08-14 21:51:05 -07:00
3 changed files with 296 additions and 223 deletions
Showing only changes of commit 06a16a1b05 - Show all commits
@@ -1,6 +1,8 @@
<div class="top-bar"> <div class="top-bar">
@for(resume of myResumes; track myResumes.length){ @for(resume of myResumes; track myResumes.length){
<button (click)="changeSelectedResume(5)">{{ resume.title }}</button> @if (resume.id != null){
<button (click)="changeSelectedResume(resume.id)">{{ resume.title }}</button>
}
} }
<button routerLink="/resumes/editor" >NEW RESUME</button> <button routerLink="/resumes/editor" >NEW RESUME</button>
</div> </div>
+35 -28
View File
@@ -58,41 +58,48 @@ namespace BoredCareers.Services.DatabaseService {
return resumes.ToArray(); return resumes.ToArray();
} }
private async Task<DbDataReader> ExecuteReaderAsync(MySqlConnection conn, string query, int resumeId) {
var cmd = new MySqlCommand(query, conn);
cmd.Parameters.AddWithValue("@ResumeID", resumeId);
return await cmd.ExecuteReaderAsync();
}
public async Task<Resume?> GetResume(int ResumeID) { public async Task<Resume?> GetResume(int ResumeID) {
using (var conn = GetConnection()) { using (var conn = GetConnection()) {
await conn.OpenAsync(); await conn.OpenAsync();
Resume? resume = await GetResumeHeader(await ExecuteReaderAsync(conn, "SELECT * FROM Resume WHERE ID = @ResumeID;", ResumeID)); // Check if resume header exists
Resume? resume = await GetResumeHeader(ResumeID);
if (resume == null) { return null; } if (resume == null) { return null; }
Task<DbDataReader>[] tasks = [ // Create parallel threads
ExecuteReaderAsync(conn, "SELECT * FROM ResumeExperience WHERE ResumeID = @ResumeID;", ResumeID), Task<ResumeExperience[]> experienceTask = GetResumeExperience(ResumeID);
ExecuteReaderAsync(conn, "SELECT * FROM ResumeExperienceBullet WHERE ResumeID = @ResumeID;", ResumeID), Task<ResumeExperienceBullet[]> experienceBulletsTask = GetResumeExperienceBullets(ResumeID);
ExecuteReaderAsync(conn, "SELECT * FROM ResumeMilitary WHERE ResumeID = @ResumeID;", ResumeID), Task<ResumeMilitary?> militaryTask = GetResumeMilitary(ResumeID);
ExecuteReaderAsync(conn, "SELECT * FROM ResumeMilitaryBullet WHERE ResumeID = @ResumeID;", ResumeID), Task<ResumeMilitaryBullet[]> militaryBulletsTask = GetResumeMilitaryBullets(ResumeID);
ExecuteReaderAsync(conn, "SELECT * FROM ResumeEducation WHERE ResumeID = @ResumeID;", ResumeID), Task<ResumeEducation[]> educationTask = GetResumeEducation(ResumeID);
ExecuteReaderAsync(conn, "SELECT * FROM ResumeSkill WHERE ResumeID = @ResumeID;", ResumeID), Task<ResumeSkill[]> skillsTask = GetResumeSkills(ResumeID);
ExecuteReaderAsync(conn, "SELECT * FROM ResumeLanguage WHERE ResumeID = @ResumeID;", ResumeID), Task<ResumeLanguage[]> languagesTask = GetResumeLanguages(ResumeID);
ExecuteReaderAsync(conn, "SELECT * FROM ResumeCertification WHERE ResumeID = @ResumeID;", ResumeID), Task<ResumeCertification[]> certificationTask = GetResumeCertification(ResumeID);
ExecuteReaderAsync(conn, "SELECT * FROM ResumeProject WHERE ResumeID = @ResumeID;", ResumeID), Task<ResumeProject[]> projectsTask = GetResumeProjects(ResumeID);
];
await Task.WhenAll(tasks);
ResumeExperience[] experience = await GetResumeExperience(await tasks[0]); // Run all in parallel
ResumeExperienceBullet[] bullets = await GetResumeExperienceBullets(await tasks[1]); await Task.WhenAll(
ResumeMilitary? military = await GetResumeMilitary(await tasks[2]); experienceTask,
ResumeMilitaryBullet[] militaryBullets = await GetResumeMilitaryBullets(await tasks[3]); experienceBulletsTask,
ResumeEducation[] education = await GetResumeEducation(await tasks[4]); militaryTask,
ResumeSkill[] skills = await GetResumeSkills(await tasks[5]); militaryBulletsTask,
ResumeLanguage[] languages = await GetResumeLanguages(await tasks[6]); educationTask,
ResumeCertification[] certs = await GetResumeCertification(await tasks[7]); skillsTask,
ResumeProject[] projects = await GetResumeProjects(await tasks[8]); languagesTask,
certificationTask,
projectsTask
);
// Get results from parallel processes
ResumeExperience[] experience = await experienceTask;
ResumeExperienceBullet[] bullets = await experienceBulletsTask;
ResumeMilitary? military = await militaryTask;
ResumeMilitaryBullet[] militaryBullets = await militaryBulletsTask;
ResumeEducation[] education = await educationTask;
ResumeSkill[] skills = await skillsTask;
ResumeLanguage[] languages = await languagesTask;
ResumeCertification[] certs = await certificationTask;
ResumeProject[] projects = await projectsTask;
Dictionary<int, ResumeExperienceBullet[]> groupedExperienceBullets = bullets.GroupBy(b => Convert.ToInt32(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) { foreach (var exp in experience) {
@@ -1,246 +1,310 @@
using BoredCareers.Entities; using BoredCareers.Entities;
using MySql.Data.MySqlClient;
using System.Data; using System.Data;
using System.Data.Common; using System.Data.Common;
namespace BoredCareers.Services.DatabaseService { namespace BoredCareers.Services.DatabaseService {
public partial class DatabaseService { public partial class DatabaseService {
public async Task<Resume?> GetResumeHeader(DbDataReader reader) { string GetString(DbDataReader reader, string name) {
while (await reader.ReadAsync()) { return reader.IsDBNull(reader.GetOrdinal(name)) ? "" : reader.GetString(name);
if (reader == null) { break; } }
int _id = reader.GetInt32("ID");
int _accountid = reader.GetInt32("AccountID"); public async Task<Resume?> GetResumeHeader(int ResumeID) {
string _title = reader.GetString("Title"); using (MySqlConnection connection = GetConnection()) {
string _name = reader.GetString("Name"); await connection.OpenAsync();
string _field = reader.GetString("Field"); MySqlCommand cmd = new MySqlCommand("SELECT * FROM Resume WHERE ID = @ID;", connection);
string _email = reader.GetString("Email"); cmd.Parameters.AddWithValue("@ID", ResumeID);
string _phonenumber = reader.GetString("PhoneNumber"); using (DbDataReader reader = await cmd.ExecuteReaderAsync()) {
string _postalcode = reader.GetString("PostalCode"); while (await reader.ReadAsync()) {
string _country = reader.GetString("Country"); int _id = reader.GetInt32("ID");
string _state = reader.GetString("StateOrRegion"); int _accountid = reader.GetInt32("AccountID");
string _city = reader.GetString("City"); string _title = GetString(reader, "Title");
bool _isactive = reader.GetBoolean("IsActive"); string _name = GetString(reader, "Name");
return new Resume() { string _field = GetString(reader, "Field");
ID = _id, string _email = GetString(reader, "Email");
AccountID = _accountid, string _phonenumber = GetString(reader, "PhoneNumber");
Title = _title, string _postalcode = GetString(reader, "PostalCode");
Name = _name, string _country = GetString(reader, "Country");
Field = _field, string _state = GetString(reader, "StateOrRegion");
Email = _email, string _city = GetString(reader, "City");
PhoneNumber = _phonenumber, bool _isactive = reader.GetBoolean("IsActive");
PostalCode = _postalcode, return new Resume() {
Country = _country, ID = _id,
StateOrRegion = _state, AccountID = _accountid,
City = _city, Title = _title,
IsActive = _isactive Name = _name,
}; Field = _field,
Email = _email,
PhoneNumber = _phonenumber,
PostalCode = _postalcode,
Country = _country,
StateOrRegion = _state,
City = _city,
IsActive = _isactive
};
}
}
} }
return null; return null;
} }
public async Task<ResumeExperienceBullet[]> GetResumeExperienceBullets(DbDataReader reader) { public async Task<ResumeExperience[]> GetResumeExperience(int resumeId) {
List<ResumeExperienceBullet> experienceBullets = new List<ResumeExperienceBullet>();
while (await reader.ReadAsync()) {
if (reader == null) { break; }
int _id = reader.GetInt32("ID");
int _resumeid = reader.GetInt32("ResumeID");
int _experienceid = reader.GetInt32("ResumeExperienceID");
string _jobfunction = reader.GetString("JobFunction");
experienceBullets.Add(new ResumeExperienceBullet() {
ID = _id,
ResumeID = _resumeid,
ResumeExperienceID = _experienceid,
JobFunction = _jobfunction
});
}
return experienceBullets.ToArray();
}
public async Task<ResumeExperience[]> GetResumeExperience(DbDataReader reader) {
List<ResumeExperience> experience = new List<ResumeExperience>(); List<ResumeExperience> experience = new List<ResumeExperience>();
while (await reader.ReadAsync()) { using (var conn = GetConnection()) {
if (reader == null) { break; } await conn.OpenAsync();
int _id = reader.GetInt32("ID"); var cmd = new MySqlCommand("SELECT * FROM ResumeExperience WHERE ResumeID = @ResumeID;", conn);
int _resumeid = reader.GetInt32("ResumeID"); cmd.Parameters.AddWithValue("@ResumeID", resumeId);
string _jobtitle = reader.GetString("JobTitle"); using (DbDataReader reader = await cmd.ExecuteReaderAsync()) {
string _company = reader.GetString("Company"); while (await reader.ReadAsync()) {
string _postalcode = reader.GetString("PostalCode"); int _id = reader.GetInt32("ID");
string _country = reader.GetString("Country"); int _resumeid = reader.GetInt32("ResumeID");
string _state = reader.GetString("StateOrRegion"); string _jobtitle = GetString(reader, "JobTitle");
string _city = reader.GetString("City"); string _company = GetString(reader, "Company");
DateTime _datestarted = reader.GetDateTime("DateStarted"); string _postalcode = GetString(reader, "PostalCode");
bool _stillempoyed = reader.GetBoolean("StillEmployed"); string _country = GetString(reader, "Country");
DateTime _dateended = reader.GetDateTime("DateEnded"); string _state = GetString(reader, "StateOrRegion");
experience.Add(new ResumeExperience() { string _city = GetString(reader, "City");
ID = _id, DateTime _datestarted = reader.GetDateTime("DateStarted");
ResumeID = _resumeid, bool _stillempoyed = reader.GetBoolean("StillEmployed");
JobTitle = _jobtitle, DateTime _dateended = reader.GetDateTime("DateEnded");
Company = _company, experience.Add(new ResumeExperience() {
PostalCode = _postalcode, ID = _id,
Country = _country, ResumeID = _resumeid,
StateOrRegion = _state, JobTitle = _jobtitle,
City = _city, Company = _company,
DateStarted = _datestarted, PostalCode = _postalcode,
StillEmployed = _stillempoyed, Country = _country,
DateEnded = _dateended, StateOrRegion = _state,
}); City = _city,
DateStarted = _datestarted,
StillEmployed = _stillempoyed,
DateEnded = _dateended,
});
}
}
} }
return experience.ToArray(); return experience.ToArray();
} }
public async Task<ResumeMilitaryBullet[]> GetResumeMilitaryBullets(DbDataReader reader) { public async Task<ResumeExperienceBullet[]> GetResumeExperienceBullets(int resumeId) {
List<ResumeExperienceBullet> experienceBullets = new List<ResumeExperienceBullet>();
using (var conn = GetConnection()) {
await conn.OpenAsync();
var cmd = new MySqlCommand("SELECT * FROM ResumeExperienceBullet WHERE ResumeID = @ResumeID;", conn);
cmd.Parameters.AddWithValue("@ResumeID", resumeId);
using (DbDataReader reader = await cmd.ExecuteReaderAsync()) {
while (await reader.ReadAsync()) {
int _id = reader.GetInt32("ID");
int _resumeid = reader.GetInt32("ResumeID");
int _experienceid = reader.GetInt32("ResumeExperienceID");
string _jobfunction = GetString(reader, "JobFunction");
experienceBullets.Add(new ResumeExperienceBullet() {
ID = _id,
ResumeID = _resumeid,
ResumeExperienceID = _experienceid,
JobFunction = _jobfunction
});
}
}
}
return experienceBullets.ToArray();
}
public async Task<ResumeMilitaryBullet[]> GetResumeMilitaryBullets(int resumeId) {
List<ResumeMilitaryBullet> militaryBullets = new List<ResumeMilitaryBullet>(); List<ResumeMilitaryBullet> militaryBullets = new List<ResumeMilitaryBullet>();
while (await reader.ReadAsync()) { using (var conn = GetConnection()) {
if (reader == null) { break; } await conn.OpenAsync();
int _id = reader.GetInt32("ID"); var cmd = new MySqlCommand("SELECT * FROM ResumeMilitaryBullet WHERE ResumeID = @ResumeID;", conn);
int _resumeid = reader.GetInt32("ResumeID"); cmd.Parameters.AddWithValue("@ResumeID", resumeId);
int _experienceid = reader.GetInt32("ResumeMilitaryID"); using (DbDataReader reader = await cmd.ExecuteReaderAsync()) {
string _achievement = reader.GetString("Achievement"); while (await reader.ReadAsync()) {
string _description = reader.GetString("Description"); int _id = reader.GetInt32("ID");
militaryBullets.Add(new ResumeMilitaryBullet() { int _resumeid = reader.GetInt32("ResumeID");
ID = _id, int _experienceid = reader.GetInt32("ResumeMilitaryID");
ResumeID = _resumeid, string _achievement = GetString(reader, "Achievement");
ResumeMilitaryID = _experienceid, string _description = GetString(reader, "Description");
Achievement = _achievement, militaryBullets.Add(new ResumeMilitaryBullet() {
Description = _description ID = _id,
}); ResumeID = _resumeid,
ResumeMilitaryID = _experienceid,
Achievement = _achievement,
Description = _description
});
}
}
} }
return militaryBullets.ToArray(); return militaryBullets.ToArray();
} }
public async Task<ResumeMilitary?> GetResumeMilitary(DbDataReader reader) { public async Task<ResumeMilitary?> GetResumeMilitary(int resumeId) {
ResumeMilitary? military = null; ResumeMilitary? military = null;
while (await reader.ReadAsync()) { using (var conn = GetConnection()) {
if (reader == null) { break; } await conn.OpenAsync();
int _id = reader.GetInt32("ID"); var cmd = new MySqlCommand("SELECT * FROM ResumeMilitary WHERE ResumeID = @ResumeID;", conn);
int _resumeid = reader.GetInt32("ResumeID"); cmd.Parameters.AddWithValue("@ResumeID", resumeId);
string _country = reader.GetString("Country"); using (DbDataReader reader = await cmd.ExecuteReaderAsync()) {
string _rank = reader.GetString("Rank"); while (await reader.ReadAsync()) {
DateTime _datestarted = reader.GetDateTime("DateStarted"); int _id = reader.GetInt32("ID");
bool _stillServing = reader.GetBoolean("StillServing"); int _resumeid = reader.GetInt32("ResumeID");
DateTime _dateended = reader.GetDateTime("DateEnded"); string _country = GetString(reader, "Country");
military = new ResumeMilitary() { string _rank = GetString(reader, "Rank");
ID = _id, DateTime _datestarted = reader.GetDateTime("DateStarted");
ResumeID = _resumeid, bool _stillServing = reader.GetBoolean("StillServing");
Country = _country, DateTime _dateended = reader.GetDateTime("DateEnded");
Rank = _rank, military = new ResumeMilitary() {
DateStarted = _datestarted, ID = _id,
StillServing = _stillServing, ResumeID = _resumeid,
DateEnded = _dateended, Country = _country,
}; Rank = _rank,
DateStarted = _datestarted,
StillServing = _stillServing,
DateEnded = _dateended,
};
}
}
} }
return military; return military;
} }
public async Task<ResumeEducation[]> GetResumeEducation(DbDataReader reader) { public async Task<ResumeEducation[]> GetResumeEducation(int resumeId) {
List<ResumeEducation>? education = new List<ResumeEducation>(); List<ResumeEducation>? education = new List<ResumeEducation>();
while (await reader.ReadAsync()) { using (var conn = GetConnection()) {
if (reader == null) { break; } await conn.OpenAsync();
int _id = reader.GetInt32("ID"); var cmd = new MySqlCommand("SELECT * FROM ResumeEducation WHERE ResumeID = @ResumeID;", conn);
int _resumeid = reader.GetInt32("ResumeID"); cmd.Parameters.AddWithValue("@ResumeID", resumeId);
string _degreetype = reader.GetString("DegreeType"); using (DbDataReader reader = await cmd.ExecuteReaderAsync()) {
string _degreefield = reader.GetString("DegreeField"); while (await reader.ReadAsync()) {
string _school = reader.GetString("School"); int _id = reader.GetInt32("ID");
string _postalcode = reader.GetString("PostalCode"); int _resumeid = reader.GetInt32("ResumeID");
string _country = reader.GetString("Country"); string _degreetype = GetString(reader, "DegreeType");
string _state = reader.GetString("StateOrRegion"); string _degreefield = GetString(reader, "DegreeField");
string _city = reader.GetString("City"); string _school = GetString(reader, "School");
DateTime _datestarted = reader.GetDateTime("DateStarted"); string _postalcode = GetString(reader, "PostalCode");
bool _stillstudying = reader.GetBoolean("StillStudying"); string _country = GetString(reader, "Country");
DateTime _dateended = reader.GetDateTime("DateEnded"); string _state = GetString(reader, "StateOrRegion");
education.Add(new ResumeEducation { string _city = GetString(reader, "City");
ID = _id, DateTime _datestarted = reader.GetDateTime("DateStarted");
ResumeID = _resumeid, bool _stillstudying = reader.GetBoolean("StillStudying");
DegreeType = _degreetype, DateTime _dateended = reader.GetDateTime("DateEnded");
DegreeField = _degreefield, education.Add(new ResumeEducation {
School = _school, ID = _id,
PostalCode = _postalcode, ResumeID = _resumeid,
Country = _country, DegreeType = _degreetype,
StateOrRegion = _state, DegreeField = _degreefield,
City = _city, School = _school,
DateStarted = _datestarted, PostalCode = _postalcode,
StillStudying = _stillstudying, Country = _country,
DateEnded = _dateended StateOrRegion = _state,
}); City = _city,
DateStarted = _datestarted,
StillStudying = _stillstudying,
DateEnded = _dateended
});
}
}
} }
return education.ToArray(); return education.ToArray();
} }
public async Task<ResumeSkill[]> GetResumeSkills(DbDataReader reader) { public async Task<ResumeSkill[]> GetResumeSkills(int resumeId) {
List<ResumeSkill> skills = new List<ResumeSkill>(); List<ResumeSkill> skills = new List<ResumeSkill>();
while (await reader.ReadAsync()) { using (var conn = GetConnection()) {
if (reader == null) { break; } await conn.OpenAsync();
int _id = reader.GetInt32("ID"); var cmd = new MySqlCommand("SELECT * FROM ResumeSkill WHERE ResumeID = @ResumeID;", conn);
int _resumeid = reader.GetInt32("ResumeID"); cmd.Parameters.AddWithValue("@ResumeID", resumeId);
string _name = reader.GetString("Name"); using (DbDataReader reader = await cmd.ExecuteReaderAsync()) {
string _description = reader.GetString("Description"); while (await reader.ReadAsync()) {
skills.Add( new ResumeSkill { int _id = reader.GetInt32("ID");
ID = _id, int _resumeid = reader.GetInt32("ResumeID");
ResumeID = _resumeid, string _name = GetString(reader, "Name");
Name = _name, string _description = GetString(reader, "Description");
Description = _description skills.Add(new ResumeSkill {
} ); ID = _id,
ResumeID = _resumeid,
Name = _name,
Description = _description
});
}
}
} }
return skills.ToArray(); return skills.ToArray();
} }
public async Task<ResumeLanguage[]> GetResumeLanguages(DbDataReader reader) { public async Task<ResumeLanguage[]> GetResumeLanguages(int resumeId) {
List<ResumeLanguage>? languages = new List<ResumeLanguage>(); List<ResumeLanguage>? languages = new List<ResumeLanguage>();
while (await reader.ReadAsync()) { using (var conn = GetConnection()) {
if (reader == null) { break; } await conn.OpenAsync();
int _id = reader.GetInt32("ID"); var cmd = new MySqlCommand("SELECT * FROM ResumeLanguage WHERE ResumeID = @ResumeID;", conn);
int _resumeid = reader.GetInt32("ResumeID"); cmd.Parameters.AddWithValue("@ResumeID", resumeId);
string _language = reader.GetString("Language"); using (DbDataReader reader = await cmd.ExecuteReaderAsync()) {
string _proficiency = reader.GetString("Proficiency"); while (await reader.ReadAsync()) {
languages.Add( new ResumeLanguage { int _id = reader.GetInt32("ID");
ID = _id, int _resumeid = reader.GetInt32("ResumeID");
ResumeID = _resumeid, string _language = GetString(reader, "Language");
Language = _language, string _proficiency = GetString(reader, "Proficiency");
Proficiency = _proficiency languages.Add(new ResumeLanguage {
} ); ID = _id,
ResumeID = _resumeid,
Language = _language,
Proficiency = _proficiency
});
}
}
} }
return languages.ToArray(); return languages.ToArray();
} }
public async Task<ResumeCertification[]> GetResumeCertification(DbDataReader reader) { public async Task<ResumeCertification[]> GetResumeCertification(int resumeId) {
List<ResumeCertification> certs = new List<ResumeCertification>(); List<ResumeCertification> certs = new List<ResumeCertification>();
while (await reader.ReadAsync()) { using (var conn = GetConnection()) {
if (reader == null) { break; } await conn.OpenAsync();
int _id = reader.GetInt32("ID"); var cmd = new MySqlCommand("SELECT * FROM ResumeCertification WHERE ResumeID = @ResumeID;", conn);
int _resumeid = reader.GetInt32("ResumeID"); cmd.Parameters.AddWithValue("@ResumeID", resumeId);
string _name = reader.GetString("Name"); using (DbDataReader reader = await cmd.ExecuteReaderAsync()) {
string _url = reader.GetString("VerificationURL"); while (await reader.ReadAsync()) {
string _description = reader.GetString("Description"); int _id = reader.GetInt32("ID");
certs.Add( new ResumeCertification { int _resumeid = reader.GetInt32("ResumeID");
ID = _id, string _name = GetString(reader, "Name");
ResumeID = _resumeid, string _url = GetString(reader, "VerificationURL");
Name = _name, string _description = GetString(reader, "Description");
VerificationURL = _url, certs.Add(new ResumeCertification {
Description = _description ID = _id,
} ); ResumeID = _resumeid,
Name = _name,
VerificationURL = _url,
Description = _description
});
}
}
} }
return certs.ToArray(); return certs.ToArray();
} }
public async Task<ResumeProject[]> GetResumeProjects(DbDataReader reader) { public async Task<ResumeProject[]> GetResumeProjects(int resumeId) {
List<ResumeProject>? projects = new List<ResumeProject>(); List<ResumeProject>? projects = new List<ResumeProject>();
while (await reader.ReadAsync()) { using (var conn = GetConnection()) {
if (reader == null) { break; } await conn.OpenAsync();
int _id = reader.GetInt32("ID"); var cmd = new MySqlCommand("SELECT * FROM ResumeProject WHERE ResumeID = @ResumeID;", conn);
int _resumeid = reader.GetInt32("ResumeID"); cmd.Parameters.AddWithValue("@ResumeID", resumeId);
string _name = reader.GetString("Name"); using (DbDataReader reader = await cmd.ExecuteReaderAsync()) {
string _url = reader.GetString("URL"); while (await reader.ReadAsync()) {
string _description = reader.GetString("Description"); int _id = reader.GetInt32("ID");
projects.Add( new ResumeProject { int _resumeid = reader.GetInt32("ResumeID");
ID = _id, string _name = GetString(reader, "Name");
ResumeID = _resumeid, string _url = GetString(reader, "URL");
Name = _name, string _description = GetString(reader, "Description");
URL = _url, projects.Add(new ResumeProject {
Description = _description ID = _id,
} ); ResumeID = _resumeid,
Name = _name,
URL = _url,
Description = _description
});
}
}
} }
return projects.ToArray(); return projects.ToArray();
} }
} }
} }