Last active
January 24, 2018 13:12
-
-
Save marcusradell/b860c48a83881c2a58e78cf749e42b81 to your computer and use it in GitHub Desktop.
PoC pure server
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
import { makeModel } from './model' | |
import { makeRouteDefs } from './route-defs' | |
import { makeRouteResolvers } from './route-resolvers' | |
import { makeServices } from './services' | |
export const makeReports = props => { | |
const { provider, salesModel } = props | |
const { serviceEffects } = provider | |
const { db, token } = serviceEffects | |
const services = makeServices(db, token) | |
const model = makeModel(services, salesModel) | |
const routeDefs = makeRouteDefs() | |
const routeResolvers = makeRouteResolvers(model) | |
return { | |
model, | |
routeDefs, | |
routeResolvers, | |
} | |
} |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
const makeCreateReport = (reportServices, salesModel) => ( | |
startDate, | |
endDate, | |
locationId | |
) => { | |
const { createCompleteReport, createReportToken } = reportServices | |
return ( | |
// @TODO(MANI): calculate a Report Number here? | |
Promise.all([ | |
createReportToken(), | |
salesModel.getSalesByLocationId(startDate, endDate, locationId), | |
salesModel.getSellerByLocationId(locationId), | |
salesModel.getKarma(), | |
]) | |
.then(([token, salesData, sellerData, karmaData]) => { | |
// @TODO(MANI): validate that the salesData is complete, otherwise createIncompleteReport | |
return { | |
endDate, | |
karmaData, | |
locationId, | |
salesData: JSON.stringify(salesData), | |
sellerData: JSON.stringify(sellerData), | |
startDate: JSON.stringify(startDate), | |
token, | |
} | |
}) | |
.then(reportData => createCompleteReport(reportData)) | |
// @TODO(MANI): Return the created report ID | |
.then(a => a) | |
) | |
} | |
export const makeModel = (reportServices, salesModel) => { | |
const createReport = makeCreateReport(reportServices, salesModel) | |
return { | |
createReport, | |
} | |
} |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
export const makeRouteDefs = () => [ | |
{ | |
body: ['startDate', 'endDate', 'locationId'], | |
id: 'createReport', | |
method: 'post', | |
}, | |
] |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
const makeCreateReport = reportModel => routeArgs => { | |
const { body } = routeArgs | |
const { startDate, endDate, locationId } = body | |
return reportModel.createReport(startDate, endDate, locationId) | |
} | |
export const makeRouteResolvers = reportModel => { | |
const createReport = makeCreateReport(reportModel) | |
return { | |
createReport, | |
} | |
} |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
interface ICreateReportData { | |
... | |
} | |
const createCompleteReportDef = (bind: ICreateReportData) => { | |
return [ | |
` | |
INSERT INTO reports | |
( | |
... | |
) VALUES | |
( | |
... | |
) | |
`, | |
{ | |
bind, | |
type: 'INSERT', | |
}, | |
] | |
} | |
// @TODO(MANI): Implement | |
const createIncompleteReport = null | |
export const makeServices = (dbEffect, tokenEffect) => { | |
const createCompleteReport = data => dbEffect(createCompleteReportDef(data)) | |
const createReportToken = () => tokenEffect() | |
return { | |
createCompleteReport, | |
createReportToken, | |
} | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment