Skip to content
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
8 changes: 4 additions & 4 deletions app/composables/useCurrentFormGroup.ts
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
import type { FormGroup, Form } from '~~/prisma/generated/client'
import type { FormGroup, Form, FormComponent } from '~~/prisma/generated/client'

export type CurrentFormGroupState = {
activeFormGroup: FormGroup | null
Expand All @@ -13,7 +13,7 @@ export const useCurrentFormGroup = () => {

const loadActiveFormGroup = async () => {
try {
const formGroupAPIResponse = await $fetch<FormGroup | FormGroup[]>('/api/formgroup?active=true')
const formGroupAPIResponse = await $fetch<FormGroup | FormGroup[]>('/api/formGroup?active=true')

// Handle if the API returns an array or single item
const activeFg = Array.isArray(formGroupAPIResponse) ? formGroupAPIResponse[0] : formGroupAPIResponse
Expand All @@ -23,7 +23,7 @@ export const useCurrentFormGroup = () => {

try {
const formsAPIResponse = await $fetch<Form[]>('/api/form', {
query: { formGroup: activeFg.id }
query: { formGroup: activeFg.id, published: true }
})

FormGroup.value.forms = Array.isArray(formsAPIResponse) ? formsAPIResponse : []
Expand All @@ -49,4 +49,4 @@ export const useCurrentFormGroup = () => {
loadActiveFormGroup,
totalFormsInGroup
}
}
}
2 changes: 2 additions & 0 deletions app/pages/reader/formInProgress.vue
Original file line number Diff line number Diff line change
@@ -0,0 +1,2 @@
<script setup lang="ts"></script>
<template> </template>
14 changes: 9 additions & 5 deletions app/pages/reader/forms.vue
Original file line number Diff line number Diff line change
@@ -1,14 +1,18 @@
<script setup lang="ts">
definePageMeta({ ssr: false })

const settings = reactive({ theme: 'light', dyslexiaFont: false, language: 'en', fontSize: 1 })
const { student, settings } = useCurrentStudent()
const { FormGroup, totalFormsInGroup } = useCurrentFormGroup()
const { tickets } = useCurrentStudentProgress()

const stats = reactive({ xp: 1250, booksRead: 14, streak: 5, tickets: 3 })
const stats = computed(() => ({
xp: student.value ? student.value.exp : 0,
tickets: tickets.value? tickets.value : 0,
}))

const themeClass = computed(() => {
const t = settings.theme !== 'light' ? `theme-${settings.theme}` : ''
const d = settings.dyslexiaFont ? 'dyslexia-font' : ''
return `reader-app ${t} ${d}`.trim()
const d = settings.value.dyslexiaFont ? 'dyslexia-font' : ''
return `reader-app ${d}`.trim()
})

// ── Click badge animations ──
Expand Down
5 changes: 3 additions & 2 deletions app/pages/reader/home.vue
Original file line number Diff line number Diff line change
Expand Up @@ -16,8 +16,9 @@ definePageMeta({ ssr: false })
const { student, settings: globalSettings, loadStudent } = useCurrentStudent()
const { totalFormsInGroup: totalForms, loadActiveFormGroup} = useCurrentFormGroup()
const { tickets: tickets, loadProgress} = useCurrentStudentProgress()
//await loadActiveFormGroup()
//await loadProgress()
await loadStudent(2)
await loadActiveFormGroup()
await loadProgress()

// ── Theme class ──
const themeClass = computed(() => {
Expand Down
File renamed without changes.
15 changes: 15 additions & 0 deletions server/api/form/index.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,15 @@
import { Prisma } from '~~/prisma/generated/client'
import { prisma } from '../../utils/prisma'
import { getQuery } from 'h3'

export default defineEventHandler(async (event) => {
const method = event.node.req.method
const query = getQuery(event)

//GET /api/form?formGroup=1&published=true to get published forms for a specific form group
if (method === 'GET') {
return await prisma.form.findMany({
where: query.formGroup ? { formGroup: Number(query.formGroup), published: Boolean(query.published) } : {}
})
}
})
File renamed without changes.
Empty file.
Empty file added server/api/formGroup/[id].ts
Empty file.
25 changes: 25 additions & 0 deletions server/api/formGroup/index.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,25 @@
import { Prisma } from '~~/prisma/generated/client'
import { prisma } from '../../utils/prisma'
import { getQuery } from 'h3'
import { lte } from 'zod'
import { _isoDateTime } from 'better-auth'

export default defineEventHandler(async (event) => {
const method = event.node.req.method
const query = getQuery(event)
const now = new Date()


//Get /api/formGroup?active=true to get only active form groups
if (method === 'GET') {
return await prisma.formGroup.findMany({
where: query.active === 'true' ? {
startDate: { lte: now },
OR: [
{ endDate: null },
{ endDate: { gte: now } } ]
} : {}
})
}

})
33 changes: 33 additions & 0 deletions server/api/formSubmission/index.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,33 @@
import { Prisma } from '~~/prisma/generated/client'
import { prisma } from '../../utils/prisma'
import { getQuery } from 'h3'

export default defineEventHandler(async (event) => {
const method = event.node.req.method
const query = getQuery(event)

if (method === 'GET') {
const where: Prisma.FormSubmissionWhereInput = {}

if (query.form) {
where.form = Number(query.form)
}
if (query.student) {
where.student = Number(query.student)
}

return await prisma.formSubmission.findMany({
where
})
}

if (method === 'POST') {
const body = await readBody(event)
return await prisma.formSubmission.create({
data: {
form: Number(body.form),
student: Number(body.student)
}
})
}
})