Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
17 changes: 17 additions & 0 deletions api/project/middleware.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,17 @@

async function checkProject(req,res,next){
try {
const { project_name } = req.body
if(project_name){
next();
}else{
next({ status: 400, message: 'project needs a name!'})
}
} catch (error) {
next(error)
}
}

module.exports = {
checkProject
}
41 changes: 41 additions & 0 deletions api/project/model.js
Original file line number Diff line number Diff line change
@@ -1 +1,42 @@
// build your `Project` model here
const db = require('../../data/dbConfig')

async function get() {
const rows = await db('projects');
const result = rows.map(row => {
return {
...row,
project_completed: row.project_completed ? true : false
}
})
return (result)
}

async function create(project) {
const [newID] = await db('projects').insert(project)
const newPost = await db('projects').where('project_id', newID)
const result = newPost.map(row => {
return {
...row,
project_completed: row.project_completed ? true : false
}
})
return result[0]
}

async function getById(id) {
try {
const row = await db('projects')
.where('project_id', id)
return (row)
} catch (error) {
return
}

}

module.exports = {
get,
create,
getById
}
25 changes: 25 additions & 0 deletions api/project/router.js
Original file line number Diff line number Diff line change
@@ -1 +1,26 @@
// build your `/api/projects` router here
const express = require('express')
const Project = require('./model')
const { checkProject } = require('./middleware')

const router = express.Router()

router.get('/', async (req, res, next) => {
const data = await Project.get()
try {
res.status(200).json(data)
} catch (error) {
next(error)
}
})

router.post('/', checkProject, async (req, res, next) => {
const data = await Project.create(req.body)
try {
res.status(201).json(data)
} catch (error) {
next(error)
}
})

module.exports = router
19 changes: 19 additions & 0 deletions api/resource/middleware.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,19 @@
const Resource = require('./model')

async function checkResource(req, res, next) {
const { resource_name } = req.body
const resource = await Resource.getByName(resource_name)
try {
if(resource.length === 0){
next();
}else{
next({ status: 400, message: 'Resource name must be unique!'})
}
} catch (error) {
next(error)
}
}

module.exports = {
checkResource
}
26 changes: 26 additions & 0 deletions api/resource/model.js
Original file line number Diff line number Diff line change
@@ -1 +1,27 @@
// build your `Resource` model here
const db = require('../../data/dbConfig')


async function get(){
const rows = await db('resources');
return(rows)
}

async function create(resource){
const [newID] = await db('resources').insert(resource)
const newPost = await db('resources').where('resource_id', newID)
return newPost[0]
}

async function getByName(resource){
const row = await db('resources')
.where('resource_name',resource)
return(row)
}

module.exports = {
get,
create,
getByName

}
25 changes: 25 additions & 0 deletions api/resource/router.js
Original file line number Diff line number Diff line change
@@ -1 +1,26 @@
// build your `/api/resources` router here
const express = require('express')
const Resource = require('./model')
const { checkResource } = require('./middleware')

const router = express.Router()

router.get('/', async (req,res,next) => {
const data = await Resource.get()
try {
res.status(200).json(data)
} catch (error) {
next(error)
}
})

router.post('/', checkResource, async (req,res,next) => {
const data = await Resource.create(req.body)
try {
res.status(200).json(data)
} catch (error) {
next(error)
}
})

module.exports = router
24 changes: 24 additions & 0 deletions api/server.js
Original file line number Diff line number Diff line change
@@ -1 +1,25 @@
// build your server here and require it from index.js
const express = require('express')
const resourcesRouter = require('./resource/router')
const projectsRouter = require('./project/router')
const tasksRouter = require('./task/router')

const server = express();

server.use(express.json());
server.use('/api/resources', resourcesRouter)
server.use('/api/projects', projectsRouter)
server.use('/api/tasks', tasksRouter)

server.get('/', (req,res) => {
res.status(200).json({ message: 'connected to server!'})
})

// eslint-disable-next-line no-unused-vars
server.use((err, req, res, next) => {
res.status(err.status || 500).json({
message: err.message
})
})

module.exports = server
23 changes: 23 additions & 0 deletions api/task/middleware.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,23 @@
const Project = require('../project/model')

async function checkTask(req, res, next) {
try {
const { task_description,project_id } = req.body
let project = await Project.getById(project_id)
if(project.length === 0 || !project_id){
next({ status: 400, message: "invalid project_id"})
}
else if(!task_description){
next({ status: 400, message: "requires task_description!"})
}else{
next();
}
} catch (error) {
next(error)
}

}

module.exports = {
checkTask,
}
37 changes: 37 additions & 0 deletions api/task/model.js
Original file line number Diff line number Diff line change
@@ -1 +1,38 @@
// build your `Task` model here
const db = require('../../data/dbConfig')

async function get() {
const rows = await db('tasks as t')
.leftJoin('projects as p', 't.project_id', 'p.project_id')
.select('t.task_id',
't.task_description',
't.task_notes',
't.task_completed',
'p.project_name',
'p.project_description');
const result = rows.map(row => {
return {
...row,
task_completed: row.task_completed ? true : false
}
})
return (result)
}

async function create(task) {
const [newID] = await db('tasks').insert(task)
const newPost = await db('tasks').where('task_id', newID)
const result = newPost.map(row => {
return {
...row,
task_completed: row.task_completed ? true : false
}
})
return result[0]
}

module.exports = {
get,
create

}
25 changes: 25 additions & 0 deletions api/task/router.js
Original file line number Diff line number Diff line change
@@ -1 +1,26 @@
// build your `/api/tasks` router here
const express = require('express')
const Task = require('./model')
const { checkTask } = require('./middleware')

const router = express.Router()

router.get('/', async (req, res, next) => {
const data = await Task.get()
try {
res.status(200).json(data)
} catch (error) {
next(error)
}
})

router.post('/', checkTask, async (req, res, next) => {
const data = await Task.create(req.body)
try {
res.status(200).json(data)
} catch (error) {
next(error)
}
})

module.exports = router;
61 changes: 61 additions & 0 deletions data/migrations/20230118183939_first-migration.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,61 @@
/**
* @param { import("knex").Knex } knex
* @returns { Promise<void> }
*/
exports.up = async function(knex) {
await knex.schema
.createTable('projects', table => {
table.increments('project_id')
table.string('project_name').notNullable()
table.string('project_description')
table.boolean('project_completed')
})
.createTable('resources', table => {
table.increments('resource_id')
table.string('resource_name').notNullable()
table.string('resource_description')
})
.createTable('tasks', table => {
table.increments('task_id')
table.string('task_description').notNullable()
table.string('task_notes')
table.boolean('task_completed')
table.integer('project_id')
.unsigned()
.notNullable()
.references('project_id')
.inTable('projects')
.onDelete('RESTRICT')
.onUpdate('RESTRICT')
})
.createTable('project_resources', table => {
table.increments('p_r_id')
table.integer('resource_id')
.unsigned()
.notNullable()
.references('resource_id')
.inTable('resources')
.onDelete('RESTRICT')
.onUpdate('RESTRICT')
table.integer('project_id')
.unsigned()
.notNullable()
.references('project_id')
.inTable('projects')
.onDelete('RESTRICT')
.onUpdate('RESTRICT')
})

};

/**
* @param { import("knex").Knex } knex
* @returns { Promise<void> }
*/
exports.down = async function(knex) {
await knex.schema
.dropTableIfExists('project_resources')
.dropTableIfExists('tasks')
.dropTableIfExists('resources')
.dropTableIfExists('projects')
};
20 changes: 20 additions & 0 deletions data/seeds/1_projects.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,20 @@
/**
* @param { import("knex").Knex } knex
* @returns { Promise<void> }
*/
exports.seed = async function (knex) {
// Deletes ALL existing entries
await knex('projects').del()
await knex('projects').insert([
{
project_name: 'Create table',
project_description: 'Intial SQL table creation',
project_completed: false
},
{
project_name: 'Seed Table',
project_description: 'create seeds for tables',
project_completed: true
},
]);
};
22 changes: 22 additions & 0 deletions data/seeds/2_resources.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,22 @@
/**
* @param { import("knex").Knex } knex
* @returns { Promise<void> }
*/
exports.seed = async function (knex) {
// Deletes ALL existing entries
await knex('resources').del()
await knex('resources').insert([
{
resource_name: 'google',
resource_description: 'search google on how to create tables and seeds',
},
{
resource_name: 'bloomtech',
resource_description: 'refer to bloomtech on table creation',
},
{
resource_name: 'module 4',
resource_description: 'module 4 described table creation',
},
]);
};
Loading