diff --git a/ToDo.yaml b/ToDo.yaml
index 060e44a..855e616 100755
--- a/ToDo.yaml
+++ b/ToDo.yaml
@@ -21,6 +21,9 @@ Server:
Need to update notification email
Create page to notify cx that their work email has been verified
+ Server.csproj:
+ Find a way to keep all the libraries up to date
+
Client:
jobs/editor:
Job Listing Skills exists but isn't implimented in the UI
@@ -45,14 +48,14 @@ Client:
Setup QueryParam's for Edit and New
Edit employees not implimented yet
+ resume/editor:
+ Not fully tested yet
+
Company:
Need to impliment Add employee
Need to impliment Remove employee
Edit Company -> Dont allow edit of company email due to it being verified
- All:
- Make sure im using the new NG format for for and if
-
database:
Add Applied Jobs Table
\ No newline at end of file
diff --git a/database/mistox.sql b/database/mistox.sql
index dee3b06..035a927 100755
--- a/database/mistox.sql
+++ b/database/mistox.sql
@@ -6,6 +6,7 @@ USE `boredcareers`;
CREATE TABLE IF NOT EXISTS `Resume` (
`ID` int NOT NULL AUTO_INCREMENT,
`AccountID` int NOT NULL,
+ `Title` varchar(100) NOT NULL,
`Name` varchar(100) NOT NULL,
`Field` varchar(100) DEFAULT NULL,
`Email` varchar(255) NOT NULL,
@@ -47,6 +48,7 @@ CREATE TABLE IF NOT EXISTS `Resume` (
CREATE TABLE IF NOT EXISTS `ResumeMilitary` (
`ID` int NOT NULL AUTO_INCREMENT,
`ResumeID` int NOT NULL,
+ `Veteran` boolean DEFAULT 0,
`Country` char(2) NOT NULL,
`Rank` varchar(50) NOT NULL,
`DateStarted` date NOT NULL,
diff --git a/src/Client/src/app/app.html b/src/Client/src/app/app.html
index cc27886..0d023ef 100644
--- a/src/Client/src/app/app.html
+++ b/src/Client/src/app/app.html
@@ -1,25 +1,30 @@
diff --git a/src/Client/src/app/app.routes.ts b/src/Client/src/app/app.routes.ts
index df088d1..b221d22 100644
--- a/src/Client/src/app/app.routes.ts
+++ b/src/Client/src/app/app.routes.ts
@@ -7,6 +7,7 @@ import { JobEditorComponent } from './pages/jobs/editor/jobeditor.component';
import { CompanyEditorComponent } from './pages/company/editor/editor.component';
import { JobViewerComponent } from './pages/jobs/viewer/jobviewer.component';
import { CompanyComponent } from './pages/company/company.component';
+import { ResumesEditorComponent } from './pages/resumes/editor/editor.component';
export const routes: Routes = [
@@ -15,6 +16,7 @@ export const routes: Routes = [
// Resumes
{ path: "resumes", component: ResumesComponent },
+ { path: "resumes/editor", component: ResumesEditorComponent },
// Jobs
{ path: "jobs", component: JobsComponent },
diff --git a/src/Client/src/app/models/Resume.ts b/src/Client/src/app/models/Resume.ts
index c917a5a..92826d8 100644
--- a/src/Client/src/app/models/Resume.ts
+++ b/src/Client/src/app/models/Resume.ts
@@ -1,6 +1,9 @@
+
export class Resume {
public id: number | null = null;
- public accountID: number = 0;
+ public accountID: number | null = null;
+
+ public title: string = "";
public name: string = "";
public field: string = "";
public email: string = "";
@@ -17,11 +20,13 @@ export class Resume {
public languages: ResumeLanguage[] = [];
public certification: ResumeCertification[] = [];
public projects: ResumeProject[] = [];
+ public trackUUID: string = crypto.randomUUID();
}
export class ResumeExperience {
public id: number | null = null;
- public resumeID: number = 0;
+ public resumeID: number | null = null;
+
public jobTitle: string = "";
public company: string = "";
public postalCode: string = "";
@@ -32,37 +37,46 @@ export class ResumeExperience {
public stillEmployed: boolean = false;
public dateEnded: Date = new Date();
public experienceBullets: ResumeExperienceBullet[] = [];
+ public trackUUID: string = crypto.randomUUID();
}
export class ResumeExperienceBullet {
public id: number | null = null;
- public resumeID: number = 0;
- public resumeExperienceID: number = 0;
+ public resumeID: number | null = null;
+ public resumeExperienceID: number | null = null;
+
public jobFunction: string = "";
+ public trackUUID: string = crypto.randomUUID();
}
export class ResumeMilitary {
public id: number | null = null;
- public resumeID: number = 0;
+ public resumeID: number | null = null;
+
+ public veteran: boolean = false;
public country: string = "";
public rank: string = "";
public dateStarted: Date = new Date();
public stillServing: boolean = false;
public dateEnded: Date = new Date();
public millitaryBullets: ResumeMilitaryBullet[] = [];
+ public trackUUID: string = crypto.randomUUID();
}
export class ResumeMilitaryBullet {
public id: number | null = null;
- public resumeID: number = 0;
- public resumeMilitaryID: number = 0;
+ public resumeID: number | null = null;
+ public resumeMilitaryID: number | null = null;
+
public achievement: string = "";
public description: string = "";
+ public trackUUID: string = crypto.randomUUID();
}
export class ResumeEducation {
public id: number | null = null;
- public resumeID: number = 0;
+ public resumeID: number | null = null;
+
public degreeType: string = "";
public degreeField: string = "";
public school: string = "";
@@ -73,34 +87,43 @@ export class ResumeEducation {
public dateStarted: Date = new Date();
public stillStudying: boolean = false;
public dateEnded: Date = new Date();
+ public trackUUID: string = crypto.randomUUID();
}
export class ResumeSkill {
public id: number | null = null;
- public resumeID: number = 0;
+ public resumeID: number | null = null;
+
public name: string = "";
public description: string = "";
+ public trackUUID: string = crypto.randomUUID();
}
export class ResumeLanguage {
public id: number | null = null;
- public resumeID: number = 0;
+ public resumeID: number | null = null;
+
public language: string = "";
public proficiency: string = "";
+ public trackUUID: string = crypto.randomUUID();
}
export class ResumeCertification {
public id: number | null = null;
- public resumeID: number = 0;
+ public resumeID: number | null = null;
+
public name: string = "";
public verificationURL: string = "";
public description: string = "";
+ public trackUUID: string = crypto.randomUUID();
}
export class ResumeProject {
public id: number | null = null;
- public resumeID: number = 0;
+ public resumeID: number | null = null;
+
public name: string = "";
public url: string = "";
public description: string = "";
+ public trackUUID: string = crypto.randomUUID();
}
\ No newline at end of file
diff --git a/src/Client/src/app/pages/company/company.component.ts b/src/Client/src/app/pages/company/company.component.ts
index d2955c9..45ce872 100644
--- a/src/Client/src/app/pages/company/company.component.ts
+++ b/src/Client/src/app/pages/company/company.component.ts
@@ -28,6 +28,11 @@ export class CompanyComponent {
constructor( private http: HttpClient, private router: Router, private route: ActivatedRoute, private title: Title, public auth: Authentication ) {
this.title.setTitle("Companies | BoredCareers");
+
+ if (!auth.isLoggedIn){
+ router.navigate(["/"]);
+ }
+
http.get
("api/employee/").subscribe({
next: data => {
this.Employers = data;
diff --git a/src/Client/src/app/pages/company/editor/editor.component.ts b/src/Client/src/app/pages/company/editor/editor.component.ts
index 3c21b7c..9a89e66 100644
--- a/src/Client/src/app/pages/company/editor/editor.component.ts
+++ b/src/Client/src/app/pages/company/editor/editor.component.ts
@@ -25,6 +25,10 @@ export class CompanyEditorComponent {
constructor( private http: HttpClient, private router: Router, private route: ActivatedRoute, private title: Title, public auth: Authentication ) {
this.title.setTitle("Company - Editor | BoredCareers");
+ if (!auth.isLoggedIn){
+ router.navigate(["/"]);
+ }
+
// Query param CompanyID -> Edit
// Query param null -> New
};
diff --git a/src/Client/src/app/pages/jobs/editor/jobeditor.component.ts b/src/Client/src/app/pages/jobs/editor/jobeditor.component.ts
index 6033f17..a02bd83 100644
--- a/src/Client/src/app/pages/jobs/editor/jobeditor.component.ts
+++ b/src/Client/src/app/pages/jobs/editor/jobeditor.component.ts
@@ -27,6 +27,10 @@ export class JobEditorComponent {
constructor( private http: HttpClient, private router: Router, private route: ActivatedRoute, private title: Title, public auth: Authentication ) {
this.title.setTitle("Jobs - Editor | BoredCareers");
+ if (!auth.isLoggedIn){
+ router.navigate(["/"]);
+ }
+
this.route.queryParams.subscribe(params => {
const CompanyID = params['CompanyID'] ? +params['CompanyID'] : null;
const JobID = params['JobID'] ? +params['JobID'] : null;
diff --git a/src/Client/src/app/pages/resumes/editor/editor.component.css b/src/Client/src/app/pages/resumes/editor/editor.component.css
new file mode 100644
index 0000000..0daf73e
--- /dev/null
+++ b/src/Client/src/app/pages/resumes/editor/editor.component.css
@@ -0,0 +1,10 @@
+.resume-section {
+ background-color: #DDDDDD;
+ margin: 10px;
+}
+
+.resume-sub-section {
+ border: 1px solid #666666;
+ margin: 5px;
+ padding: 10px;
+}
\ No newline at end of file
diff --git a/src/Client/src/app/pages/resumes/editor/editor.component.html b/src/Client/src/app/pages/resumes/editor/editor.component.html
new file mode 100644
index 0000000..9cc4cc0
--- /dev/null
+++ b/src/Client/src/app/pages/resumes/editor/editor.component.html
@@ -0,0 +1,145 @@
+
\ No newline at end of file
diff --git a/src/Client/src/app/pages/resumes/editor/editor.component.ts b/src/Client/src/app/pages/resumes/editor/editor.component.ts
new file mode 100644
index 0000000..bbbbd10
--- /dev/null
+++ b/src/Client/src/app/pages/resumes/editor/editor.component.ts
@@ -0,0 +1,162 @@
+import { Component } from '@angular/core';
+import { HttpClient } from '@angular/common/http';
+import { FormsModule } from '@angular/forms';
+import { Router, ActivatedRoute, RouterModule } from '@angular/router';
+import { Title } from '@angular/platform-browser';
+import { CommonModule } from '@angular/common';
+import { Resume, ResumeCertification, ResumeEducation, ResumeExperience, ResumeExperienceBullet, ResumeLanguage, ResumeMilitaryBullet, ResumeProject, ResumeSkill } from 'app/models/Resume';
+import { Authentication } from 'app/services/Authentication';
+import { HomeComponent } from "app/pages/home/home.component";
+
+@Component({
+ selector: 'main-resume-editor',
+ templateUrl: './editor.component.html',
+ styleUrls: [ './editor.component.css' ],
+ imports: [FormsModule, CommonModule, RouterModule]
+})
+export class ResumesEditorComponent {
+
+ public resume: Resume = new Resume;
+ public isNewResume: boolean = true;
+
+ public ErrorMsg: string = "";
+
+ constructor( private http: HttpClient, private router: Router, private route: ActivatedRoute, private title: Title, public auth: Authentication ) {
+ this.title.setTitle("Resume - Editor | BoredCareers");
+ if (!auth.isLoggedIn){
+ router.navigate(["/"]);
+ }
+ this.route.queryParams.subscribe(params => {
+
+ const ResumeID = params['ResumeID'] ? +params['ResumeID'] : null;
+ if (ResumeID !== null){
+ this.http.get("api/resume?ResumeID=" + ResumeID).subscribe({
+ next: data => {
+ this.resume = data;
+ this.isNewResume = false;
+ },
+ error: err => {
+ this.ErrorMsg = err.error;
+ }
+ });
+ }
+ });
+ };
+
+ SubmitForm(resume: Resume){
+ resume.accountID = this.auth.loggedInUser.id;
+ this.http.post("api/resume", resume).subscribe({
+ next: data => {
+ this.router.navigate(["/"]);
+ },
+ error: err => {
+ this.ErrorMsg = err.error;
+ }
+ });
+ }
+
+ addExperience(){
+ this.resume.experience.push( new ResumeExperience );
+ }
+ delExperience(self: ResumeExperience){
+ for(let i=0; i
+ @for(resume of myResumes; track myResumes.length){
+ {{ resume.title }}
+ }
+ NEW RESUME
+
+
- @if (auth.isLoggedIn){
-