se envía uuid de usuario

Se envia el uuid del usuario para para ponerle dueño a las asignaturas y planes de estudio creadas, y a los documentos de referencia subidos
This commit is contained in:
2025-10-01 19:20:24 -06:00
parent 2ccfdbf80f
commit da4cf5a5e0
4 changed files with 26 additions and 4 deletions

15
.vscode/launch.json vendored Normal file
View File

@@ -0,0 +1,15 @@
{
// Use IntelliSense to learn about possible attributes.
// Hover to view descriptions of existing attributes.
// For more information, visit: https://go.microsoft.com/fwlink/?linkid=830387
"version": "0.2.0",
"configurations": [
{
"type": "msedge",
"request": "launch",
"name": "Launch Edge against localhost",
"url": "http://localhost:3000",
"webRoot": "${workspaceFolder}"
}
]
}

View File

@@ -7,13 +7,14 @@ import { Textarea } from "@/components/ui/textarea"
import { AuroraButton } from "@/components/effect/aurora-button" import { AuroraButton } from "@/components/effect/aurora-button"
import confetti from "canvas-confetti" import confetti from "canvas-confetti"
import { useQueryClient } from "@tanstack/react-query" import { useQueryClient } from "@tanstack/react-query"
import { supabase } from "@/auth/supabase" import { supabase, useSupabaseAuth } from "@/auth/supabase"
import { Field } from "./Field" import { Field } from "./Field"
import { Tabs, TabsContent, TabsList, TabsTrigger } from "../ui/tabs" import { Tabs, TabsContent, TabsList, TabsTrigger } from "../ui/tabs"
import { asignaturaKeys } from "./planQueries" import { asignaturaKeys } from "./planQueries"
export function AddAsignaturaButton({ planId, onAdded }: { planId: string; onAdded?: () => void }) { export function AddAsignaturaButton({ planId, onAdded }: { planId: string; onAdded?: () => void }) {
const qc = useQueryClient() const qc = useQueryClient()
const supabaseAuth = useSupabaseAuth()
const [open, setOpen] = useState(false) const [open, setOpen] = useState(false)
const [saving, setSaving] = useState(false) const [saving, setSaving] = useState(false)
const [mode, setMode] = useState<"manual" | "ia">("manual") const [mode, setMode] = useState<"manual" | "ia">("manual")
@@ -56,11 +57,13 @@ export function AddAsignaturaButton({ planId, onAdded }: { planId: string; onAdd
async function createWithAI() { async function createWithAI() {
if (!canIA) return if (!canIA) return
setSaving(true) setSaving(true)
// inserte la asignatura generada directamente
// obtengas el uuid que se insertó
try { try {
const res = await fetch(`${import.meta.env.VITE_BACK_ORIGIN}/api/generar/asignatura`, { const res = await fetch(`${import.meta.env.VITE_BACK_ORIGIN}/api/generar/asignatura`, {
method: "POST", method: "POST",
headers: { "Content-Type": "application/json" }, headers: { "Content-Type": "application/json" },
body: JSON.stringify({ planEstudiosId: planId, prompt: iaPrompt, semestre: iaSemestre.trim() ? Number(iaSemestre) : undefined, insert: true }), body: JSON.stringify({ planEstudiosId: planId, prompt: iaPrompt, semestre: iaSemestre.trim() ? Number(iaSemestre) : undefined, insert: true, uuid: supabaseAuth.user?.id }),
}) })
if (!res.ok) throw new Error(await res.text()) if (!res.ok) throw new Error(await res.text())
confetti({ particleCount: 120, spread: 80, origin: { y: 0.6 } }) confetti({ particleCount: 120, spread: 80, origin: { y: 0.6 } })

View File

@@ -165,6 +165,7 @@ export function CreatePlanDialog({ open, onOpenChange }: { open: boolean; onOpen
prompt, prompt,
insert: true, insert: true,
files: selectedFiles, files: selectedFiles,
uuid: auth.user?.id,
}) })
const newId = (res as any)?.id || (res as any)?.plan?.id || (res as any)?.data?.id const newId = (res as any)?.id || (res as any)?.plan?.id || (res as any)?.data?.id
if (newId) { if (newId) {

View File

@@ -1,7 +1,7 @@
// routes/_authenticated/archivos.tsx // routes/_authenticated/archivos.tsx
import { createFileRoute, useRouter } from "@tanstack/react-router" import { createFileRoute, useRouter } from "@tanstack/react-router"
import { useMemo, useState } from "react" import { use, useMemo, useState } from "react"
import { supabase } from "@/auth/supabase" import { supabase, useSupabaseAuth } from "@/auth/supabase"
import * as Icons from "lucide-react" import * as Icons from "lucide-react"
import { Card, CardContent, CardHeader, CardTitle } from "@/components/ui/card" import { Card, CardContent, CardHeader, CardTitle } from "@/components/ui/card"
import { Input } from "@/components/ui/input" import { Input } from "@/components/ui/input"
@@ -16,6 +16,7 @@ import { Select, SelectTrigger, SelectContent, SelectItem, SelectValue } from "@
import { DetailDialog } from "@/components/archivos/DetailDialog" import { DetailDialog } from "@/components/archivos/DetailDialog"
import type { RefRow } from "@/types/RefRow" import type { RefRow } from "@/types/RefRow"
import { uuid } from "zod"
export const Route = createFileRoute("/_authenticated/archivos")({ export const Route = createFileRoute("/_authenticated/archivos")({
component: RouteComponent, component: RouteComponent,
@@ -192,6 +193,7 @@ function RouteComponent() {
function UploadDialog({ function UploadDialog({
open, onOpenChange, onDone, open, onOpenChange, onDone,
}: { open: boolean; onOpenChange: (o: boolean) => void; onDone: () => void }) { }: { open: boolean; onOpenChange: (o: boolean) => void; onDone: () => void }) {
const supabaseAuth = useSupabaseAuth()
const [file, setFile] = useState<File | null>(null) const [file, setFile] = useState<File | null>(null)
const [instrucciones, setInstrucciones] = useState("") const [instrucciones, setInstrucciones] = useState("")
const [tags, setTags] = useState("") const [tags, setTags] = useState("")
@@ -222,6 +224,7 @@ function UploadDialog({
prompt: instrucciones, prompt: instrucciones,
fileBase64, fileBase64,
insert: true, insert: true,
uuid: supabaseAuth.user?.id ?? null,
}), }),
}) })
if (!res.ok) { if (!res.ok) {