Skip to content

Commit 87636d2

Browse files
committed
updated
1 parent 663b542 commit 87636d2

4 files changed

Lines changed: 74 additions & 1 deletion

File tree

routes/employer-comped-member.js

Lines changed: 32 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,32 @@
1+
import express from 'express';
2+
import { enqueueMemberCreation } from '../services/ghostService.js';
3+
4+
const router = express.Router();
5+
6+
router.post('/create-employer-comped-member', async (req, res) => {
7+
const { name, email, productId } = req.body;
8+
9+
if (!name || !email || !productId) {
10+
return res.status(400).json({ error: 'Missing required fields' });
11+
}
12+
13+
try {
14+
await enqueueMemberCreation({
15+
type: 'emcomp',
16+
data: { email, name, productId }
17+
});
18+
19+
res.status(202).json({
20+
success: true,
21+
message: 'EMComp member creation queued successfully'
22+
});
23+
} catch (err) {
24+
console.error('Error queuing emcomp member:', err);
25+
res.status(500).json({
26+
error: 'Failed to queue emcomp member creation',
27+
details: err.message
28+
});
29+
}
30+
});
31+
32+
export default router;

server.js

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@ import checkoutRoutes from './routes/checkout.js';
66
import webhookRoutes from './routes/stripe-webhook.js';
77
import freeMemberRoutes from './routes/free-member.js';
88
import compMemberRoutes from './routes/comped-member.js';
9+
import employerMemberRoutes from './routes/employer-comped-member.js';
910
import noLoginMemberRoutes from './routes/no-login-member.js';
1011
import './workers/memberWorker.js';
1112
import { connection } from './config/queue.js';
@@ -30,6 +31,12 @@ app.use('/start-checkout', bodyParser.json());
3031
app.use('/create-free-member', bodyParser.json());
3132
app.use(freeMemberRoutes);
3233

34+
35+
// EMComped Members
36+
app.use('/create-employer-comped-member', bodyParser.json());
37+
app.use(employerMemberRoutes);
38+
39+
3340
// Comped Members
3441
app.use('/create-comped-member', bodyParser.json());
3542
app.use(compMemberRoutes);

services/ghostService.js

Lines changed: 31 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -76,6 +76,37 @@ export async function createCompGhostMember({ email, name, productId }) {
7676
}
7777

7878

79+
export async function createEmCompGhostMember({ email, name, productId }) {
80+
try {
81+
logger.info(`Creating EMcomp member: ${email.substring(0, 3)}...@...`, { productId });
82+
const subscriptionData = {
83+
id: "",
84+
tier: { id: productId, active: true, expiry_at: null },
85+
plan: { id: "", nickname: "Complimentary", currency: "EUR", amount: 0 },
86+
status: "active",
87+
price: { id: "", price_id: "", nickname: "Complimentary", amount: 0, type: "recurring", currency: "EUR", tier: { id: "", tier_id: productId } },
88+
offer: null
89+
};
90+
91+
const result = await api.members.add({
92+
email,
93+
name,
94+
tiers: [{ id: productId, expiry_at: null }],
95+
subscriptions: [subscriptionData],
96+
});
97+
logger.info(`EMComp member created for ${email.substring(0, 3)}...@...`, { productId });
98+
return result;
99+
} catch (err) {
100+
logger.error(`Failed to create comp member ${email.substring(0, 3)}...@...`, {
101+
error: err.message,
102+
stack: err.stack,
103+
productId
104+
});
105+
throw new Error(`Ghost API error: ${err.message}`);
106+
}
107+
}
108+
109+
79110

80111
export async function createNoLoginGhostMember({ email, name, note }) {
81112
try {

workers/memberWorker.js

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@
33
import { Worker } from 'bullmq';
44
import { connection } from '../config/queue.js';
55
// Make sure to import the new function
6-
import { createGhostMember, createFreeGhostMember, createCompGhostMember, createNoLoginGhostMember } from '../services/ghostService.js';
6+
import { createGhostMember, createFreeGhostMember, createCompGhostMember, createNoLoginGhostMember, createEmCompGhostMember } from '../services/ghostService.js';
77
import logger from '../config/logger.js';
88
import env from '../config/env.js';
99

@@ -25,6 +25,9 @@ const worker = new Worker('member-creation', async (job) => {
2525
case 'free':
2626
result = await createFreeGhostMember(data);
2727
break;
28+
case 'emcomp':
29+
result = await createEmCompGhostMember(data);
30+
break;
2831
case 'comp':
2932
result = await createCompGhostMember(data);
3033
break;

0 commit comments

Comments
 (0)