headless_lms_server/programs/seed/
seed_generic_emails.rs

1use headless_lms_models::{
2    email_templates::{EmailTemplateNew, EmailTemplateType, insert_email_template},
3    user_passwords::insert_password_reset_token,
4};
5use serde_json::json;
6use sqlx::{Pool, Postgres};
7use uuid::Uuid;
8
9use super::seed_users::SeedUsersResult;
10
11pub async fn seed_generic_emails(
12    db_pool: Pool<Postgres>,
13    seed_users_result: SeedUsersResult,
14) -> anyhow::Result<()> {
15    info!("inserting password reset emails");
16
17    let mut conn = db_pool.acquire().await?;
18
19    let english_subject = Some("Reset password request");
20    let english_body = json!([
21        {
22            "type": "core/paragraph",
23            "isValid": true,
24            "clientId": "95acea49-1c92-4d54-9854-707e1bfee010",
25            "attributes": {
26                "content": "Hello, it seems you requested a password reset.",
27                "drop_cap": false
28            },
29            "innerBlocks": []
30        },
31        {
32            "type": "core/paragraph",
33            "isValid": true,
34            "clientId": "ceac591d-b291-40b2-8da7-6f437a6a8fce",
35            "attributes": {
36                "content": "You can reset your password here: {{RESET_LINK}}",
37                "drop_cap": false
38            },
39            "innerBlocks": []
40        },
41        {
42            "type": "core/paragraph",
43            "isValid": true,
44            "clientId": "6a4165a1-38e1-4a17-b364-5f265afc7d23",
45            "attributes": {
46                "content": "If you did not request a password reset, please ignore this message.",
47                "drop_cap": false
48            },
49            "innerBlocks": []
50        }
51    ]);
52
53    let english_template = EmailTemplateNew {
54        template_type: EmailTemplateType::ResetPasswordEmail,
55        language: Some("en".to_string()),
56        content: Some(english_body),
57        subject: english_subject.map(|s| s.to_string()),
58    };
59
60    insert_email_template(&mut conn, None, english_template, english_subject).await?;
61
62    let finnish_subject = Some("Salasanan palautuspyyntö");
63    let finnish_body = json!([
64        {
65            "type": "core/paragraph",
66            "isValid": true,
67            "clientId": "a9de49ff-919f-44b4-a085-9210ce0da94b",
68            "attributes": {
69                "content": "Hei, olet pyytänyt salasanan palautusta.",
70                "drop_cap": false
71            },
72            "innerBlocks": []
73        },
74        {
75            "type": "core/paragraph",
76            "isValid": true,
77            "clientId": "c145bae4-9ff5-4194-8913-50f8900c20c8",
78            "attributes": {
79                "content": "Voit palauttaa salasanasi tästä: {{RESET_LINK}}",
80                "drop_cap": false
81            },
82            "innerBlocks": []
83        },
84        {
85            "type": "core/paragraph",
86            "isValid": true,
87            "clientId": "ebd0d430-0ae3-4b85-9e8e-96481660ded4",
88            "attributes": {
89                "content": "Jos et pyytänyt salasanan palautusta, voit jättää tämän viestin huomiotta.",
90                "drop_cap": false
91            },
92            "innerBlocks": []
93        }
94    ]);
95
96    let finnish_template = EmailTemplateNew {
97        template_type: EmailTemplateType::ResetPasswordEmail,
98        language: Some("fi".to_string()),
99        content: Some(finnish_body),
100        subject: finnish_subject.map(|s| s.to_string()),
101    };
102
103    insert_email_template(&mut conn, None, finnish_template, finnish_subject).await?;
104
105    info!("inserting password reset token for user");
106    let SeedUsersResult { sign_up_user, .. } = seed_users_result;
107    insert_password_reset_token(
108        &mut conn,
109        sign_up_user,
110        Uuid::parse_str("5a831370-6b7e-4ece-b962-6bc31c28fe53")?,
111    )
112    .await?;
113
114    info!("inserting delete account email");
115
116    let delete_subject = Some("Account deletion code");
117    let delete_body = json!([
118        {
119            "type": "core/paragraph",
120            "isValid": true,
121            "clientId": "11111111-1111-1111-1111-111111111111",
122            "attributes": {
123                "content": "Hello, it seems you requested a code for deleting your account",
124                "drop_cap": false
125            },
126            "innerBlocks": []
127        },
128        {
129            "type": "core/paragraph",
130            "isValid": true,
131            "clientId": "22222222-2222-2222-2222-222222222222",
132            "attributes": {
133                "content": "Use this verification code to delete your account: {{CODE}}",
134                "drop_cap": false
135            },
136            "innerBlocks": []
137        },
138        {
139            "type": "core/paragraph",
140            "isValid": true,
141            "clientId": "33333333-3333-3333-3333-333333333333",
142            "attributes": {
143                "content": "If you did not request a code, please ignore this message.",
144                "drop_cap": false
145            },
146            "innerBlocks": []
147        }
148    ]);
149
150    let delete_template = EmailTemplateNew {
151        template_type: EmailTemplateType::DeleteUserEmail,
152        language: Some("en".to_string()),
153        content: Some(delete_body),
154        subject: delete_subject.map(|s| s.to_string()),
155    };
156
157    insert_email_template(&mut conn, None, delete_template, delete_subject).await?;
158
159    info!("inserting confirm email code email");
160
161    let confirm_subject = Some("Email verification code");
162    let confirm_body = json!([
163        {
164            "type": "core/paragraph",
165            "isValid": true,
166            "clientId": "44444444-4444-4444-4444-444444444444",
167            "attributes": {
168                "content": "Hello, please use this code to verify your email address",
169                "drop_cap": false
170            },
171            "innerBlocks": []
172        },
173        {
174            "type": "core/paragraph",
175            "isValid": true,
176            "clientId": "55555555-5555-5555-5555-555555555555",
177            "attributes": {
178                "content": "Your verification code is: {{CODE}}",
179                "drop_cap": false
180            },
181            "innerBlocks": []
182        },
183        {
184            "type": "core/paragraph",
185            "isValid": true,
186            "clientId": "66666666-6666-6666-6666-666666666666",
187            "attributes": {
188                "content": "If you did not request this code, please ignore this message.",
189                "drop_cap": false
190            },
191            "innerBlocks": []
192        }
193    ]);
194
195    let confirm_template = EmailTemplateNew {
196        template_type: EmailTemplateType::ConfirmEmailCode,
197        language: Some("en".to_string()),
198        content: Some(confirm_body),
199        subject: confirm_subject.map(|s| s.to_string()),
200    };
201
202    insert_email_template(&mut conn, None, confirm_template, confirm_subject).await?;
203
204    Ok(())
205}