Legend:
Page
Library
Module
Module type
Parameter
Class
Class type
Source
Page
Library
Module
Module type
Parameter
Class
Class type
Source
sihl_email_template.ml1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68open Lwt.Syntax module Make (Repo : Sihl_email_template_repo.Sig) : Sihl_contract.Email_template.Sig = struct let get ~id = Repo.get ~id let get_by_name ~name = Repo.get_by_name ~name let create ~name ~html ~text = let template = Sihl_type.Email_template.make ~text ~html name in let* () = Repo.insert ~template in let id = Sihl_type.Email_template.id template in let* created = Repo.get ~id in match created with | None -> Logs.err (fun m -> m "EMAIL: Could not create template %a" Sihl_type.Email_template.pp template); raise (Sihl_type.Email.Exception "Could not create email template") | Some created -> Lwt.return created ;; let update ~template = let* () = Repo.update ~template in let id = Sihl_type.Email_template.id template in let* created = Repo.get ~id in match created with | None -> Logs.err (fun m -> m "EMAIL: Could not update template %a" Sihl_type.Email_template.pp template); raise (Sihl_type.Email.Exception "Could not create email template") | Some created -> Lwt.return created ;; let render email = let template_id = Sihl_type.Email.template_id email in let template_data = Sihl_type.Email.template_data email in let text_content = Sihl_type.Email.text_content email in let html_content = Sihl_type.Email.html_content email in let* text_content, html_content = match template_id with | Some template_id -> let* template = Repo.get ~id:template_id in let* template = match template with | None -> raise (Sihl_type.Email.Exception (Printf.sprintf "Template with id %s not found" template_id)) | Some template -> Lwt.return template in Sihl_type.Email_template.render template_data template |> Lwt.return | None -> Lwt.return (text_content, html_content) in email |> Sihl_type.Email.set_text_content text_content |> Sihl_type.Email.set_html_content html_content |> Lwt.return ;; let start () = Lwt.return () let stop () = Lwt.return () let lifecycle = Sihl_core.Container.Lifecycle.create "template" ~start ~stop let register () = Repo.register_migration (); Repo.register_cleaner (); Sihl_core.Container.Service.create lifecycle ;; end