headless_lms_server/controllers/main_frontend/
chatbot_models.rs

1//! Controllers for requests starting with `/api/v0/main-frontend/chatbot-models/`.
2use crate::prelude::*;
3
4use models::chatbot_configurations_models::ChatbotConfigurationModel;
5
6#[derive(Debug, Serialize, Deserialize, PartialEq, Eq)]
7#[cfg_attr(feature = "ts_rs", derive(TS))]
8pub struct CourseInfo {
9    course_id: Uuid,
10}
11
12/// GET `/api/v0/main-frontend/chatbot-models/{chatbot_configuration_id}`
13#[instrument(skip(pool))]
14async fn get_model(
15    chatbot_model_id: web::Path<Uuid>,
16    payload: web::Json<Uuid>,
17    pool: web::Data<PgPool>,
18    user: AuthUser,
19) -> ControllerResult<web::Json<ChatbotConfigurationModel>> {
20    let mut conn = pool.acquire().await?;
21    let model =
22        models::chatbot_configurations_models::get_by_id(&mut conn, *chatbot_model_id).await?;
23    let token = authorize(&mut conn, Act::Edit, Some(user.id), Res::Course(*payload)).await?;
24
25    token.authorized_ok(web::Json(model))
26}
27
28/// GET `/api/v0/main-frontend/chatbot-models?course_id={course_id}`
29#[instrument(skip(pool))]
30async fn get_all_models(
31    course_info: web::Query<CourseInfo>,
32    pool: web::Data<PgPool>,
33    user: AuthUser,
34) -> ControllerResult<web::Json<Vec<ChatbotConfigurationModel>>> {
35    let mut conn = pool.acquire().await?;
36    let models = models::chatbot_configurations_models::get_all(&mut conn).await?;
37    let token = authorize(
38        &mut conn,
39        Act::Edit,
40        Some(user.id),
41        Res::Course(course_info.course_id),
42    )
43    .await?;
44
45    token.authorized_ok(web::Json(models))
46}
47
48pub fn _add_routes(cfg: &mut web::ServiceConfig) {
49    cfg.route("/{id}", web::get().to(get_model))
50        .route("/", web::get().to(get_all_models));
51}