104 lines
No EOL
3.3 KiB
JavaScript
104 lines
No EOL
3.3 KiB
JavaScript
"use strict";
|
|
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
};
|
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
const express_1 = require("express");
|
|
const index_1 = require("../index");
|
|
const errorHandler_1 = require("../middleware/errorHandler");
|
|
const auth_1 = require("../middleware/auth");
|
|
const joi_1 = __importDefault(require("joi"));
|
|
const uuid_1 = require("uuid");
|
|
const router = (0, express_1.Router)();
|
|
const subscribeSchema = joi_1.default.object({
|
|
email: joi_1.default.string().email().required(),
|
|
});
|
|
router.post('/subscribe', (0, errorHandler_1.asyncHandler)(async (req, res) => {
|
|
const { error, value } = subscribeSchema.validate(req.body);
|
|
if (error) {
|
|
return res.status(400).json({
|
|
success: false,
|
|
message: error.details[0].message,
|
|
});
|
|
}
|
|
const { email } = value;
|
|
const existing = await index_1.prisma.subscription.findUnique({
|
|
where: { email },
|
|
});
|
|
if (existing) {
|
|
if (existing.isActive) {
|
|
return res.status(400).json({
|
|
success: false,
|
|
message: 'Email is already subscribed',
|
|
});
|
|
}
|
|
else {
|
|
await index_1.prisma.subscription.update({
|
|
where: { email },
|
|
data: { isActive: true },
|
|
});
|
|
}
|
|
}
|
|
else {
|
|
await index_1.prisma.subscription.create({
|
|
data: {
|
|
email,
|
|
unsubscribeToken: (0, uuid_1.v4)(),
|
|
},
|
|
});
|
|
}
|
|
res.json({
|
|
success: true,
|
|
message: 'Successfully subscribed to notifications',
|
|
});
|
|
}));
|
|
router.get('/', auth_1.authenticateToken, (0, errorHandler_1.asyncHandler)(async (req, res) => {
|
|
const subscribers = await index_1.prisma.subscription.findMany({
|
|
orderBy: { createdAt: 'desc' },
|
|
select: {
|
|
id: true,
|
|
email: true,
|
|
isActive: true,
|
|
createdAt: true,
|
|
},
|
|
});
|
|
const stats = {
|
|
total: subscribers.length,
|
|
active: subscribers.filter(sub => sub.isActive).length,
|
|
inactive: subscribers.filter(sub => !sub.isActive).length,
|
|
};
|
|
res.json({
|
|
success: true,
|
|
subscribers,
|
|
stats,
|
|
});
|
|
}));
|
|
router.put('/:id/toggle', auth_1.authenticateToken, (0, errorHandler_1.asyncHandler)(async (req, res) => {
|
|
const subscriberId = parseInt(req.params.id);
|
|
if (isNaN(subscriberId)) {
|
|
return res.status(400).json({
|
|
success: false,
|
|
message: 'Invalid subscriber ID',
|
|
});
|
|
}
|
|
const subscriber = await index_1.prisma.subscription.findUnique({
|
|
where: { id: subscriberId },
|
|
});
|
|
if (!subscriber) {
|
|
return res.status(404).json({
|
|
success: false,
|
|
message: 'Subscriber not found',
|
|
});
|
|
}
|
|
const updated = await index_1.prisma.subscription.update({
|
|
where: { id: subscriberId },
|
|
data: { isActive: !subscriber.isActive },
|
|
});
|
|
res.json({
|
|
success: true,
|
|
message: `Subscriber ${updated.isActive ? 'activated' : 'deactivated'} successfully`,
|
|
subscriber: updated,
|
|
});
|
|
}));
|
|
exports.default = router;
|
|
//# sourceMappingURL=subscriptions.js.map
|