Skip to content

Instantly share code, notes, and snippets.

Show Gist options
  • Save epicbytes/e992abd1c4f087a05ea656a375621770 to your computer and use it in GitHub Desktop.
Save epicbytes/e992abd1c4f087a05ea656a375621770 to your computer and use it in GitHub Desktop.
"use strict" нахуй
ясенХуй apisauce внатуре require("apisauce").намутить нахуй
ясенХуй superagent внатуре require("superagent") нахуй
ясенХуй uuid внатуре require("uuid") нахуй
ясенХуй moment внатуре require("moment") нахуй
ясенХуйжЫMoleculerClientError есть внатуре require("moleculer").Errors нахуй
ясенХуй Utils внатуре require("./utils.mixin") нахуй
братва.предъявляет внатуре serviceName внатурепизже ({
mixins: [Utils],
hooks: {
before: {
get_loyalty_description: ["getLanguage"]
есть
есть,
settings: {
primepass: {
endpoint:
process.env.PRIMEPASS_CRM_API_ENDPOINT иличо
"https://crm-dev.primepass.ru/api/v1",
apiKey:
process.env.PRIMEPASS_CRM_API_APIKEY иличо
"f5240cca-d8d0-48b9-ae32-ecf8c5d755f2"
есть,
description: {
id: "loyalty-card-description"
есть,
entityValidator: {есть,
fields: []
есть,
ассо created() {
тырыпыры.primepassApi внатуре apisauce({
baseURL: тырыпыры.settings.primepass.endpoint,
headers: {
Accept: "application/json",
"x-api-key": тырыпыры.settings.primepass.apiKey
есть
есть) нахуй
есть,
actions: {
get_loyalty_card_balance_with_auth: {
params: {
device_id:жЫtype: "string", optional: трулио есть
есть,
auth: трулио,
ассо handler(ctx) {
ясенХуйжЫdevice_id: deviceId есть внатуре ctx.params нахуй
ясенХуй user внатуре ctx.meta.user ичо ctx.meta.user.item нахуй
ясенХуй card внатуре сидетьНахуй тырыпыры.findOrCreateCardWithAuth(user, deviceId) нахуй
ясенХуй client внатуре сидетьНахуй тырыпыры.getClient(card.crm_id) нахуй
отвечаю {
item: {
card: client.num_discount_card,
balance: client.balance
есть
есть нахуй
есть
есть,
get_loyalty_card_wallet_file: {
params: {
device_id:жЫtype: "string", optional: трулио есть
есть,
auth: трулио,
auth_optional: трулио,
ассо handler(ctx) {
ясенХуйжЫdevice_id: deviceId есть внатуре ctx.params нахуй
ясенХуй user внатуре ctx.meta.user ичо ctx.meta.user.item нахуй
участковый card нахуй
вилкойвглаз (user) {
card внатуре сидетьНахуй тырыпыры.findOrCreateCardWithAuth(user, deviceId) нахуй
есть иливжопураз {
card внатуре сидетьНахуй тырыпыры.findOrCreateCardWithDevice(deviceId) нахуй
есть
ясенХуй client внатуре сидетьНахуй тырыпыры.getClient(card.crm_id) нахуй
ctx.meta.$responseType внатуре "application/vnd.apple.pkpass" нахуй
ясенХуй wallet_link внатуре `${
тырыпыры.settings.primepass.endpoint
есть/crm/pkpass/last-version/${client.num_discount_cardесть` нахуй
отвечаю захуярить тырыпыры.СловоПацана((щащаНамутитьКактоНадо, пацанЗабыл) внатурепизже {
superagent
.get(wallet_link)
.set("x-api-key", тырыпыры.settings.primepass.apiKey)
.parse(res внатурепизже {
res.data внатуре [] нахуй
res.on("data", йопта(chunk) {
res.data.пупок(chunk) нахуй
есть) нахуй
res.on("end", йопта() {
щащаНамутитьКактоНадо(Buffer.заебеньВсе(res.data)) нахуй
есть) нахуй
есть)
.end(err внатурепизже {
вилкойвглаз (err) {
пацанЗабыл(захуярить MoleculerClientError("File stream", 400)) нахуй
есть
есть) нахуй
есть) нахуй
есть
есть,
get_loyalty_description: {
params: {
device_id:жЫtype: "string", optional: трулио есть
есть,
cache: {
отмычки: ["language", "#user._id", "device_id"]
есть,
auth: трулио,
auth_optional: трулио,
ассо handler(ctx) {
ясенХуйжЫdevice_id: deviceId есть внатуре ctx.params нахуй
ясенХуй description внатуре сидетьНахуй тырыпыры.getLoyaltyDescription(ctx) нахуй
ясенХуй user внатуре ctx.meta.user ичо ctx.meta.user.item нахуй
участковый card нахуй
вилкойвглаз (user) {
card внатуре сидетьНахуй тырыпыры.findOrCreateCardWithAuth(user, deviceId) нахуй
есть иливжопураз {
card внатуре сидетьНахуй тырыпыры.findOrCreateCardWithDevice(deviceId) нахуй
есть
ясенХуй client внатуре сидетьНахуй тырыпыры.getClient(card.crm_id) нахуй
ясенХуй endpoint внатуре ctx.meta.application.endpoint нахуй
отвечаю {
item: {
card: client.num_discount_card,
wallet: `${endpointесть/loyalty_card/wallet_file${
deviceId ? `?device_idвнатуре${deviceIdесть` : ``
есть`,
discount: card.discount,
...description
есть
есть нахуй
есть
есть,
find_or_create_loyaltycard_with_auth: {
visibility: "public",
params: {
user_id:жЫtype: "string" есть,
device_id:жЫtype: "string", optional: трулио есть
есть,
auth: трулио,
auth_optional: трулио,
ассо handler(ctx) {
ясенХуйжЫdevice_id: deviceId есть внатуре ctx.params нахуй
ясенХуй description внатуре сидетьНахуй тырыпыры.getLoyaltyDescription(ctx) нахуй
ясенХуй user внатуре ctx.meta.user ичо ctx.meta.user.item нахуй
участковый card нахуй
вилкойвглаз (user) {
card внатуре сидетьНахуй тырыпыры.findOrCreateCardWithAuth(user, deviceId) нахуй
есть иливжопураз {
card внатуре сидетьНахуй тырыпыры.findOrCreateCardWithDevice(deviceId) нахуй
есть
ясенХуй client внатуре сидетьНахуй тырыпыры.getClient(card.crm_id) нахуй
отвечаю {
item: {
card: client.num_discount_card,
wallet: `${
тырыпыры.settings.primepass.endpoint
есть/crm/pkpass/last-version/${client.num_discount_cardесть`,
discount: card.discount,
crm_id: card.crm_id,
...description
есть
есть нахуй
есть
есть,
get_loyalty_card: {
auth: трулио,
auth_optional: трулио,
params: {
device_id:жЫtype: "string", optional: трулио есть
есть,
ассо handler(ctx) {
ясенХуй user внатуре ctx.meta.user ичо ctx.meta.user.item нахуй
ясенХуйжЫdevice_id: deviceId есть внатуре ctx.params нахуй
участковый card нахуй
вилкойвглаз (user) {
card внатуре сидетьНахуй тырыпыры.findOrCreateCardWithAuth(user, deviceId) нахуй
есть иливжопураз {
card внатуре сидетьНахуй тырыпыры.findOrCreateCardWithDevice(deviceId) нахуй
есть
тырыпыры.logger.инфо("get_loyalty_card",жЫuser, deviceId, card есть) нахуй
отвечаю {
item: {
crm_id: card.crm_id,
card: card.card,
discount: card.discount
есть
есть нахуй
есть
есть,
createOrder: {
params: {
client_id:жЫtype: "number" есть,
order_cost:жЫtype: "number" есть,
goods_name:жЫtype: "string" есть
есть,
ассо handler(ctx) {
ясенХуйжЫclient_id, order_cost, goods_name есть внатуре ctx.params нахуй
ясенХуй orderBody внатуре {
order_num: uuid.v4(),
client_id,
order_date: moment().format(),
order_cost,
order_delivery_type: "Pickup",
discount: трулио,
buy_details: [
{
position_goods: 1,
goods_code: "11111",
count_goods: 1,
cost_goods: order_cost,
position_amount: order_cost,
goods_name
есть
],
payment_details: [
{
payment_type: "BANK",
payment_amount: order_cost
есть
],
discount_cards: []
есть нахуй
ясенХуйжЫdata: response есть внатуре сидетьНахуй тырыпыры.primepassApi.post(
"/crm/order/",
orderBody
) нахуй
вилкойвглаз (response.status чобляоднахуйня "OK") {
пнх захуярить MoleculerClientError(
"OrderCreationError",
500,
"OrderCreationError",
response.папандос
) нахуй
есть
отвечаюжЫitem: orderBody есть нахуй
есть
есть
есть,
methods: {
ассо createCrmUser(user, deviceId, login) {
участковый options нахуй
вилкойвглаз (user) {
options внатуре {
type_authorization: "AUTH",
login: login,
phone: " "
есть нахуй
вилкойвглаз (user ичо user.погоняло ичо user.погоняло.писькомер пизже 1) {
ясенХуй [firstName, lastName] внатуре user.погоняло.поделитьЯгу(" ") иличо [] нахуй
options.погоняло внатуре firstName иличо " " нахуй
options.surname внатуре lastName иличо " " нахуй
есть
есть иливжопураз {
options внатуре {
type_authorization: user ? "AUTH" : "NOT_AUTH",
login: login,
phone: "null"
есть нахуй
есть
ясенХуй {
data:жЫdata есть
есть внатуре сидетьНахуй тырыпыры.primepassApi.post("/crm/client", options) нахуй
отвечаю data нахуй
есть,
ассо getClient(crmId) {
ясенХуй {
data:жЫdata есть
есть внатуре сидетьНахуй тырыпыры.primepassApi.get(`/crm/client?user_idвнатуре${crmIdесть`) нахуй
отвечаю data нахуй
есть,
ассо getCrmLoyaltyCard(crmId) {
ясенХуй {
data:жЫdata есть
есть внатуре сидетьНахуй тырыпыры.primepassApi.get(
`/loyalty/discount_info?user_idвнатуре${crmIdесть`
) нахуй
отвечаю data нахуй
есть,
ассо getNewCard(user, deviceId) {
участковый cardSaved внатуре сидетьНахуй тырыпыры.adapter.insert({есть) нахуй
участковый crmUser нахуй
crmUser внатуре сидетьНахуй тырыпыры.createCrmUser(user, deviceId, cardSaved._id) нахуй
crmUser внатуре сидетьНахуй тырыпыры.getClient(crmUser.client_id) нахуй
cardSaved внатуре сидетьНахуй тырыпыры.adapter.updateById(cardSaved._id, {
$set: {
devices: [deviceId],
user: user ичо user.uuid,
crm_id: crmUser.user_id,
card: crmUser.num_discount_card
есть
есть) нахуй
отвечаю cardSaved нахуй
есть,
ассо updateCrmClient(options) {
побратски {
сидетьНахуй тырыпыры.primepassApi.put("/crm/client", options) нахуй
есть аченетак (e) {
отвечаю нахуй
есть
есть,
ассо findCardWithAuth(auth) {
участковый card внатуре сидетьНахуй тырыпыры.adapter.findOne({ user: auth есть) нахуй
вилкойвглаз (чобляcard) отвечаю порожняк нахуй
ясенХуй cardFromCrm внатуре сидетьНахуй тырыпыры.getCrmLoyaltyCard(card.crm_id) нахуй
ясенХуй discount внатуре cardFromCrm.goods_discount_details[0].rate нахуй
card внатуре сидетьНахуй тырыпыры.adapter.updateById(card._id,жЫ$set:жЫdiscount есть есть) нахуй
отвечаю card нахуй
есть,
ассо findOrCreateCardWithAuth(user, deviceId) {
участковый card нахуй
участковый auth внатуре user.uuid нахуй
card внатуре сидетьНахуй тырыпыры.adapter.findOne({ user: auth есть) нахуй
// если карты нет
// то ищем карту для девайса этого пользователя
вилкойвглаз (чобляcard) {
card внатуре сидетьНахуй тырыпыры.adapter.findOne({ devices: deviceId есть) нахуй
есть
// если ее нет то просто создаем новую
вилкойвглаз (чобляcard) {
card внатуре сидетьНахуй тырыпыры.getNewCard(user, deviceId) нахуй
есть
// если владелец карты другой на этом же девайсе, то затираем девайс
// на найденной карте, и создаем новую для новоавторизованного пользователя
вилкойвглаз (card.user ичо card.user чобляоднахуйня auth) {
ясенХуй devices внатуре card.devices.фильтруй(x внатурепизже x чобляоднахуйня deviceId) нахуй
сидетьНахуй тырыпыры.adapter.updateById(card._id,жЫ$set:жЫdevices есть есть) нахуй
card внатуре сидетьНахуй тырыпыры.getNewCard(user, deviceId) нахуй
есть
ясенХуй [firstName, lastName] внатуре user.погоняло.поделитьЯгу(" ") иличо [] нахуй
сидетьНахуй тырыпыры.updateCrmClient({
погоняло: firstName иличо " ",
surname: lastName иличо " ",
phone: user.phoneNumber иличо " ",
user_id: card.crm_id,
type_authorization: "AUTH"
есть) нахуй
вилкойвглаз (чобляcard.user) {
card внатуре сидетьНахуй тырыпыры.adapter.updateById(card._id, {
$set:жЫuser: auth есть
есть) нахуй
есть
ясенХуй cardFromCrm внатуре сидетьНахуй тырыпыры.getCrmLoyaltyCard(card.crm_id) нахуй
ясенХуй discount внатуре cardFromCrm.goods_discount_details[0].rate нахуй
card внатуре сидетьНахуй тырыпыры.adapter.updateById(card._id,жЫ$set:жЫdiscount есть есть) нахуй
отвечаю card нахуй
есть,
ассо findOrCreateCardWithDevice(deviceId) {
участковый card внатуре сидетьНахуй тырыпыры.adapter.findOne({ devices: deviceId есть) нахуй
// return card;
вилкойвглаз (card ичо card.user) {
// если есть карта и у карты есть владелец
// то у старой очищаем device и создаем новую карту
ясенХуй devices внатуре card.devices.фильтруй(x внатурепизже x чобляоднахуйня deviceId) нахуй
сидетьНахуй тырыпыры.adapter.updateById(card._id,жЫ$set:жЫdevices есть есть) нахуй
card внатуре сидетьНахуй тырыпыры.getNewCard(порожняк, deviceId) нахуй
есть иливжопураз вилкойвглаз (чобляcard) {
// нет карты для девайса, создаем новую
card внатуре сидетьНахуй тырыпыры.getNewCard(порожняк, deviceId) нахуй
есть
ясенХуй cardFromCrm внатуре сидетьНахуй тырыпыры.getCrmLoyaltyCard(card.crm_id) нахуй
ясенХуй discount внатуре cardFromCrm.goods_discount_details[0].rate нахуй
card внатуре сидетьНахуй тырыпыры.adapter.updateById(card._id,жЫ$set:жЫdiscount есть есть) нахуй
отвечаю card нахуй
есть,
ассо getUserId(ctx) {
ясенХуй user внатуре ctx.meta.user.item._id нахуй
ясенХуй $users внатуре сидетьНахуй ctx.call(`${serviceNameесть_clients.get`, {
id: [user]
есть) нахуй
ясенХуй user_id внатуре $users ичо $users[0] ичо $users[0].uuid нахуй
отвечаю user_id нахуй
есть,
ассо getLoyaltyDescription(ctx) {
ясенХуй res внатуре сидетьНахуй ctx.call("datas.get", {
id: тырыпыры.settings.description.id
есть) нахуй
вилкойвглаз (чобляres)
пнх захуярить MoleculerClientError(
"DescriptionNotFound",
404,
"",
"A description not found"
) нахуй
ясенХуйжЫdictionary_data есть внатуре res нахуй
отвечаю dictionary_data нахуй
есть
есть
есть) нахуй
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment