prehnite_core/db/schema/app_global/
mod.rs1#![doc = "アプリケーションのグローバル設定"]
2pub mod book_search_api;
3pub mod book_search_result;
4
5use crate::db::schema::app_global::book_search_api::BookSearchApi;
6use crate::db::schema::{TaskCategory, TaskTemplate};
7use crate::i18n::i18n;
8use sqlx::{Acquire, FromRow, SqliteConnection, SqliteTransaction};
9
10async fn register_default_data_task_categories(
12 tx: &mut SqliteTransaction<'_>,
13) -> Result<(), sqlx::Error> {
14 sqlx::query("INSERT INTO task_categories(id, name, autocomplete_paragraph_link) VALUES (?,?,?), (?,?,?)")
15 .bind(1)
16 .bind(i18n("task-category-foreshadowing"))
17 .bind(true)
18 .bind(2)
19 .bind(i18n("task-category-unexplained"))
20 .bind(true)
21 .execute(&mut **tx).await?;
22 Ok(())
23}
24
25pub async fn register_default_data_task_category_and_templates(
27 tx: &mut SqliteTransaction<'_>,
28) -> Result<(), sqlx::Error> {
29 register_default_data_task_categories(tx).await?;
30 let values = vec![
31 TaskTemplate {
32 id: 1,
33 task_category: Some(TaskCategory {
34 id: 1,
35 ..Default::default()
36 }),
37 title: i18n("task-template-recover"),
38 detail: Some(i18n("task-template-recover-detail")),
39 },
40 TaskTemplate {
41 id: 2,
42 task_category: Some(TaskCategory {
43 id: 2,
44 ..Default::default()
45 }),
46 title: i18n("task-template-will-explain"),
47 detail: Some(i18n("task-template-will-explain-detail")),
48 },
49 ];
50 TaskTemplate::register_many(values.as_slice(), &mut *tx, false).await?;
51 Ok(())
52}
53
54pub async fn register_default_data_book_search_api(
56 tx: &mut SqliteTransaction<'_>,
57) -> Result<(), sqlx::Error> {
58 BookSearchApi {
59 id: 0,
60 name: i18n("book-search-api-example-name"),
61 detail: i18n("book-search-api-example-detail"),
62 isbn_url: "https://example.com/api/book?isbn=<isbn>".to_string(),
63 text_url: "https://example.com/api/book?search=<text>".to_string(),
64 mapping_script: r#"fn mapper(isbn, search_text, response){
65 let x = [];
66 for result in response.result {
67 x += new_res(
68 result.isbn, // isbn
69 "", // url
70 result.title, // title
71 result.detail, // detail
72 result.authors, // authors
73 (), // publisher (Option::None)
74 result.publication_date, // publication date
75 )
76 }
77 x
78}"#
79 .to_string(),
80 is_example: true,
81 }
82 .register(&mut *tx, false)
83 .await?;
84 Ok(())
85}
86
87pub async fn register_all_default_data(conn: &mut SqliteConnection) -> Result<(), sqlx::Error> {
89 let mut tx = conn.begin().await?;
90 register_default_data_task_category_and_templates(&mut tx).await?;
91 register_default_data_book_search_api(&mut tx).await?;
92 tx.commit().await
93}
94
95#[cfg(test)]
96mod tests {
97 use crate::db::schema::app_global::register_all_default_data;
98 use crate::i18n::initialize_i18n_from_db_with_conn;
99 use sqlx::SqlitePool;
100
101 #[sqlx::test(migrator = "crate::db::migrate::app_global::MIGRATOR")]
102 async fn valid_register_all_default_data(pool: SqlitePool) {
103 let mut conn = pool.acquire().await.unwrap();
104 initialize_i18n_from_db_with_conn(&mut *conn).await;
105 register_all_default_data(&mut *conn).await.unwrap();
106 }
107}