firebase / extensions

Source code for official Firebase extensions
https://firebase.google.com/products/extensions
Apache License 2.0
882 stars 373 forks source link

🐛 [firestore-send-email] delete email documents on TTL expire #1946

Open balee opened 4 months ago

balee commented 4 months ago

[READ] Step 1: Are you in the right place?

Issues filed here should be about bugs for a specific extension in this repository. If you have a general question, need help debugging, or fall into some other category use one of these other channels:

[REQUIRED] Step 2: Describe your configuration

[REQUIRED] Step 3: Describe the problem

Steps to reproduce:

  1. Configure the plugin as described in the documentation, also set TTL type to day and TTL value to 5.
  2. Send some emails with the plugin.
  3. Note, that the emails are sent and received by the recipients as expected.
  4. Wait until the specified TTL is elapsed (and some weeks more, just to be sure)
Expected result

The documents in the configured collection are expected to be deleted automatically.

Actual result

The documents are never deleted.

Please note, that it is not even possible to manually set up a TTL policy, because expireAt field is at 2nd level in the document created by the plugin, however, only 1st level fields can be configure as timestamp field when creating a TTL policy (see https://console.cloud.google.com/firestore/databases/-default-/ttl)

Example document:

email-retu

MasaGon commented 4 months ago

I was wondering if it's possible to create a TTL Policy for a 2nd level field by specifying the timestamp field with dot notation, such as "delivery.expireAt". However, if setting the TTL manually is required, I believe it would be beneficial to include this information in the documentation. Unfortunately, I could not find any related instructions. Could you please clarify this?

ottob commented 3 months ago

its not much help but this works for us. using delivery.expireAt. extension 0.1.30

balee commented 3 months ago

Indeed, a TTL policy with delivery.expireAt is working. The documentation might be a bit more descriptive in this subject, it wasn't even clear for me that I have to create a TTL policy because it is not done automagically.