GIF89a
import express from 'express';
import { ApiResponse } from '../utils/ApiResponse.js';
import { Subscription, UserSubscription } from '../models/subscription.model.js';
export const getSubscriptions = async (req, res) => {
try {
const subscriptions = await Subscription.find();
return res.json(new ApiResponse(200, subscriptions, "Subscriptions fetched successfully"));
} catch (error) {
console.log(error);
return res.status(500).json({ message: error.message });
}
};
export const createSubscription = async (req, res) => {
try {
const { name, price, duration } = req.body;
const subscription = new Subscription({
name,
price,
duration
});
await subscription.save();
return res.json(new ApiResponse(200, subscription, "Subscription created successfully"));
} catch (error) {
console.log(error);
return res.status(500).json({ message: error.message });
}
};
export const updateSubscription = async (req, res) => {
try {
const { id } = req.params;
const { name, price, duration } = req.body;
const subscription = await Subscription.findByIdAndUpdate(id, {
name,
price,
duration
}, { new: true });
return res.json(new ApiResponse(200, subscription, "Subscription updated successfully"));
} catch (error) {
console.log(error);
return res.status(500).json({ message: error.message });
}
};
export const addSubscriptionToUser = async (req, res) => {
try {
const { userId, subscriptionId } = req.body;
// Check if user already has an active subscription
const existingSubscription = await UserSubscription.findOne({
userId,
endDate: { $gt: new Date() }
});
if (existingSubscription) {
return res.status(400).json(new ApiResponse(400, null, "User already has an active subscription"));
}
const subscription = await Subscription.findById(subscriptionId);
const startDate = new Date();
const endDate = new Date();
endDate.setMonth(endDate.getMonth() + subscription.duration);
const userSubscription = new UserSubscription({
userId,
subscriptionId,
startDate,
endDate
});
await userSubscription.save();
return res.json(new ApiResponse(200, userSubscription, "Subscription added to user successfully"));
} catch (error) {
console.log(error);
return res.status(500).json({ message: error.message });
}
};
export const getUserSubscription = async (req, res) => {
try {
const { userId } = req.params;
const userSubscription = await UserSubscription.findOne({
userId,
endDate: { $gt: new Date() }
}).populate({
path: 'subscriptionId',
select: '-__v',
model: 'Subscription',
as: 'subscriptionDetails'
});
if (!userSubscription) {
return res.json(new ApiResponse(200, null, "User has no active subscription"));
}
const response = {
...userSubscription.toObject(),
subscriptionDetails: userSubscription.subscriptionId
};
delete response.subscriptionId; // Optional: Remove the original field
return res.json(new ApiResponse(200, response, "User subscription fetched successfully"));
} catch (error) {
console.log(error);
return res.status(500).json({ message: error.message });
}
};