diff --git a/backend/src/controller/classroom/mod.rs b/backend/src/controller/classroom/mod.rs index 6ba46dc..cfcac5e 100644 --- a/backend/src/controller/classroom/mod.rs +++ b/backend/src/controller/classroom/mod.rs @@ -1,6 +1,6 @@ use crate::{ json_result::JsonResult, - model::classroom_user::{ClassroomPersonCreate, ClassroomCourseRegistration}, + model::{classroom_user::{ClassroomPersonCreate, ClassroomCourseRegistration}, person::PersonLink}, online_classroom::{create_user::create, get_courses::ClassroomCourse}, }; use rocket::{http::Status, serde::json::Json}; @@ -12,9 +12,9 @@ pub fn create_user_options() -> Status { } #[post("/classroom/user", format = "json", data = "")] -pub async fn create_user(data: Json) -> (Status, Json>) { +pub async fn create_user(data: Json) -> (Status, Json>) { match create(&data.0).await { - Ok(_) => return (Status::Ok, JsonResult::ok(())), + Ok(p) => return (Status::Ok, JsonResult::ok(p)), Err(err) => return (Status::InternalServerError, JsonResult::err(err)), } } diff --git a/backend/src/model/person.rs b/backend/src/model/person.rs index d08fdc7..9d3bbe8 100644 --- a/backend/src/model/person.rs +++ b/backend/src/model/person.rs @@ -64,7 +64,7 @@ impl PersonCreate { } } -#[derive(Deserialize)] +#[derive(Serialize, Deserialize)] pub struct PersonLink { pub person_id: i32, pub person_classroom_id: i32, diff --git a/backend/src/online_classroom/create_user.rs b/backend/src/online_classroom/create_user.rs index c54fd4e..afd1760 100644 --- a/backend/src/online_classroom/create_user.rs +++ b/backend/src/online_classroom/create_user.rs @@ -5,7 +5,7 @@ use scraper::{Html, Selector}; const CREATION_ERR: &str = "Creation successful, but linking failed"; /// Creates an online classroom user -pub async fn create(data: &ClassroomPersonCreate) -> Result<(), String> { +pub async fn create(data: &ClassroomPersonCreate) -> Result { let sec_token = get_form_sec_token().await?; let body = get_request_body( @@ -35,15 +35,14 @@ pub async fn create(data: &ClassroomPersonCreate) -> Result<(), String> { )) })?; - let result = PersonLink { + let person_link = PersonLink { person_id: data.person_id, person_classroom_id: user_id, - } - .insert() - .await; + }; + let result = person_link.insert().await; match result { - Ok(_) => return Ok(()), + Ok(_) => return Ok(person_link), Err(reason) => return Err(format!("{}: {}", CREATION_ERR, reason)), } } diff --git a/frontend/src/OnlineClassroom/ClassroomRegistration.tsx b/frontend/src/OnlineClassroom/ClassroomRegistration.tsx index 4438a04..a254752 100644 --- a/frontend/src/OnlineClassroom/ClassroomRegistration.tsx +++ b/frontend/src/OnlineClassroom/ClassroomRegistration.tsx @@ -27,7 +27,10 @@ export function ClassroomRegistration(props: { userId={props.userId} selections={selections()} deleteRegister={(course_key) => setSelections((course) => course.filter((v) => v !== course_key))} - onSuccess={props.onSuccess} + onSuccess={() => { + setSelections([]); + props.onSuccess(); + }} /> ); diff --git a/frontend/src/OnlineClassroom/ClassroomUserCreation.tsx b/frontend/src/OnlineClassroom/ClassroomUserCreation.tsx index 8c08076..079f291 100644 --- a/frontend/src/OnlineClassroom/ClassroomUserCreation.tsx +++ b/frontend/src/OnlineClassroom/ClassroomUserCreation.tsx @@ -7,7 +7,12 @@ import { LoadingStatus, backend, useLoading, wait } from "../utils/functions"; import { JsonResult } from "../types/JsonResult"; import { LoadingIcon } from "../icons/LoadingIcon"; -export function ClassroomUserCreation(props: {person: Person}) { +type PersonLink = { + person_id: number, + person_classroom_id: number, +}; + +export function ClassroomUserCreation(props: {person: Person, onCreate: (classroom_id: number) => void}) { const [email, setEmail] = createSignal("yuli.palo.apaza@gmail.com"); const [username, setUsername] = createSignal("USERNAME"); const {setError, status, setStatus} = useLoading(); @@ -37,7 +42,7 @@ export function ClassroomUserCreation(props: {person: Person}) { if (import.meta.env.DEV) await wait(1500); - backend.post>("/api/classroom/user", { + backend.post>("/api/classroom/user", { person_id: props.person.person_id, person_names: names(), person_surnames: surnames(), @@ -50,6 +55,7 @@ export function ClassroomUserCreation(props: {person: Person}) { if (response.status === 200) { alert("Usuario creado con éxito"); setStatus(LoadingStatus.Ok); + props.onCreate(response.data.Ok.person_classroom_id); } else { console.error(response.data); setError(response.data.Err.reason); diff --git a/frontend/src/OnlineClassroom/index.tsx b/frontend/src/OnlineClassroom/index.tsx index c89c644..6ce6b75 100644 --- a/frontend/src/OnlineClassroom/index.tsx +++ b/frontend/src/OnlineClassroom/index.tsx @@ -22,6 +22,7 @@ export function OnlineClassroom() { setPerson((p) => ({...p!, person_classroom_id: classroom_id}))} + onCreate={(classroom_id) => setPerson((p) => ({...p!, person_classroom_id: classroom_id}))} /> @@ -43,7 +44,11 @@ export function OnlineClassroom() { -function ClassroomUser(props: {person: Person, onLink: (classroom_id: number) => void,}) { +function ClassroomUser(props: { + person: Person, + onLink: (classroom_id: number) => void, + onCreate: (classroom_id: number) => void, +}) { const [active, setActive] = createSignal("Vinculate"); return ( @@ -63,7 +68,10 @@ function ClassroomUser(props: {person: Person, onLink: (classroom_id: number) => /> - +