/* global User */ "use strict"; const _ = require("lodash"); const moment = require("moment"); const { generateService, parseParamsToFindOptions, } = require("../../helpers/service.helper"); const models = require("../../core/models"); const Sequelize = require("sequelize"); moment.locale("es"); const extraMethods = { _getUserByEmail: async (email) => { return models.User.findOne({ where: { email: email, }, }); }, _getUserById: async (Id) => { return models.User.findOne({ where: { id: Id, }, }); }, _getActiveUserIds: async (offset = 0, limit = 10) => { return models.User.findAndCountAll({ attributes: ["id"], where: { state: "active", phone: { [Sequelize.Op.ne]: null }, }, raw: true, limit: limit, offset: offset, }); }, _updateLastLoginAndVersionUser: async (id, appVersion) => { return models.User.update( { app_version: appVersion, lastlogin: moment().utc(), }, { where: { id: id }, } ); }, _getOrCreateUser: async (dataUser) => { let result = null; if (dataUser.userResult) { result = { user: dataUser.userResult, isCreated: false }; } else { await models.User.findOrCreate({ where: { phone: dataUser.phone ? dataUser.phone : null, //puede que al venir la solicitud por web no venga el phone email: dataUser.email, }, include: [{ model: models.Entity }], defaults: { phone: dataUser.phone, email: dataUser.email, name: dataUser.name, surname: dataUser.surname, entityId: dataUser.entityId, profile: dataUser.profile, // password: crypto.createHash('sha512').update(user.phone).digest('hex'), }, }).then(([user, created]) => { user = user.toJSON(); result = { user: user, isCreated: created }; }); } return result; }, _getOrCreateUserWEB: async (dataUser) => { let result = null; if (dataUser.userResult) { result = { user: dataUser.userResult, isCreated: false }; } else { await models.User.findOrCreate({ where: { phone: dataUser.phone ? dataUser.phone : null, //puede que al venir la solicitud por web no venga el phone email: dataUser.email, name: dataUser.name, surname: dataUser.surname, }, include: [{ model: models.Entity }], defaults: { phone: dataUser.phone, email: dataUser.email, name: dataUser.name, surname: dataUser.surname, entityId: dataUser.entityId, profile: "guest", // password: crypto.createHash('sha512').update(user.phone).digest('hex'), }, }).then(([user, created]) => { user = user.toJSON(); result = { user: user, isCreated: created }; }); } return result; }, }; module.exports = generateService(models.User, extraMethods);