Skip to content

Commit

Permalink
create meets endpoint
Browse files Browse the repository at this point in the history
  • Loading branch information
josecmj committed Apr 1, 2021
1 parent 2ebee86 commit 468719a
Show file tree
Hide file tree
Showing 9 changed files with 217 additions and 2 deletions.
3 changes: 2 additions & 1 deletion index.js
Original file line number Diff line number Diff line change
Expand Up @@ -24,10 +24,11 @@ const repositories = new RepositoriesProvider(db)
const notesRepository = repositories.provideNotesRepository()
const sessionsRepository = repositories.provideSessionsRepository()
const teamsRepository = repositories.provideTeamsRepository()
const meetsRepository = repositories.provideMeetsRepository()

const ControllersProvider = env.controllers
const controllersProvider = new ControllersProvider(notesRepository, sessionsRepository,
teamsRepository)
teamsRepository, meetsRepository)

const auth = require('./src/middlewares/auth')
const RouterProvider = env.router
Expand Down
8 changes: 7 additions & 1 deletion src/controllers/index.js
Original file line number Diff line number Diff line change
@@ -1,12 +1,14 @@
const NoteController = require('./noteController')
const SessionController = require('./sessionController')
const TeamController = require('./teamController')
const MeetController = require('./meetController')

class ControllersProvider {
constructor (noteRepository, sessionRepository, teamRepository) {
constructor (noteRepository, sessionRepository, teamRepository, meetRepository) {
this.noteRepository = noteRepository
this.sessionRepository = sessionRepository
this.teamRepository = teamRepository
this.meetRepository = meetRepository
}

getNotesController () {
Expand All @@ -20,6 +22,10 @@ class ControllersProvider {
getTeamsController () {
return new TeamController(this.teamRepository)
}

getMeetsController() {
return new MeetController(this.meetRepository)
}
}

module.exports = ControllersProvider
28 changes: 28 additions & 0 deletions src/controllers/meetController.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,28 @@
class MeetController {
constructor (meetRepository) {
this.meetRepository = meetRepository
}

async getMeets () {
return this.meetRepository.getMeets()
}

async getMeet (meet) {
return this.meetRepository.getMeet(meet)
}

async createMeet (meet) {
return this.meetRepository.createMeet(meet)
}

async editMeet (meet) {
return this.meetRepository.editMeet(meet)
}

async deleteMeet (meet) {
return this.meetRepository.deleteMeet(meet.id)
}
}

module.exports = MeetController

19 changes: 19 additions & 0 deletions src/model/meet.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,19 @@
class Meet {
constructor (id, date, idTeam) {
this.id = id
this.date = date
this.idTeam = idTeam
}

// returns javascript object representation of team model
getMeet () {
return {
id: this.id,
date: this.date,
idTeam: this.idTeam
}
}
}

module.exports = Meet

5 changes: 5 additions & 0 deletions src/repositories/index.js
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
const NoteRepository = require('./noteRepository')
const SessionRepository = require('./sessionRepository')
const TeamRepository = require('./teamRepository/teamRepository')
const MeetRepository = require('./meetRepository/meetRepository')

class RepositoriesProvider {
constructor (db) {
Expand All @@ -18,6 +19,10 @@ class RepositoriesProvider {
provideTeamsRepository () {
return new TeamRepository(this.db)
}

provideMeetsRepository () {
return new MeetRepository(this.db)
}
}

module.exports = RepositoriesProvider
29 changes: 29 additions & 0 deletions src/repositories/meetRepository/meetRepository.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,29 @@
class MeetRepository {
constructor (db) {
this.db = db
this.table = 'meets'
}

async getMeets () {
return this.db.executeGetDB(this.table)
}

async getMeet (meet) {
return this.db.executeGetDB(this.table, meet)
}

async createMeet (meet) {
return this.db.executeInsert(this.table, meet.getMeet())
}

async editMeet (meet) {
return this.db.executeUpdateDB(this.table, meet.id, meet.getMeet())
}

async deleteMeet (id) {
return this.db.executeDelete(this.table, id)
}
}

module.exports = MeetRepository

5 changes: 5 additions & 0 deletions src/router/index.js
Original file line number Diff line number Diff line change
@@ -1,9 +1,11 @@
const notesFromSessionURL = '/notes/'
const sessionURL = '/sessions/'
const teamURL = '/teams/'
const meetURL = '/meets/'
const NotesRouter = require('./notesRouter')
const SessionRouter = require('./sessionRouter')
const TeamRouter = require('./teamRouter/teamRouter')
const MeetRouter = require('./meetRouter/meetRouter')

class RouterProvider {
constructor (app, controllers, auth) {
Expand All @@ -24,6 +26,9 @@ class RouterProvider {

var teamRouter = new TeamRouter(this.controllers.getTeamsController())
this.app.use(teamURL, teamRouter.getRoutes())

var meetRouter = new MeetRouter(this.controllers.getMeetsController())
this.app.use(meetURL, meetRouter.getRoutes())
}
}

Expand Down
69 changes: 69 additions & 0 deletions src/router/meetRouter/meetMapper.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,69 @@
const Joi = require('joi')
const GenericMapper = require('../genericMapper')
const Meet = require('../../model/meet')

class MeetMapper {
constructor () {
this.genericMapper = new GenericMapper()
}

mapGetMeets (req) {
return this.genericMapper.map(this.validateEmpty.bind(this), req.params)
}

mapGetMeet (req) {
var map = this.genericMapper.map(this.validateId.bind(this), req.params)
var model = new Meet(map.id, null, null)
return model
}

mapCreateMeet (req) {
var map = this.genericMapper.map(this.validateMeet.bind(this), req.body)
var model = new Meet(null, map.date, map.idTeam)
return model
}

mapEditMeet (req) {
let newMeet = { ...req.params, ...req.body }
var map = this.genericMapper.map(this.validateMeetWithId.bind(this), newMeet)
var model = new Meet(null, map.date, map.idTeam)
return model
}

mapDeleteMeet (req) {
var map = this.genericMapper.map(this.validateId.bind(this), req.params)
var model = new Meet(map.id, null, null)
return model
}

validateEmpty (meet) {
return Joi.validate(meet, Joi.object().required())
}

validateId (meet) {
return Joi.validate(meet, Joi.object({
id: Joi.string().required()
}).required())
}

validateMeetWithId (meet) {
var model = Joi.validate(meet, Joi.object({
id: Joi.string().required(),
date: Joi.string().required(),
idTeam: Joi.string().required()
}))

return model
}

validateMeet (meet) {
var model = Joi.validate(meet, Joi.object({
date: Joi.string().required(),
idTeam: Joi.string().required()
}))

return model
}
}

module.exports = MeetMapper
53 changes: 53 additions & 0 deletions src/router/meetRouter/meetRouter.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,53 @@
const express = require('express')
const MeetMapper = require('./meetMapper')
const Router = require('../router')

class MeetRouter {
constructor (meetController) {
this.meetMapper = new MeetMapper()
this.app = express()
this.meetController = meetController
this.genericRouter = new Router(this.meetMapper)
}

getRoutes () {
this.app.get('/', (req, res) => {
this.genericRouter.execute(
this.meetController.getMeets.bind(this.meetController),
this.meetMapper.mapGetMeets.bind(this.meetMapper),
req, res)
})

this.app.get('/:id', (req, res) => {
this.genericRouter.execute(
this.meetController.getMeet.bind(this.meetController),
this.meetMapper.mapGetMeet.bind(this.meetMapper),
req, res)
})

this.app.post('/', (req, res) => {
this.genericRouter.execute(
this.meetController.createMeet.bind(this.meetController),
this.meetMapper.mapCreateMeet.bind(this.meetMapper),
req, res)
})

this.app.put('/:id', (req, res) => {
this.genericRouter.execute(
this.meetController.editMeet.bind(this.meetController),
this.meetMapper.mapEditMeet.bind(this.meetMapper),
req, res)
})

this.app.delete('/:id', (req, res) => {
this.genericRouter.execute(
this.meetController.deleteMeet.bind(this.meetController),
this.meetMapper.mapDeleteMeet.bind(this.meetMapper),
req, res)
})

return this.app
}
}

module.exports = MeetRouter

0 comments on commit 468719a

Please sign in to comment.