graph TD
A[Reader] & B[PartnerService]
A --> C[PartnerController]
B --> C[PartnerController]
C --> D[server]
Crea API server.
app.get("/", (request, response) => {
response.json({message: "Code Challenge Api welcome!"});
});
app.get("/v1/partners", (request, response) => {
const partners = PartnerController.getAllPartners();
response.status(200).json(partners);
});
app.get("/v1/partners/withCert", (request, response) => {
const partners = PartnerController.getPartnersEmailWithCertification();
response.status(200).json(partners);
});
app.get("/v1/partners/credits/:credits", (request, response) => {
const credits = request.params.credits;
const partners = PartnerController.getPartnersCreditsWithLimit(credits);
response.status(200).json({
credits,
partners
});
});
Se encarga de establecer la comunicación entre el server y los servicios. Esta clase lee el archivo json con los visual partners (Reader) y realiza los filtros de información solicitados (PartnerService).
class PartnerController {
static getAllPartners(){
const partners = Reader.readJsonFile("visualpartners.json");
return partners;
}
static getPartnersEmailWithCertification(){
const partners = Reader.readJsonFile("visualpartners.json");
return PartnerService.filterPartnersEmailWithCertification(partners);
}
static getPartnersCreditsWithLimit(credits){
const partners = Reader.readJsonFile("visualpartners.json");
return PartnerService.filterPartnersCredits(partners, credits);
}
}
Clase que lee el archivo visualpartners.json
que contiene todos los datos.
class Reader {
static readJsonFile(path = ""){
const rawdata = fs.readFileSync(path);
return JSON.parse(rawdata);
}
}
Clase que implementa los filtros filterPartnersEmailWithCertification
y filterPartnersCredits
.
class PartnerService{
static filterPartnersEmailWithCertification(partners){
const filterPartners = partners.filter( partner => partner.haveCertification );
return filterPartners.map( partner => partner.email );
}
static filterPartnersCredits(partners, limit){
return partners.filter(partner => {
if(partner.credits > limit) return partner;
});
}
}
La documentación de los endpoints puede ser revisada en el siguiente link:
- Jest: Dependencia para pruebas unitarias.
- Express: Dependencia para facilitar la creación de un API Server.
- Linter: Dependencia que nos ayuda a seguir buenas prácticas o guías de estilo del código.