Skip to content

Commit

Permalink
Merge pull request #5 from hariscs/feature
Browse files Browse the repository at this point in the history
Feature
  • Loading branch information
hariscs authored Feb 24, 2024
2 parents 8dbf16b + 1036a3d commit 4e4253a
Show file tree
Hide file tree
Showing 5 changed files with 126 additions and 13 deletions.
97 changes: 89 additions & 8 deletions apps/api/src/controllers/job_controller.ts
Original file line number Diff line number Diff line change
@@ -1,29 +1,110 @@
import { Request, Response } from 'express'
import { JOB_SCHEMA } from '../models/job_model'
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> {
try {
const jobs = await JOB_SCHEMA.find()
// fetch jobs
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> {
try {
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
}
res.status(200).json(job)
} catch (error) {
console.error('Error fetching job:', 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> {
try {
//* post job
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)
console.error('Error posting job:', 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> {
try {
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
const deleted_job = await JOB_SCHEMA.findByIdAndDelete(id)
res.status(200).json({ message: 'Job deleted successfully' })
} catch (error) {
console.error('Error deleting job:', 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> {
try {
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
const updated_job = await JOB_SCHEMA.findByIdAndUpdate(id, req.body, {
new: true,
})
res.status(200).json(updated_job)
} catch (error) {
console.error('Error updating job:', error)
res.status(500).json({ error: 'Internal server error' })
}
}
2 changes: 1 addition & 1 deletion apps/api/src/index.ts
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
import { log } from '@repo/logger'
import { createServer } from './server'
import job_route from './routes/job_route'
import job_route from '@routes/job_route'

const port = process.env.PORT || 5001
const server = createServer()
Expand Down
27 changes: 25 additions & 2 deletions 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)
router.post('/job', post_job)

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

//* @desc Post job
//! @access Private
router.post('/', 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
2 changes: 1 addition & 1 deletion apps/api/src/server.ts
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@ import express, { type Express } from 'express'
import morgan from 'morgan'
import cors from 'cors'
import { config } from 'dotenv'
import { connect_db } from '../config/db'
import { connect_db } from '@config/db'

config()
connect_db()
Expand Down
11 changes: 10 additions & 1 deletion apps/api/tsconfig.json
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,16 @@
"lib": ["ES2015"],
"module": "CommonJS",
"outDir": "./dist",
"baseUrl": ".",
"paths": {
"@/*": ["src/*"],
"@lib/*": ["src/lib/*"],
"@controllers/*": ["src/controllers/*"],
"@models/*": ["src/models/*"],
"@config/*": ["config/*"],
"@routes/*": ["src/routes/*"],
},
},
"exclude": ["node_modules"],
"include": ["."]
"include": ["."],
}

0 comments on commit 4e4253a

Please sign in to comment.