// =============================================

// Node.js + PostgreSQL + Redis Event Engine

// =============================================

importexpressfrom”express”;

import { Pool } from”pg”;

importRedisfrom”ioredis”;

import { v4asuuidv4 } from”uuid”;

constapp = express();

app.use(express.json());

// =============================================

// 🗄️ DATABASE (PostgreSQL)

// =============================================

constdb = newPool({

connectionString: process.env.DATABASE_URL

});

// =============================================

// ⚡ EVENT QUEUE (Redis)

// =============================================

constredis = newRedis(process.env.REDIS_URL);

// =============================================

// 🧠 EVENT TYPES

// =============================================

constEVENTS = {

USER_REGISTERED: “USER_REGISTERED”,

INVITE_ADDED: “INVITE_ADDED”,

INVITE_MILESTONE: “INVITE_MILESTONE”,

VIP_UPGRADED: “VIP_UPGRADED”

};

// =============================================

// 👤 REGISTER USER

// =============================================

app.post(“/register”, async (req, res) => {

const { name, phone, referral_code } = req.body;

constuserId = uuidv4();

constmyCode = Math.random().toString(36).substring(2, 8);

awaitdb.query(

`INSERT INTO users (id, name, phone, referral_code, referred_by)

VALUES ($1, $2, $3, $4, $5)`

, [userId, name, phone, myCode, referral_code || null]);

// Trigger event

awaitredis.lpush(“events”, JSON.stringify({

type: EVENTS.USER_REGISTERED,

userId

}));

res.json({ userId, referral_code: myCode });

});

// =============================================

// 🔗 TRACK INVITE

// =============================================

app.post(“/invite”, async (req, res) => {

const { referrerId, invitedUserId } = req.body;

awaitdb.query(

`INSERT INTO referrals (id, referrer_id, referred_user_id)

VALUES ($1, $2, $3)`

, [uuidv4(), referrerId, invitedUserId]);

constresult = awaitdb.query(

`SELECT COUNT(*) FROM referrals WHERE referrer_id = $1`

, [referrerId]);

constcount = parseInt(result.rows[0].count);

// Trigger milestone

awaitredis.lpush(“events”, JSON.stringify({

type: EVENTS.INVITE_ADDED,

referrerId,

count

}));

if (count === 5) {

awaitredis.lpush(“events”, JSON.stringify({

type: EVENTS.INVITE_MILESTONE,

referrerId

Translate »
滚动至顶部