diff --git a/.env.example b/.env.example index 270a616..1355dee 100644 --- a/.env.example +++ b/.env.example @@ -33,6 +33,4 @@ MP_NOTIFICATION_URL= # External MySQL Integration MYSQL_DATABASE_URL=mysql://db_user:db_password@localhost:3306/external_database_name EXTERNAL_TABLE_GRADES=notas -EXTERNAL_GRADE_SCALE_MIN=1 -EXTERNAL_GRADE_SCALE_MAX=7 EXTERNAL_ID_TIPO_NOTA=1 diff --git a/services/lms-service/src/handlers.rs b/services/lms-service/src/handlers.rs index cc06317..49ac2dd 100644 --- a/services/lms-service/src/handlers.rs +++ b/services/lms-service/src/handlers.rs @@ -1205,12 +1205,8 @@ pub async fn submit_lesson_score( if let Some(id_detalle_contrato) = external_id { let table = env::var("EXTERNAL_TABLE_GRADES").unwrap_or_else(|_| "notas".to_string()); - // Convert score from 0.0-1.0 to integer scale (1-7 Chilean grades by default) - let scale_max: f32 = env::var("EXTERNAL_GRADE_SCALE_MAX") - .ok().and_then(|v| v.parse().ok()).unwrap_or(7.0); - let scale_min: f32 = env::var("EXTERNAL_GRADE_SCALE_MIN") - .ok().and_then(|v| v.parse().ok()).unwrap_or(1.0); - let nota = (scale_min + (payload.score * (scale_max - scale_min))).round() as i32; + // The external MySQL table uses the exact same 0-100 scale. + let nota = payload.score.round() as i32; // Resolve idTipoNota from the lesson's grading category (tipo_nota_id), // falling back to the EXTERNAL_ID_TIPO_NOTA env var. diff --git a/services/lms-service/src/openapi.rs b/services/lms-service/src/openapi.rs index c7082bb..1902e61 100644 --- a/services/lms-service/src/openapi.rs +++ b/services/lms-service/src/openapi.rs @@ -18,7 +18,7 @@ pub struct GradeSubmissionRequest { pub user_id: String, pub course_id: String, pub lesson_id: String, - /// Puntaje entre 0.0 y 1.0 — se convertirá a la escala local (ej: 1-7) + /// Puntaje entre 0 y 100 pub score: f32, pub metadata: Option, } @@ -184,8 +184,8 @@ pub fn enroll_user() {} /// localmente en PostgreSQL y se sincroniza automáticamente a MySQL en la tabla `notas` /// usando el `idDetalleContrato` guardado al momento de la inscripción. /// -/// El campo `score` debe estar entre 0.0 y 1.0 — se convertirá a la escala -/// entera configurada (por defecto a escala chilena 1–7). +/// El campo `score` debe estar entre 0 y 100 — la nota se insertará +/// directamente en la base de datos externa como valor entero. #[utoipa::path( post, path = "/grades",