Mailspring/packages/nylas-api/routes/contacts.js
2016-07-11 13:48:00 -07:00

83 lines
2 KiB
JavaScript

const Joi = require('joi');
const Serialization = require('../serialization');
module.exports = (server) => {
server.route({
method: 'GET',
path: '/contacts',
config: {
description: 'Returns an array of contacts',
notes: 'Notes go here',
tags: ['contacts'],
validate: {
query: {
name: Joi.string(),
email: Joi.string().email(),
limit: Joi.number().integer().min(1).max(2000).default(100),
offset: Joi.number().integer().min(0).default(0),
},
},
response: {
schema: Joi.array().items(
Serialization.jsonSchema('Contact')
),
},
},
handler: (request, reply) => {
request.getAccountDatabase().then((db) => {
const {Contact} = db;
const query = request.query;
const where = {};
if (query.name) {
where.name = {like: query.name};
}
if (query.email) {
where.email = query.email;
}
Contact.findAll({
where: where,
limit: request.query.limit,
offset: request.query.offset,
}).then((contacts) => {
reply(Serialization.jsonStringify(contacts))
})
})
},
})
server.route({
method: 'GET',
path: '/contacts/{id}',
config: {
description: 'Returns a contact with specified id.',
notes: 'Notes go here',
tags: ['contacts'],
validate: {
params: {
id: Joi.string(),
},
},
response: {
schema: Serialization.jsonSchema('Contact'),
},
},
handler: (request, reply) => {
request.getAccountDatabase().then(({Contact}) => {
const {params: {id}} = request
Contact.findOne({where: {id}}).then((contact) => {
if (!contact) {
return reply.notFound(`Contact ${id} not found`)
}
return reply(Serialization.jsonStringify(contact))
})
.catch((error) => {
request.info(error, 'Error fetching contacts')
})
})
},
})
}