/opt/canhelp/apps/api/src/routes
NameSizeModeActions
admin.ts950570644editdlrm
auto-match.ts74060644editdlrm
auto-response.ts81110644editdlrm
availability.ts72940644editdlrm
categories.ts18670644editdlrm
chat.ts93770644editdlrm
dashboard.ts51420644editdlrm
favorites.ts44410644editdlrm
fomo.ts68440644editdlrm
google.ts48720644editdlrm
health.ts12140644editdlrm
i18n.ts1670860644editdlrm
locations.ts17810644editdlrm
notifications.ts28620644editdlrm
offers.ts100470644editdlrm
payments.ts211670644editdlrm
plans.ts13520644editdlrm
portfolio.ts66580644editdlrm
price-list.ts144170644editdlrm
reports.ts20070644editdlrm
reviews.ts27830644editdlrm
skill-suggestions.ts10350644editdlrm
specialist-cards.ts186410644editdlrm
stats.ts10930644editdlrm
statuses.ts37310644editdlrm
support.ts84520644editdlrm
tasks.ts300180644editdlrm
uploads.ts15260644editdlrm
users.ts371570644editdlrm
Edit: /opt/canhelp/apps/api/src/routes/plans.ts (1352B)
import { Hono } from 'hono' import { eq, and, asc } from 'drizzle-orm' import { db } from '../db.js' import { plans } from '@canhelp/db' import { requireAuth, type AuthVariables } from '../middleware/auth.js' import { getDailyUsageSummary } from '../lib/daily-limits.js' const app = new Hono<{ Variables: AuthVariables }>() // GET /plans — public list of active plans (for pricing page) // Tariffs are unified (no customer/specialist split), so the optional // ?role / ?audience query params are accepted for backward compatibility // but no longer filter the result — every active plan is returned. app.get('/', async (c) => { const rows = await db .select() .from(plans) .where(eq(plans.isActive, true)) .orderBy(asc(plans.order), asc(plans.name)) return c.json(rows) }) // GET /plans/daily-usage — current user's daily usage summary app.get('/daily-usage', requireAuth, async (c) => { const user = c.get('user') const summary = await getDailyUsageSummary(user.id) return c.json(summary) }) // GET /plans/:id — single plan details app.get('/:id', async (c) => { const [plan] = await db .select() .from(plans) .where(and(eq(plans.id, c.req.param('id')), eq(plans.isActive, true))) if (!plan) { return c.json({ error: 'Plan not found' }, 404) } return c.json(plan) }) export default app