wip: add api auth and /resume endpoint
This commit is contained in:
parent
22e2f6005f
commit
aaec8ec08d
23 changed files with 1244 additions and 271 deletions
316
internal/domain/resume.go
Normal file
316
internal/domain/resume.go
Normal file
|
|
@ -0,0 +1,316 @@
|
|||
package domain
|
||||
|
||||
import "github.com/atombender/go-jsonschema/pkg/types"
|
||||
|
||||
// e.g. 2014-06-29
|
||||
type Iso8601 string
|
||||
|
||||
type Resume struct {
|
||||
// link to the version of the schema that can validate the resume
|
||||
Schema *string `json:"$schema,omitempty" yaml:"$schema,omitempty" mapstructure:"$schema,omitempty"`
|
||||
|
||||
// Specify any awards you have received throughout your professional career
|
||||
Awards []ResumeAwardsElem `json:"awards,omitempty" yaml:"awards,omitempty" mapstructure:"awards,omitempty"`
|
||||
|
||||
// Basics corresponds to the JSON schema field "basics".
|
||||
Basics *ResumeBasics `json:"basics,omitempty" yaml:"basics,omitempty" mapstructure:"basics,omitempty"`
|
||||
|
||||
// Specify any certificates you have received throughout your professional career
|
||||
Certificates []ResumeCertificatesElem `json:"certificates,omitempty" yaml:"certificates,omitempty" mapstructure:"certificates,omitempty"`
|
||||
|
||||
// Education corresponds to the JSON schema field "education".
|
||||
Education []ResumeEducationElem `json:"education,omitempty" yaml:"education,omitempty" mapstructure:"education,omitempty"`
|
||||
|
||||
// Interests corresponds to the JSON schema field "interests".
|
||||
Interests []ResumeInterestsElem `json:"interests,omitempty" yaml:"interests,omitempty" mapstructure:"interests,omitempty"`
|
||||
|
||||
// List any other languages you speak
|
||||
Languages []ResumeLanguagesElem `json:"languages,omitempty" yaml:"languages,omitempty" mapstructure:"languages,omitempty"`
|
||||
|
||||
// The schema version and any other tooling configuration lives here
|
||||
Meta *ResumeMeta `json:"meta,omitempty" yaml:"meta,omitempty" mapstructure:"meta,omitempty"`
|
||||
|
||||
// Specify career projects
|
||||
Projects []ResumeProjectsElem `json:"projects,omitempty" yaml:"projects,omitempty" mapstructure:"projects,omitempty"`
|
||||
|
||||
// Specify your publications through your career
|
||||
Publications []ResumePublicationsElem `json:"publications,omitempty" yaml:"publications,omitempty" mapstructure:"publications,omitempty"`
|
||||
|
||||
// List references you have received
|
||||
References []ResumeReferencesElem `json:"references,omitempty" yaml:"references,omitempty" mapstructure:"references,omitempty"`
|
||||
|
||||
// List out your professional skill-set
|
||||
Skills []ResumeSkillsElem `json:"skills,omitempty" yaml:"skills,omitempty" mapstructure:"skills,omitempty"`
|
||||
|
||||
// Volunteer corresponds to the JSON schema field "volunteer".
|
||||
Volunteer []ResumeVolunteerElem `json:"volunteer,omitempty" yaml:"volunteer,omitempty" mapstructure:"volunteer,omitempty"`
|
||||
|
||||
// Work corresponds to the JSON schema field "work".
|
||||
Work []ResumeWorkElem `json:"work,omitempty" yaml:"work,omitempty" mapstructure:"work,omitempty"`
|
||||
}
|
||||
|
||||
type ResumeAwardsElem struct {
|
||||
// e.g. Time Magazine
|
||||
Awarder *string `json:"awarder,omitempty" yaml:"awarder,omitempty" mapstructure:"awarder,omitempty"`
|
||||
|
||||
// Date corresponds to the JSON schema field "date".
|
||||
Date *Iso8601 `json:"date,omitempty" yaml:"date,omitempty" mapstructure:"date,omitempty"`
|
||||
|
||||
// e.g. Received for my work with Quantum Physics
|
||||
Summary *string `json:"summary,omitempty" yaml:"summary,omitempty" mapstructure:"summary,omitempty"`
|
||||
|
||||
// e.g. One of the 100 greatest minds of the century
|
||||
Title *string `json:"title,omitempty" yaml:"title,omitempty" mapstructure:"title,omitempty"`
|
||||
}
|
||||
|
||||
type ResumeBasics struct {
|
||||
// e.g. thomas@gmail.com
|
||||
Email *string `json:"email,omitempty" yaml:"email,omitempty" mapstructure:"email,omitempty"`
|
||||
|
||||
// URL (as per RFC 3986) to a image in JPEG or PNG format
|
||||
Image *string `json:"image,omitempty" yaml:"image,omitempty" mapstructure:"image,omitempty"`
|
||||
|
||||
// e.g. Web Developer
|
||||
Label *string `json:"label,omitempty" yaml:"label,omitempty" mapstructure:"label,omitempty"`
|
||||
|
||||
// Location corresponds to the JSON schema field "location".
|
||||
Location *ResumeBasicsLocation `json:"location,omitempty" yaml:"location,omitempty" mapstructure:"location,omitempty"`
|
||||
|
||||
// Name corresponds to the JSON schema field "name".
|
||||
Name *string `json:"name,omitempty" yaml:"name,omitempty" mapstructure:"name,omitempty"`
|
||||
|
||||
// Phone numbers are stored as strings so use any format you like, e.g.
|
||||
// 712-117-2923
|
||||
Phone *string `json:"phone,omitempty" yaml:"phone,omitempty" mapstructure:"phone,omitempty"`
|
||||
|
||||
// Specify any number of social networks that you participate in
|
||||
Profiles []ResumeBasicsProfilesElem `json:"profiles,omitempty" yaml:"profiles,omitempty" mapstructure:"profiles,omitempty"`
|
||||
|
||||
// Write a short 2-3 sentence biography about yourself
|
||||
Summary *string `json:"summary,omitempty" yaml:"summary,omitempty" mapstructure:"summary,omitempty"`
|
||||
|
||||
// URL (as per RFC 3986) to your website, e.g. personal homepage
|
||||
Url *string `json:"url,omitempty" yaml:"url,omitempty" mapstructure:"url,omitempty"`
|
||||
}
|
||||
|
||||
type ResumeBasicsLocation struct {
|
||||
// To add multiple address lines, use
|
||||
// . For example, 1234 Glücklichkeit Straße
|
||||
// Hinterhaus 5. Etage li.
|
||||
Address *string `json:"address,omitempty" yaml:"address,omitempty" mapstructure:"address,omitempty"`
|
||||
|
||||
// City corresponds to the JSON schema field "city".
|
||||
City *string `json:"city,omitempty" yaml:"city,omitempty" mapstructure:"city,omitempty"`
|
||||
|
||||
// code as per ISO-3166-1 ALPHA-2, e.g. US, AU, IN
|
||||
CountryCode *string `json:"countryCode,omitempty" yaml:"countryCode,omitempty" mapstructure:"countryCode,omitempty"`
|
||||
|
||||
// PostalCode corresponds to the JSON schema field "postalCode".
|
||||
PostalCode *string `json:"postalCode,omitempty" yaml:"postalCode,omitempty" mapstructure:"postalCode,omitempty"`
|
||||
|
||||
// The general region where you live. Can be a US state, or a province, for
|
||||
// instance.
|
||||
Region *string `json:"region,omitempty" yaml:"region,omitempty" mapstructure:"region,omitempty"`
|
||||
}
|
||||
|
||||
type ResumeBasicsProfilesElem struct {
|
||||
// e.g. Facebook or Twitter
|
||||
Network *string `json:"network,omitempty" yaml:"network,omitempty" mapstructure:"network,omitempty"`
|
||||
|
||||
// e.g. http://twitter.example.com/neutralthoughts
|
||||
Url *string `json:"url,omitempty" yaml:"url,omitempty" mapstructure:"url,omitempty"`
|
||||
|
||||
// e.g. neutralthoughts
|
||||
Username *string `json:"username,omitempty" yaml:"username,omitempty" mapstructure:"username,omitempty"`
|
||||
}
|
||||
|
||||
type ResumeCertificatesElem struct {
|
||||
// e.g. 1989-06-12
|
||||
Date *types.SerializableDate `json:"date,omitempty" yaml:"date,omitempty" mapstructure:"date,omitempty"`
|
||||
|
||||
// e.g. CNCF
|
||||
Issuer *string `json:"issuer,omitempty" yaml:"issuer,omitempty" mapstructure:"issuer,omitempty"`
|
||||
|
||||
// e.g. Certified Kubernetes Administrator
|
||||
Name *string `json:"name,omitempty" yaml:"name,omitempty" mapstructure:"name,omitempty"`
|
||||
|
||||
// e.g. http://example.com
|
||||
Url *string `json:"url,omitempty" yaml:"url,omitempty" mapstructure:"url,omitempty"`
|
||||
}
|
||||
|
||||
type ResumeEducationElem struct {
|
||||
// e.g. Arts
|
||||
Area *string `json:"area,omitempty" yaml:"area,omitempty" mapstructure:"area,omitempty"`
|
||||
|
||||
// List notable courses/subjects
|
||||
Courses []string `json:"courses,omitempty" yaml:"courses,omitempty" mapstructure:"courses,omitempty"`
|
||||
|
||||
// EndDate corresponds to the JSON schema field "endDate".
|
||||
EndDate *Iso8601 `json:"endDate,omitempty" yaml:"endDate,omitempty" mapstructure:"endDate,omitempty"`
|
||||
|
||||
// e.g. Massachusetts Institute of Technology
|
||||
Institution *string `json:"institution,omitempty" yaml:"institution,omitempty" mapstructure:"institution,omitempty"`
|
||||
|
||||
// grade point average, e.g. 3.67/4.0
|
||||
Score *string `json:"score,omitempty" yaml:"score,omitempty" mapstructure:"score,omitempty"`
|
||||
|
||||
// StartDate corresponds to the JSON schema field "startDate".
|
||||
StartDate *Iso8601 `json:"startDate,omitempty" yaml:"startDate,omitempty" mapstructure:"startDate,omitempty"`
|
||||
|
||||
// e.g. Bachelor
|
||||
StudyType *string `json:"studyType,omitempty" yaml:"studyType,omitempty" mapstructure:"studyType,omitempty"`
|
||||
|
||||
// e.g. http://facebook.example.com
|
||||
Url *string `json:"url,omitempty" yaml:"url,omitempty" mapstructure:"url,omitempty"`
|
||||
}
|
||||
|
||||
type ResumeInterestsElem struct {
|
||||
// Keywords corresponds to the JSON schema field "keywords".
|
||||
Keywords []string `json:"keywords,omitempty" yaml:"keywords,omitempty" mapstructure:"keywords,omitempty"`
|
||||
|
||||
// e.g. Philosophy
|
||||
Name *string `json:"name,omitempty" yaml:"name,omitempty" mapstructure:"name,omitempty"`
|
||||
}
|
||||
|
||||
type ResumeLanguagesElem struct {
|
||||
// e.g. Fluent, Beginner
|
||||
Fluency *string `json:"fluency,omitempty" yaml:"fluency,omitempty" mapstructure:"fluency,omitempty"`
|
||||
|
||||
// e.g. English, Spanish
|
||||
Language *string `json:"language,omitempty" yaml:"language,omitempty" mapstructure:"language,omitempty"`
|
||||
}
|
||||
|
||||
// The schema version and any other tooling configuration lives here
|
||||
type ResumeMeta struct {
|
||||
// URL (as per RFC 3986) to latest version of this document
|
||||
Canonical *string `json:"canonical,omitempty" yaml:"canonical,omitempty" mapstructure:"canonical,omitempty"`
|
||||
|
||||
// Using ISO 8601 with YYYY-MM-DDThh:mm:ss
|
||||
LastModified *string `json:"lastModified,omitempty" yaml:"lastModified,omitempty" mapstructure:"lastModified,omitempty"`
|
||||
|
||||
// A version field which follows semver - e.g. v1.0.0
|
||||
Version *string `json:"version,omitempty" yaml:"version,omitempty" mapstructure:"version,omitempty"`
|
||||
}
|
||||
|
||||
type ResumeProjectsElem struct {
|
||||
// Short summary of project. e.g. Collated works of 2017.
|
||||
Description *string `json:"description,omitempty" yaml:"description,omitempty" mapstructure:"description,omitempty"`
|
||||
|
||||
// EndDate corresponds to the JSON schema field "endDate".
|
||||
EndDate *Iso8601 `json:"endDate,omitempty" yaml:"endDate,omitempty" mapstructure:"endDate,omitempty"`
|
||||
|
||||
// Specify the relevant company/domain affiliations e.g. 'greenpeace',
|
||||
// 'corporationXYZ'
|
||||
Entity *string `json:"domain,omitempty" yaml:"domain,omitempty" mapstructure:"domain,omitempty"`
|
||||
|
||||
// Specify multiple features
|
||||
Highlights []string `json:"highlights,omitempty" yaml:"highlights,omitempty" mapstructure:"highlights,omitempty"`
|
||||
|
||||
// Specify special elements involved
|
||||
Keywords []string `json:"keywords,omitempty" yaml:"keywords,omitempty" mapstructure:"keywords,omitempty"`
|
||||
|
||||
// e.g. The World Wide Web
|
||||
Name *string `json:"name,omitempty" yaml:"name,omitempty" mapstructure:"name,omitempty"`
|
||||
|
||||
// Specify your role on this project or in company
|
||||
Roles []string `json:"roles,omitempty" yaml:"roles,omitempty" mapstructure:"roles,omitempty"`
|
||||
|
||||
// StartDate corresponds to the JSON schema field "startDate".
|
||||
StartDate *Iso8601 `json:"startDate,omitempty" yaml:"startDate,omitempty" mapstructure:"startDate,omitempty"`
|
||||
|
||||
// e.g. 'volunteering', 'presentation', 'talk', 'application', 'conference'
|
||||
Type *string `json:"type,omitempty" yaml:"type,omitempty" mapstructure:"type,omitempty"`
|
||||
|
||||
// e.g. http://www.computer.org/csdl/mags/co/1996/10/rx069-abs.html
|
||||
Url *string `json:"url,omitempty" yaml:"url,omitempty" mapstructure:"url,omitempty"`
|
||||
}
|
||||
|
||||
type ResumePublicationsElem struct {
|
||||
// e.g. The World Wide Web
|
||||
Name *string `json:"name,omitempty" yaml:"name,omitempty" mapstructure:"name,omitempty"`
|
||||
|
||||
// e.g. IEEE, Computer Magazine
|
||||
Publisher *string `json:"publisher,omitempty" yaml:"publisher,omitempty" mapstructure:"publisher,omitempty"`
|
||||
|
||||
// ReleaseDate corresponds to the JSON schema field "releaseDate".
|
||||
ReleaseDate *Iso8601 `json:"releaseDate,omitempty" yaml:"releaseDate,omitempty" mapstructure:"releaseDate,omitempty"`
|
||||
|
||||
// Short summary of publication. e.g. Discussion of the World Wide Web, HTTP,
|
||||
// HTML.
|
||||
Summary *string `json:"summary,omitempty" yaml:"summary,omitempty" mapstructure:"summary,omitempty"`
|
||||
|
||||
// e.g. http://www.computer.org.example.com/csdl/mags/co/1996/10/rx069-abs.html
|
||||
Url *string `json:"url,omitempty" yaml:"url,omitempty" mapstructure:"url,omitempty"`
|
||||
}
|
||||
|
||||
type ResumeReferencesElem struct {
|
||||
// e.g. Timothy Cook
|
||||
Name *string `json:"name,omitempty" yaml:"name,omitempty" mapstructure:"name,omitempty"`
|
||||
|
||||
// e.g. Joe blogs was a great employee, who turned up to work at least once a
|
||||
// week. He exceeded my expectations when it came to doing nothing.
|
||||
Reference *string `json:"reference,omitempty" yaml:"reference,omitempty" mapstructure:"reference,omitempty"`
|
||||
}
|
||||
|
||||
type ResumeSkillsElem struct {
|
||||
// List some keywords pertaining to this skill
|
||||
Keywords []string `json:"keywords,omitempty" yaml:"keywords,omitempty" mapstructure:"keywords,omitempty"`
|
||||
|
||||
// e.g. Master
|
||||
Level *string `json:"level,omitempty" yaml:"level,omitempty" mapstructure:"level,omitempty"`
|
||||
|
||||
// e.g. Web Development
|
||||
Name *string `json:"name,omitempty" yaml:"name,omitempty" mapstructure:"name,omitempty"`
|
||||
}
|
||||
|
||||
type ResumeVolunteerElem struct {
|
||||
// EndDate corresponds to the JSON schema field "endDate".
|
||||
EndDate *Iso8601 `json:"endDate,omitempty" yaml:"endDate,omitempty" mapstructure:"endDate,omitempty"`
|
||||
|
||||
// Specify accomplishments and achievements
|
||||
Highlights []string `json:"highlights,omitempty" yaml:"highlights,omitempty" mapstructure:"highlights,omitempty"`
|
||||
|
||||
// e.g. Facebook
|
||||
Organization *string `json:"organization,omitempty" yaml:"organization,omitempty" mapstructure:"organization,omitempty"`
|
||||
|
||||
// e.g. Software Engineer
|
||||
Position *string `json:"position,omitempty" yaml:"position,omitempty" mapstructure:"position,omitempty"`
|
||||
|
||||
// StartDate corresponds to the JSON schema field "startDate".
|
||||
StartDate *Iso8601 `json:"startDate,omitempty" yaml:"startDate,omitempty" mapstructure:"startDate,omitempty"`
|
||||
|
||||
// Give an overview of your responsibilities at the company
|
||||
Summary *string `json:"summary,omitempty" yaml:"summary,omitempty" mapstructure:"summary,omitempty"`
|
||||
|
||||
// e.g. http://facebook.example.com
|
||||
Url *string `json:"url,omitempty" yaml:"url,omitempty" mapstructure:"url,omitempty"`
|
||||
}
|
||||
|
||||
type ResumeWorkElem struct {
|
||||
// e.g. Social Media Company
|
||||
Description *string `json:"description,omitempty" yaml:"description,omitempty" mapstructure:"description,omitempty"`
|
||||
|
||||
// EndDate corresponds to the JSON schema field "endDate".
|
||||
EndDate *Iso8601 `json:"endDate,omitempty" yaml:"endDate,omitempty" mapstructure:"endDate,omitempty"`
|
||||
|
||||
// Specify multiple accomplishments
|
||||
Highlights []string `json:"highlights,omitempty" yaml:"highlights,omitempty" mapstructure:"highlights,omitempty"`
|
||||
|
||||
// e.g. Menlo Park, CA
|
||||
Location *string `json:"location,omitempty" yaml:"location,omitempty" mapstructure:"location,omitempty"`
|
||||
|
||||
// e.g. Facebook
|
||||
Name *string `json:"name,omitempty" yaml:"name,omitempty" mapstructure:"name,omitempty"`
|
||||
|
||||
// e.g. Software Engineer
|
||||
Position *string `json:"position,omitempty" yaml:"position,omitempty" mapstructure:"position,omitempty"`
|
||||
|
||||
// StartDate corresponds to the JSON schema field "startDate".
|
||||
StartDate *Iso8601 `json:"startDate,omitempty" yaml:"startDate,omitempty" mapstructure:"startDate,omitempty"`
|
||||
|
||||
// Give an overview of your responsibilities at the company
|
||||
Summary *string `json:"summary,omitempty" yaml:"summary,omitempty" mapstructure:"summary,omitempty"`
|
||||
|
||||
// e.g. http://facebook.example.com
|
||||
Url *string `json:"url,omitempty" yaml:"url,omitempty" mapstructure:"url,omitempty"`
|
||||
}
|
||||
Loading…
Add table
Add a link
Reference in a new issue