Skip to content

Commit

Permalink
feat: add CRUD routes and controllers for jobs
Browse files Browse the repository at this point in the history
  • Loading branch information
hariscs committed Feb 24, 2024
1 parent 8dbf16b commit 861fa38
Show file tree
Hide file tree
Showing 2 changed files with 113 additions and 7 deletions.
95 changes: 89 additions & 6 deletions apps/api/src/controllers/job_controller.ts
Original file line number Diff line number Diff line change
@@ -1,27 +1,110 @@
import { Request, Response } from 'express'
import { JOB_SCHEMA } from '../models/job_model'
import { isValidObjectId } from 'mongoose'

//* @desc Get all jobs
//* route GET /api/jobs
//* @access Public
export async function get_jobs(req: Request, res: Response): Promise<void> {
//? @access Public
export async function get_jobs(_: Request, res: Response): Promise<void> {
// fetch jobs
try {
const jobs = await JOB_SCHEMA.find()
const jobs = await JOB_SCHEMA.find({}).sort({ createdAt: -1 })
res.status(200).json({ jobs })
} catch (error) {
console.error('Error fetching jobs:', error)
res.status(500).json({ error: 'Internal server error' })
}
}

//* @desc Post a job
//* @desc Get job
//* route GET /api/jobs/:id
//? @access Public
export async function get_job(req: Request, res: Response): Promise<void> {
const { id } = req.params
//* check if id is valid
if (!isValidObjectId(id)) {
res.status(400).json({ error: 'Invalid id' })
return
}
//* check if job exists
const job = await JOB_SCHEMA.findById(id)
if (!job) {
res.status(404).json({ error: 'Job not found' })
return
}
// fetch job
try {
const job = await JOB_SCHEMA.findById(id)
res.status(200).json(job)
} catch (error) {
console.error('Error fetching jobs:', error)
res.status(500).json({ error: 'Internal server error' })
}
}

//* @desc Post job
//* route POST /api/jobs/job
//* @access Private
//! @access Private
export async function post_job(req: Request, res: Response): Promise<void> {
//* post job
try {
const jobData = req.body
const newJob = await JOB_SCHEMA.create(jobData)
res.status(201).json({ message: 'Job posted', newJob })
res.status(201).json(newJob)
} catch (error) {
console.error('Error fetching jobs:', error)
res.status(500).json({ error: 'Internal server error' })
}
}

//* @desc Delete job
//* route DELETE /api/jobs/:id
//! @access Private
export async function delete_job(req: Request, res: Response): Promise<void> {
const { id } = req.params
//* check if id is valid
if (!isValidObjectId(id)) {
res.status(400).json({ error: 'Invalid id' })
return
}
//* check if job exists
const job = await JOB_SCHEMA.findById(id)
if (!job) {
res.status(404).json({ error: 'Job not found' })
return
}
//* delete job
try {
const deleted_job = await JOB_SCHEMA.findByIdAndDelete(id)
res.status(200).json(deleted_job)
} catch (error) {
console.error('Error fetching jobs:', error)
res.status(500).json({ error: 'Internal server error' })
}
}

//* @desc Update job
//* route PATCH /api/jobs/:id
//! @access Private
export async function update_job(req: Request, res: Response): Promise<void> {
const { id } = req.params
//* check if id is valid
if (!isValidObjectId(id)) {
res.status(400).json({ error: 'Invalid id' })
return
}
//* check if job exists
const job = await JOB_SCHEMA.findById(id)
if (!job) {
res.status(404).json({ error: 'Job not found' })
return
}
//* update job
try {
const updated_job = await JOB_SCHEMA.findByIdAndUpdate(id, req.body, {
new: true,
})
res.status(200).json(updated_job)
} catch (error) {
console.error('Error fetching jobs:', error)
res.status(500).json({ error: 'Internal server error' })
Expand Down
25 changes: 24 additions & 1 deletion apps/api/src/routes/job_route.ts
Original file line number Diff line number Diff line change
@@ -1,9 +1,32 @@
import express from 'express'
import { get_jobs, post_job } from '../controllers/job_controller'
import {
delete_job,
get_job,
get_jobs,
post_job,
update_job,
} from '../controllers/job_controller'

const router = express.Router()

//* @desc Get all jobs
//? @access Public
router.get('/', get_jobs)

//* @desc Get job
//? @access Public
router.get('/:id', get_job)

//* @desc Post job
//! @access Private
router.post('/job', post_job)

//* @desc Delete job
//! @access Private
router.delete('/:id', delete_job)

//* @desc Update job
//! @access Private
router.patch('/:id', update_job)

export default router

0 comments on commit 861fa38

Please sign in to comment.