Closed qertis closed 2 years ago
Прежний код, можно что-то вытащить сюда
require('dotenv').config();
const jsonld = require('jsonld');
const { pool, sql } = require('../src/core/database');
const passportQueries = require('../src/db/passport');
const { mail } = require('../src/lib/sendgrid');
const logger = require('../src/services/logger.service');
// todo использовать свои схемы - "https://gotointeractive.com/#organization",
const yandexLD = async (parameters) => {
const compacted = await jsonld.compact(
{
'http://xmlns.com/foaf/0.1/name': parameters.real_name,
'http://schema.org/gender': parameters.sex,
'http://xmlns.com/foaf/0.1/nick': parameters.login,
'http://xmlns.com/foaf/0.1/mbox': {
'@id': `mailto://${parameters.default_email}`,
},
'http://xmlns.com/foaf/0.1/img': {
'@id': `https://avatars.mds.yandex.net/get-yapic/${parameters.default_avatar_id}/islands-middle`,
},
// fixme неправильно сериализуется
// 'http://schema.org/birthDate': {
// '@id': parameters.birthday,
// },
},
'https://json-ld.org/contexts/person.jsonld',
);
return compacted;
};
const facebookLD = async (parameters) => {
const compacted = await jsonld.compact(
{
'http://xmlns.com/foaf/0.1/name': parameters.name,
// 'http://schema.org/gender': params.gender, // может не быть
'http://xmlns.com/foaf/0.1/mbox': {
'@id': `mailto://${parameters.email}`,
},
// "http://xmlns.com/foaf/0.1/homepage": {"@id": "http://denis.baskovsky.ru/"},
// "http://xmlns.com/foaf/0.1/title": "TeamLead",
},
'https://json-ld.org/contexts/person.jsonld',
);
return compacted;
};
const telegramLD = async (parameters) => {
const compacted = await jsonld.compact(
{
'http://xmlns.com/foaf/0.1/name': parameters.first_name,
},
'https://json-ld.org/contexts/person.jsonld',
);
return compacted;
};
// todo эта функциональность должна делаться внутренним ассистентом у которого будет доступ только к facebook_passport и yandex_passport и yandex_session
// таким образом Linked Data для пользователя будут такими же как и Linked Data для историй
(async function main() {
await pool.connect(async (connection) => {
try {
// берем данные из паспорта
const passports = await connection.many(passportQueries.getPassports());
const currentDate = new Date().getTime() / 1000;
for (const passport of passports) {
const botTable = await connection.one(
passportQueries.selectByPassport(passport.id),
);
if (!botTable.activated) {
continue;
}
// уведомляем на почту если oauth сессия устарела на почту
if (
passport.facebook_session &&
passport.facebook_session.expires_in < currentDate
) {
await mail.send({
to: passport.facebook_passport.email,
from: botTable.email,
subject: 'Oauth facebook session is over, please update',
html: `
<a>todo</a>
`,
});
}
if (
passport.yandex_session &&
passport.yandex_session.expires_in < currentDate
) {
await mail.send({
to: passport.yandex_passport.email,
from: botTable.email,
subject: 'Oauth yandex session is over, please update',
html: `
<a>todo</a>
`,
});
}
// превращаем данные oauth в структуру JSON-LD
const linkedData = {
...(await telegramLD(passport.telegram_passport)),
...(await yandexLD(passport.yandex_passport)),
...(await facebookLD(passport.facebook_passport)),
};
// записываем семантические данные в таблицу JSON-LD
await connection.query(sql`
INSERT INTO ld (passport_id, jsonld)
VALUES (${passport.id}, ${JSON.stringify(linkedData)})
`);
}
} catch (error) {
logger.error(error);
process.exit(1);
}
});
/*
*/
process.exit(0);
})();
Мне кажется это все же должен делать search и делать через онтологию.
Четыре способа настройки геолокации.
Публичный закрытый (показывается страна) Где показывается страна - это дефол настройки для всех сторонних лиц вне Квиту.
Публичный открытый (показывается город) Публичный открытый - это настойка доступна для всех лиц Квиту (если юзверь не запретил этот показ)
Частный открытый (показывается вплоть до метра) Показывается в течении определенного времени (например, 1 час). Исключительно между доверенной группой.
Частный заблокированный (не показывается ничего) Юзверь может лочить контакты всяких (неприятных лиц). Те больше не способный видеть где он (или вернее всегда показываются неправильное местоположение)
Для диалога создать хотя бы один новые Action'ы:
Примеры:
Я сегодня устроился на работу в ООО Рога и копыта
- StartWorkAction
Я сегодня получил повышение до ТОП менеджера
- RiseWorkAction
Меня сегодня уволили из ООО Рога и копыта за приставание к начальнице
- DismissalWorkAction
Самый достижимый сценарий на данный момент какой вижу: