diff --git a/apps/api/src/controllers/progress.Controller.ts b/apps/api/src/controllers/progress.Controller.ts index 8cedcf0..e8127d5 100644 --- a/apps/api/src/controllers/progress.Controller.ts +++ b/apps/api/src/controllers/progress.Controller.ts @@ -3,10 +3,14 @@ import type { AppEnv } from '../types' import { fetchProgress } from '../services/progress.Service' export const getProgress = async (c: Context) => { - const userId = c.get('userId') - + const userId = c.req.param('userId') + + if (!userId) { + return c.json({ success: false, message: 'userId is required' }, 400) + } + try { - const data = await fetchProgress(c.env, userId) + const data = await fetchProgress(c.env.DB, userId) return c.json(data) } catch (e: any) { console.error('Progress error:', e) diff --git a/apps/api/src/db/schema.ts b/apps/api/src/db/schema.ts index 1ebc098..e9cb58a 100644 --- a/apps/api/src/db/schema.ts +++ b/apps/api/src/db/schema.ts @@ -12,7 +12,8 @@ export const stalls = sqliteTable('stalls', { id: integer('id').primaryKey({ autoIncrement: true }), name: text('name').notNull(), description: text('description'), - logo: text('logo'), // ✅ added + logo: text('logo'), + qrSlug: text('qr_slug').unique().notNull(), // ✅ clean unique createdAt: integer('created_at', { mode: 'timestamp' }).$defaultFn(() => new Date()), }); @@ -24,4 +25,4 @@ export const ratings = sqliteTable('ratings', { createdAt: integer('created_at', { mode: 'timestamp' }).$defaultFn(() => new Date()), }, (table) => ({ unq: uniqueIndex('unique_vote').on(table.userId, table.stallId), -})); +})); \ No newline at end of file diff --git a/apps/api/src/routes/progress.route.ts b/apps/api/src/routes/progress.route.ts index 63cd280..b5a7b8c 100644 --- a/apps/api/src/routes/progress.route.ts +++ b/apps/api/src/routes/progress.route.ts @@ -1,10 +1,9 @@ import { Hono } from 'hono' import type { AppEnv } from '../types' -import { requireAuth } from '../middleware/auth' import { getProgress } from '../controllers/progress.Controller' const progress = new Hono() -progress.get('/', requireAuth, getProgress) +progress.get('/:userId', getProgress) export default progress diff --git a/apps/api/src/services/progress.Service.ts b/apps/api/src/services/progress.Service.ts index 0c669bf..edfa051 100644 --- a/apps/api/src/services/progress.Service.ts +++ b/apps/api/src/services/progress.Service.ts @@ -1,20 +1,15 @@ import { getDb } from '../db/client' import { ratings, users } from '../db/schema' import { eq, count } from 'drizzle-orm' -import type { AppEnv } from '../types' -import { ensureUserExists } from './user.Service' -export const fetchProgress = async (env: AppEnv['Bindings'], userId: string) => { - const ormDb = getDb(env.DB) - - //ensure the user exists and grab profile data via Clerk - await ensureUserExists(env, userId) +export const fetchProgress = async (db: D1Database, userId: string) => { + const ormDb = getDb(db) - const userRecord = await ormDb.select({ isCompleted: users.isCompleted }).from(users).where(eq(users.id, userId)) - const isCompleted = userRecord[0]?.isCompleted || false + const userRecord = await ormDb.select({ completed: users.completed }).from(users).where(eq(users.id, userId)) + const isCompleted = userRecord[0]?.completed || false const countResult = await ormDb.select({ count: count() }).from(ratings).where(eq(ratings.userId, userId)) const progressCount = countResult[0]?.count || 0 - return { progress: progressCount, isCompleted } + return { userId, progress: progressCount, isCompleted } } diff --git a/apps/api/src/services/vote.Service.ts b/apps/api/src/services/vote.Service.ts index 3b1bc9b..6dafc50 100644 --- a/apps/api/src/services/vote.Service.ts +++ b/apps/api/src/services/vote.Service.ts @@ -38,7 +38,7 @@ export const submitVote = async ( if (progressCount >= 15) { await ormDb .update(users) - .set({ isCompleted: true }) + .set({ completed: true }) .where(eq(users.id, userId)) }