seepur/app/Controllers/Http/ClientApiController.js
2020-03-17 18:16:34 -04:00

76 lines
2.4 KiB
JavaScript

'use strict'
const {validate, rule} = use('Validator');
const User = use('App/Models/User');
const Child = use('App/Models/Child')
const Link = use('App/Models/Link');
// import FileUtils from '../../Utils/FileUtils';
const FileUtils = use('App/Utils/FileUtils');
class ClientApiController {
async getConnections({request, auth, response}) {
try {
const user = auth.user;
const userLinks = (await user.links().fetch()).rows;
// console.log(userLinks.toJSON());
let links = Promise.resolve({});
const result = await Promise.all(userLinks.map(async (l) => {
const child = await l.child().fetch();
const is_parent = !!l.is_parent;
const childLinks = (await child.links().fetch())
.rows.filter(l => l.user_id != user.id);
const linkedUsers = await Promise.all(childLinks.map(async l => {
return (await l.user().fetch()).toJSON();
}));
return {
...child.toJSON(), linkedUsers, is_parent
}
}));
return result;
} catch (err) {
console.error(err);
response.send(err.message);
}
}
async getUser({auth}) {
const user = auth.user.toJSON();
const children = await Promise.all((await auth.user.links().fetch())
.rows.filter(l => l.is_parent)
.map(async (l) => {
return await l.child().fetch();
}));
return {
...user, children
}
}
async createChild({auth, request, response}) {
const rules = {
name: 'required|string',
dob: 'required|date',
avatar: [rule('regex', /^(data:image\/\w+;base64).+/)]
};
const validation = await validate(request.all(), rules);
if (validation.fails()) {
response.status(400);
response.send(validation.messages());
return false;
}
const body = request.body;
if (body.avatar) {
const file = await FileUtils.saveBase64File(body.avatar);
console.log(file);
body.avatar = `/u/images/${file.fileName}`;
} else {
body.avatar =
`https://api.adorable.io/avatars/285/${body.name.trim()}.png`;
}
const child = await Child.create(body);
const link = await Link.create(
{user_id: auth.user.id, child_id: child.id, is_parent: true});
return child;
}
}
module.exports = ClientApiController