376 lines
No EOL
13 KiB
JSON
376 lines
No EOL
13 KiB
JSON
{
|
|
"swagger": "2.0",
|
|
"info": {
|
|
"description": "API for managing job scraping operations",
|
|
"title": "Jobs Scraper API",
|
|
"contact": {},
|
|
"version": "1.0"
|
|
},
|
|
"basePath": "/",
|
|
"paths": {
|
|
"/jobs": {
|
|
"get": {
|
|
"description": "Gets all jobs with the provided specifications",
|
|
"consumes": [
|
|
"application/json"
|
|
],
|
|
"produces": [
|
|
"application/json"
|
|
],
|
|
"tags": [
|
|
"jobs"
|
|
],
|
|
"summary": "Gets all jobs",
|
|
"parameters": [
|
|
{
|
|
"type": "string",
|
|
"description": "Location filter",
|
|
"name": "location",
|
|
"in": "query"
|
|
},
|
|
{
|
|
"type": "string",
|
|
"description": "Keywords filter (searches title and company)",
|
|
"name": "keywords",
|
|
"in": "query"
|
|
},
|
|
{
|
|
"type": "string",
|
|
"description": "Full/Part time filter",
|
|
"name": "fwt",
|
|
"in": "query"
|
|
},
|
|
{
|
|
"enum": [
|
|
0,
|
|
1,
|
|
2,
|
|
3,
|
|
4,
|
|
5,
|
|
6,
|
|
7
|
|
],
|
|
"type": "integer",
|
|
"description": "Job provider (LinkedIn=0, Indeed=1, Glassdoor=2, Bayt=3, TokyoDev=4, JapanDev=5, Google=6, HiringCafe=7)",
|
|
"name": "provider",
|
|
"in": "query"
|
|
},
|
|
{
|
|
"type": "integer",
|
|
"description": "Page number",
|
|
"name": "pageNumber",
|
|
"in": "query"
|
|
},
|
|
{
|
|
"type": "integer",
|
|
"description": "Number of elements",
|
|
"name": "pageSize",
|
|
"in": "query"
|
|
}
|
|
],
|
|
"responses": {
|
|
"201": {
|
|
"description": "Successfully retrieved jobs",
|
|
"schema": {
|
|
"type": "object",
|
|
"additionalProperties": {
|
|
"type": "string"
|
|
}
|
|
}
|
|
},
|
|
"400": {
|
|
"description": "Invalid request data",
|
|
"schema": {
|
|
"type": "object",
|
|
"additionalProperties": {
|
|
"type": "string"
|
|
}
|
|
}
|
|
},
|
|
"500": {
|
|
"description": "Internal server error",
|
|
"schema": {
|
|
"type": "object",
|
|
"additionalProperties": {
|
|
"type": "string"
|
|
}
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"post": {
|
|
"description": "Creates a new job with the provided specifications",
|
|
"consumes": [
|
|
"application/json"
|
|
],
|
|
"produces": [
|
|
"application/json"
|
|
],
|
|
"tags": [
|
|
"jobs"
|
|
],
|
|
"summary": "Create a new job",
|
|
"parameters": [
|
|
{
|
|
"description": "Job creation data",
|
|
"name": "job",
|
|
"in": "body",
|
|
"required": true,
|
|
"schema": {
|
|
"$ref": "#/definitions/ports.CreateJobCommand"
|
|
}
|
|
}
|
|
],
|
|
"responses": {
|
|
"201": {
|
|
"description": "Successfully created job",
|
|
"schema": {
|
|
"type": "object",
|
|
"additionalProperties": {
|
|
"type": "string"
|
|
}
|
|
}
|
|
},
|
|
"400": {
|
|
"description": "Invalid request data",
|
|
"schema": {
|
|
"type": "object",
|
|
"additionalProperties": {
|
|
"type": "string"
|
|
}
|
|
}
|
|
},
|
|
"500": {
|
|
"description": "Internal server error",
|
|
"schema": {
|
|
"type": "object",
|
|
"additionalProperties": {
|
|
"type": "string"
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"/jobs/analysis": {
|
|
"get": {
|
|
"description": "Retrieves all job analysis results from the database",
|
|
"produces": [
|
|
"application/json"
|
|
],
|
|
"tags": [
|
|
"jobs"
|
|
],
|
|
"summary": "Get all job analysis results",
|
|
"responses": {
|
|
"200": {
|
|
"description": "List of job analysis results",
|
|
"schema": {
|
|
"type": "array",
|
|
"items": {
|
|
"$ref": "#/definitions/domain.JobAnalysisResult"
|
|
}
|
|
}
|
|
},
|
|
"500": {
|
|
"description": "Internal server error",
|
|
"schema": {
|
|
"type": "object",
|
|
"additionalProperties": {
|
|
"type": "string"
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"/jobs/analysis/top-matches": {
|
|
"get": {
|
|
"description": "Retrieves jobs with high analysis match scores",
|
|
"produces": [
|
|
"application/json"
|
|
],
|
|
"tags": [
|
|
"jobs"
|
|
],
|
|
"summary": "Get top matching jobs",
|
|
"parameters": [
|
|
{
|
|
"type": "integer",
|
|
"description": "Minimum match score (default: 70)",
|
|
"name": "min_score",
|
|
"in": "query"
|
|
}
|
|
],
|
|
"responses": {
|
|
"200": {
|
|
"description": "List of top matching job analysis results",
|
|
"schema": {
|
|
"type": "array",
|
|
"items": {
|
|
"$ref": "#/definitions/domain.JobAnalysisResult"
|
|
}
|
|
}
|
|
},
|
|
"400": {
|
|
"description": "Invalid minimum score",
|
|
"schema": {
|
|
"type": "object",
|
|
"additionalProperties": {
|
|
"type": "string"
|
|
}
|
|
}
|
|
},
|
|
"500": {
|
|
"description": "Internal server error",
|
|
"schema": {
|
|
"type": "object",
|
|
"additionalProperties": {
|
|
"type": "string"
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"/jobs/{id}/analysis": {
|
|
"get": {
|
|
"description": "Retrieves the analysis result for a specific job",
|
|
"produces": [
|
|
"application/json"
|
|
],
|
|
"tags": [
|
|
"jobs"
|
|
],
|
|
"summary": "Get job analysis result by job ID",
|
|
"parameters": [
|
|
{
|
|
"type": "integer",
|
|
"description": "Job ID",
|
|
"name": "id",
|
|
"in": "path",
|
|
"required": true
|
|
}
|
|
],
|
|
"responses": {
|
|
"200": {
|
|
"description": "Job analysis result",
|
|
"schema": {
|
|
"$ref": "#/definitions/domain.JobAnalysisResult"
|
|
}
|
|
},
|
|
"400": {
|
|
"description": "Invalid job ID",
|
|
"schema": {
|
|
"type": "object",
|
|
"additionalProperties": {
|
|
"type": "string"
|
|
}
|
|
}
|
|
},
|
|
"404": {
|
|
"description": "Analysis result not found",
|
|
"schema": {
|
|
"type": "object",
|
|
"additionalProperties": {
|
|
"type": "string"
|
|
}
|
|
}
|
|
},
|
|
"500": {
|
|
"description": "Internal server error",
|
|
"schema": {
|
|
"type": "object",
|
|
"additionalProperties": {
|
|
"type": "string"
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"definitions": {
|
|
"domain.JobAnalysisResult": {
|
|
"type": "object",
|
|
"properties": {
|
|
"analysisResult": {
|
|
"type": "string"
|
|
},
|
|
"analyzedAt": {
|
|
"type": "string"
|
|
},
|
|
"id": {
|
|
"type": "integer",
|
|
"format": "int64"
|
|
},
|
|
"jobID": {
|
|
"type": "integer",
|
|
"format": "int64"
|
|
},
|
|
"keySkills": {
|
|
"type": "array",
|
|
"items": {
|
|
"type": "string"
|
|
}
|
|
},
|
|
"matchScore": {
|
|
"type": "integer"
|
|
},
|
|
"missingSkills": {
|
|
"type": "array",
|
|
"items": {
|
|
"type": "string"
|
|
}
|
|
},
|
|
"recommendations": {
|
|
"type": "string"
|
|
}
|
|
}
|
|
},
|
|
"domain.JobProvider": {
|
|
"type": "integer",
|
|
"enum": [
|
|
0,
|
|
1,
|
|
2,
|
|
3,
|
|
4,
|
|
5,
|
|
6,
|
|
7
|
|
],
|
|
"x-enum-varnames": [
|
|
"LinkedIn",
|
|
"Indeed",
|
|
"Glassdoor",
|
|
"Bayt",
|
|
"TokyoDev",
|
|
"JapanDev",
|
|
"Google",
|
|
"HiringCafe"
|
|
]
|
|
},
|
|
"ports.CreateJobCommand": {
|
|
"type": "object",
|
|
"properties": {
|
|
"fwt": {
|
|
"type": "string"
|
|
},
|
|
"keywords": {
|
|
"type": "string"
|
|
},
|
|
"location": {
|
|
"type": "string"
|
|
},
|
|
"numPages": {
|
|
"type": "integer"
|
|
},
|
|
"provider": {
|
|
"$ref": "#/definitions/domain.JobProvider"
|
|
}
|
|
}
|
|
}
|
|
}
|
|
} |