Skip to content
Open

WIP #239

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
The table of contents is too big for display.
Diff view
Diff view
  •  
  •  
  •  
The diff you're trying to view is too large. We only load the first 3000 changed files.
Empty file added .gitignore
Empty file.
33 changes: 33 additions & 0 deletions api/model.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,33 @@
const db = require('../data/dbConfig');

const findAll = () => {
return (
db('babyNames')
)
}

const findByGender = (gender) => {
return (
db('babyNames')
.where('gender', gender)
)
}

const findBy = (filter) => {
return(
db('babyNames').where(filter)
)
}

const addName = async (nameObject) => {
await db('babyNames').insert(nameObject)

return db('babyNames').where('name', nameObject.name)
}

module.exports = {
findAll,
findByGender,
addName,
findBy
}
42 changes: 42 additions & 0 deletions api/router.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,42 @@
const express = require('express');
const Model = require('./model');

const router = express.Router();

router.get('/', (req, res, next) => {
Model.findAll()
.then(resp => {
res.status(200).json(resp);
})
.catch(error => {
next(error);
})
})

router.get('/:gender', (req, res, next) => {

if(req.params.gender !== 'male' || req.params.gender !== 'female'){
next({status: 201, message: 'There are only 2 genders please enter male or female'})
}

Model.findByGender(req.params.gender)
.then(resp => {
res.status(200).json(resp)
})
.catch(error => {
next(error);
})
})

router.post('/', (req, res, next) => {
Model.addName(req.body)
.then(resp => {
res.status(201).json(resp);
})
.catch(error => {
next(error);
})
})


module.exports = router;
18 changes: 18 additions & 0 deletions api/server.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,18 @@
const express = require('express');
const BabyNameRouter = require('./router');

const server = express();

server.use(express.json());
server.use('/api/babynames', BabyNameRouter);



server.use((err, req, res, next) => {
res.status(err.status || 500).json({
message: err.message,
stack: err.stack
})
})

module.exports = server;
59 changes: 59 additions & 0 deletions api/server.test.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,59 @@
const db = require('../data/dbConfig');
const server = require('./server');
const request = require('supertest');

const Model = require('./model');

beforeAll(async () => {
await db.migrate.rollback();
await db.migrate.latest();
})
beforeEach(async () => {
await db('babyNames').truncate();
})
afterAll(async () => {
await db.destroy();
})

test('sanity check', () => {
expect(1).toBe(1);
})

test('[GET] /babynames', async () => {
let result = await Model.findAll();
expect(result).toHaveLength(0);

await Model.addName({ name: 'Baker', gender: 'Male'})

result = await Model.findAll();
expect(result).toHaveLength(1);
})

describe('Testing GET /api/babynames/:gender', () => {
it('Tesing for resp with valid input', async () => {

await request(server).post('/api/babynames').send({ name: 'Chris', gender: 'male'})
await request(server).post('/api/babynames').send({ name: 'Brad', gender: 'male'})
await request(server).post('/api/babynames').send({ name: 'Andrew', gender: 'male'})
await request(server).post('/api/babynames').send({ name: 'Tyler', gender: 'male'})
await request(server).post('/api/babynames').send({ name: 'Katie', gender: 'female'})
await request(server).post('/api/babynames').send({ name: 'Brenda', gender: 'female'})
await request(server).post('/api/babynames').send({ name: 'Garret', gender: 'male'})

const test = await Model.findByGender('male');

expect(test.length).toBe(5);
})

it('testing for correct rest with invalid input', async () => {
const test = await request(server).get('/api/babynames/boygirl')
console.log('test: ', test);
expect(test.body.message).toBe('There are only 2 genders please enter male or female');
})

it('testing for correct resp with female input', async () => {
const test = await request(server).get('api/babynames/female')

expect(test.length).toBe(2);
})
})
Empty file added data/baby_names.db3
Empty file.
5 changes: 5 additions & 0 deletions data/dbConfig.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
const knex = require('knex');
const configurations = require('../knexfile.js');
const environment = process.env.NODE_ENV || 'development';

module.exports = knex(configurations[environment]);
19 changes: 19 additions & 0 deletions data/migrations/20220401065832_create-baby-names-table.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,19 @@
/**
* @param { import("knex").Knex } knex
* @returns { Promise<void> }
*/
exports.up = function(knex) {
return knex.schema.createTable('babyNames', tbl => {
tbl.increments();
tbl.string('name', 255).unique().notNullable()
tbl.string('gender').notNullable()
})
};

/**
* @param { import("knex").Knex } knex
* @returns { Promise<void> }
*/
exports.down = function(knex) {
return knex.schema.dropTableIfExists('babyNames');
};
57 changes: 57 additions & 0 deletions data/seeds/001-babynames.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,57 @@
/**
* @param { import("knex").Knex } knex
* @returns { Promise<void> }
*/
exports.seed = async function(knex) {
// Deletes ALL existing entries
return knex('babyNames').insert([
{
name: 'Jake',
gender: 'male'
},
{
name: 'Ben',
gender: 'male'
},
{
name: 'Brad',
gender: 'male'
},
{
name: 'Craig',
gender: 'male'
},
{
name: 'Tyler',
gender: 'male'
},
{
name: 'Zach',
gender: 'male'
},
{
name: 'Andrew',
gender: 'male'
},
{
name: 'Heather',
gender: 'female'
},
{
name: 'Katie',
gender: 'female'
},
{
name: 'Cristy',
gender: 'female'
},
{
name: 'Cindy',
gender: 'female'
},
{
name: 'Cathy',
gender: 'female'
},
])
};
Binary file added data/test_baby_names.db3
Binary file not shown.
9 changes: 9 additions & 0 deletions index.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
require('dotenv').config();

const server = require('./api/server.js');

const PORT = process.env.PORT || 9000;

server.listen(PORT, () => {
console.log(`Server running on localhost port ${PORT}`);
})
Loading