Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Bug: getting an email template by label #537

Open
mabiede opened this issue Apr 22, 2022 · 6 comments
Open

Bug: getting an email template by label #537

mabiede opened this issue Apr 22, 2022 · 6 comments

Comments

@mabiede
Copy link
Contributor

mabiede commented Apr 22, 2022

When storing the email templates with the additional language argument, it's possible to get an error when using the EmailTemplate.get_by_label function (without passing the language argument).

It allows e.g. creating a template for multiple languages with the same label. But when reading them without the language argument you'd receive a list and not Sihl_email.Template.t option Lwt.t as it is now.

This is an edge case and could be a wanted exception. Either both (create and get) have to use the language argument or neither of them. (Sorry, I missed adding this test)

I'd suggest keeping the signature and writing a warning to the console, that the function was called without the needed language argument (and returning Lwt.return_none).

@joseferben ping

@joseferben
Copy link
Contributor

@mabiede Could we somehow have a fallback mechanism, maybe a fallback language?

@aronerben
Copy link
Contributor

@mabiede @joseferben I think since the users can specify their own languages, we can't generally have a fallback language. Maybe we could just return the first one that is found (from a list)?

@mabiede
Copy link
Contributor Author

mabiede commented May 10, 2022

@joseferben @aronerben IMO, there doesn't need to be a fallback. Either the developer chooses to skip the optional language field or he uses it. If there is only one template for a label specified (e.g. single language) this will be returned.
In case there is more than one template (same label, multiple languages), an Exception or a Log.err and None Lwt.t should be returned.

In case of a fallback, may also add an ORDER BY created_at ASC and LIMIT 1 (without being
able to tell that there are other templates available for the specified key).

@aronerben
Copy link
Contributor

@joseferben

@mabiede and I had another discussion. If we want to avoid throwing exceptions (which I think Sihl should avoid, or mark the function with _exn), we see two options with two suboptions:

  1. The API is not changed:

    1. We add the LIMIT 1 if no language is provided (language is optional). This way, we only ever fetch one template
    2. We return the first template found*
  2. The API is changed:

    1. We return a list of templates
    2. We return a result if more (or fewer) than one template is found*

* This implies adding a try with around the Caqti call.

@joseferben
Copy link
Contributor

@mabiede @aronerben I like the LIMIT 1 idea if it is documented in the function docs because it does the "right thing" for probably most use cases. What do you think?

@aronerben
Copy link
Contributor

@mabiede @aronerben I like the LIMIT 1 idea if it is documented in the function docs because it does the "right thing" for probably most use cases. What do you think?

I like it.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

3 participants