flwo / apps /server /src /modules /serverPlans /serverPlans.controller.js
moustafa7's picture
feat: hosting link in navbar+footer, book-now with payment modal & direct activation
604f9f4
Raw History Blame Contribute Delete
3.38 kB
import { success, created, paginated } from '../../lib/response.js'
import { getPagination } from '../../lib/pagination.js'
import { prisma } from '../../config/database.js'
import * as service from './serverPlans.service.js'
export async function listActivePlans(req, res, next) {
try {
const plans = await service.getActivePlans()
success(res, plans)
} catch (err) { next(err) }
}
export async function getAllPlans(req, res, next) {
try {
const plans = await service.getAllPlans()
success(res, plans)
} catch (err) { next(err) }
}
export async function getPlanById(req, res, next) {
try {
const plan = await service.getPlanById(req.params.id)
success(res, plan)
} catch (err) { next(err) }
}
export async function createPlan(req, res, next) {
try {
const plan = await service.createPlan(req.validatedData)
created(res, plan)
} catch (err) { next(err) }
}
export async function updatePlan(req, res, next) {
try {
const plan = await service.updatePlan(req.params.id, req.validatedData)
success(res, plan)
} catch (err) { next(err) }
}
export async function deletePlan(req, res, next) {
try {
await service.deletePlan(req.params.id)
success(res, null, 'تم حذف الباقة')
} catch (err) { next(err) }
}
export async function listUserSubscriptions(req, res, next) {
try {
const subs = await service.getUserSubscriptions(req.user.id)
success(res, subs)
} catch (err) { next(err) }
}
export async function createSubscription(req, res, next) {
try {
const sub = await service.createSubscription(req.user.id, req.validatedData)
created(res, sub)
} catch (err) { next(err) }
}
export async function createDirectSubscription(req, res, next) {
try {
const sub = await service.createDirectSubscription(req.user.id, req.validatedData)
created(res, sub)
} catch (err) { next(err) }
}
export async function getAllSubscriptions(req, res, next) {
try {
const { page, limit } = getPagination(req.query)
const result = await service.getAllSubscriptions({ page, limit })
paginated(res, result.subscriptions, result.total, result.page, limit)
} catch (err) { next(err) }
}
export async function updateSubscription(req, res, next) {
try {
const sub = await service.updateSubscription(req.params.id, req.validatedData)
success(res, sub)
} catch (err) { next(err) }
}
export async function getSubscriptionById(req, res, next) {
try {
const sub = await service.getSubscriptionById(req.params.id)
success(res, sub)
} catch (err) { next(err) }
}
export async function checkExpiringSubscriptions(req, res, next) {
try {
const expiring = await service.getExpiringSubscriptions(3)
let sent = 0
for (const sub of expiring) {
try {
await prisma.notification.create({
data: {
userId: sub.userId,
title: 'وشك اشتراكك على الانتهاء',
body: `باقي 3 أيام على انتهاء اشتراكك في باقة ${sub.plan.name} — جدد اشتراكك الآن`,
type: 'SUBSCRIPTION_EXPIRING',
link: '/dashboard/subscriptions',
},
})
await service.markRenewalNotified(sub.id)
sent++
} catch (_) {}
}
success(res, { sent, total: expiring.length })
} catch (err) { next(err) }
}