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

[BACK] feat(notifications): u#3965 add a periodic task and a command to delete read notifications #564

Merged
merged 1 commit into from
Nov 23, 2023

Conversation

bameda
Copy link
Contributor

@bameda bameda commented Nov 22, 2023

A periodic task is created that will delete delete all notifications that have been read more than X minutes ago. (The frequency of the periodic task and time that the nitifications will be kept are configurable parameters).

There is a CLI command to remove read notifications too.

How to tests:

  • Review the code.
  • Tests are green.
  • Manual tests: Tests logical deletion:
    • Init:
      • Set settings to remove notifications read before 2 minutes.
        export TAIGA_NOTIFICATIONS__CLEAN_READ_NOTIFICATIONS_CRON= "* * * * *"
        export TAIGA_NOTIFICATIONS__MINUTES_TO_STORE_READ_NOTIFICATIONS=1
        
      • Open two frontend as 1user and 2user and go to the same kanban
    • Test periodic task:
      • You have to create some notifications and mark as read. Then, wait a little bit (~ 2 minutes) and check the console logs to see the log entry of the periodic task runned.
    • Test CLI:
      • python -m taiga notifications clean-read-notifications --help

@bameda bameda force-pushed the us/3965/delete_read_notifications_periodically branch from a844af3 to 4236815 Compare November 22, 2023 18:37
Copy link

github-actions bot commented Nov 22, 2023

Coverage

Coverage Report
FileStmtsMissCoverMissing
src/taiga
   __main__.py73730%17–157
src/taiga/attachments
   admin.py27390%25, 28, 70
   events.py8275%15, 20
   models.py19289%61, 64
   repositories.py49197%62
src/taiga/auth/services
   __init__.py47098%90–>93
src/taiga/base
   mocks.py741280%93–94, 107–118, 143–>exit
src/taiga/base/api
   permissions.py49199%22
   requests.py11380%15, 21–23
src/taiga/base/db
   __init__.py4175%15
   commands.py52520%8–269
   sequences.py45297%91–92
src/taiga/base/db/admin
   forms.py14838%17–25
   utils.py11736%17–23
src/taiga/base/db/models
   fields.py15188%20
src/taiga/base/django
   __init__.py5260%17–19
   settings.py30293%16–17
   urls.py330%8–11
src/taiga/base/i18n
   __init__.py102988%171–>170, 173–>170, 192–193, 203–205, 215, 268, 279, 283
   choices.py34291%80, 87
   commands.py74740%8–108
src/taiga/base/logging
   formatters.py241050%22–>exit, 38, 44–45, 51–60
   middlewares.py23196%20
src/taiga/base/repositories
   neighbors.py39391%43–44, 65
src/taiga/base/sampledata
   commands.py11110%8–40
   constants.py15150%14–51
   demo_data.py2732730%8–529
   factories.py1221220%9–353
   test_data.py2902900%8–634
src/taiga/base/serializers
   fields.py34393%22, 47, 61
src/taiga/base/utils
   commands.py11110%8–30
   datetime.py441860%54, 67, 126–147
   enum.py14192%43
   images.py26387%21–22, 30
   json.py33963%31–>33, 33–>35, 37, 39–44, 46, 50
   pprint.py660%8–17
   slug.py23485%22–25
src/taiga/base/validators/fields
   i18n.py15195%19
   uuid.py14195%19
src/taiga/comments
   admin.py29392%16, 20, 24
   events.py11373%15, 20, 25
   models.py20291%43, 46
   notifications.py6183%16
src/taiga/commons/storage
   commands.py13130%8–40
   models.py16288%38, 41
   services.py9092%17–>16
   tasks.py990%8–19
src/taiga/conf
   __init__.py96395%114, 130–131
   tokens.py17190%34
src/taiga/emails
   commands.py35350%9–68
   sender.py18571%48–50, 54–73
   tasks.py39490%44–45, 53–54
src/taiga/events
   app.py18192%21
   events.py16288%31–32
   logging.py392331%18–>exit, 32–48, 51–60
   manager.py1171190%78–79, 223–233, 239–242
   responses.py33684%33, 37–41
   subscriber.py80495%51, 55, 88, 91, 108–>120
src/taiga/events/actions
   auth.py231144%27–32, 39–45
   event_handlers.py9456%18–20, 28–30
   projects.py553038%36–40, 48–64, 72–80, 88–96
   workspaces.py553038%36–40, 48–64, 72–80, 88–96
src/taiga/events/pubsub/backends
   base.py30198%53
   redis.py66594%41–43, 85–86
src/taiga/exceptions/api
   __init__.py27097%28–>30
   handlers.py27290%27–28
   middlewares.py26287%37, 41
src/taiga/integrations/auth
   services.py39782%50–56
src/taiga/integrations/github
   services.py40098%63–>68
src/taiga/mediafiles
   admin.py20291%24, 27
   models.py26292%84, 87
src/taiga/notifications
   admin.py11285%20, 23
   api.py33195%95
   commands.py13130%8–40
   repositories.py48197%85
   services.py33097%51–>54
   tasks.py13130%8–32
src/taiga/permissions
   services.py103198%28, 106–>109
src/taiga/permissions/validators
   fields.py24388%18–19, 45
src/taiga/projects/invitations
   models.py25292%89, 92
   repositories.py84198%135
src/taiga/projects/invitations/api
   validators.py65789%38–40, 65–66, 84–85
src/taiga/projects/invitations/events
   __init__.py33191%37–>exit, 49–>exit, 74–>exit, 102
src/taiga/projects/invitations/services
   __init__.py183199%58–>53, 286
src/taiga/projects/memberships
   models.py16288%51, 54
   repositories.py86297%91, 124
src/taiga/projects/memberships/events
   __init__.py16288%18–24
src/taiga/projects/memberships/services
   __init__.py45195%64–>69, 111
src/taiga/projects/projects
   admin.py531275%33–34, 39–42, 50–51, 56–59, 90, 94
   models.py61886%64, 67, 78, 113, 116, 119–121
   repositories.py115496%125, 126–>129, 155, 254–255
   tasks.py6188%17
src/taiga/projects/projects/services
   __init__.py107592%78, 87, 199, 205–>208, 213, 235
src/taiga/projects/references
   mixins.py13093%25–>28
src/taiga/projects/roles
   api.py35393%46–48
   models.py26386%50, 53, 57
   repositories.py44196%92
src/taiga/projects/roles/services
   __init__.py25194%24, 57–>62
src/taiga/stories/assignments
   models.py15287%42, 45
   repositories.py52197%49
src/taiga/stories/assignments/notifications
   __init__.py18091%25–>27, 44–>46
src/taiga/stories/attachments
   api.py51197%159
   serializers.py11093%20–>28
src/taiga/stories/comments
   api.py59197%188
src/taiga/stories/comments/notifications
   __init__.py12094%19–>21
src/taiga/stories/stories
   admin.py25584%76–81, 85, 89
   models.py25292%73, 76
src/taiga/stories/stories/notifications
   __init__.py25091%27–>29, 49–>51, 72–>74
src/taiga/stories/stories/services
   __init__.py150298%251–>268, 312, 336
src/taiga/tasksqueue
   app.py20286%29–30
   commands.py65650%8–122
   logging.py331740%18–>exit, 29–39, 42–51
   manager.py561377%37, 41, 45, 49, 94, 163, 177, 186, 191, 198, 202, 209, 213
   task.py12192%23
src/taiga/tokens
   admin.py441081%67, 70, 73, 76, 104, 108, 112, 116, 120, 124
   models.py30487%59, 62, 78, 81
src/taiga/users
   admin.py51781%32, 41, 50, 87–95
   commands.py990%8–26
   models.py651086%71, 74, 90, 93, 97, 100, 103, 106, 127, 130
   repositories.py204398%209–>212, 335, 428–429
src/taiga/users/api
   __init__.py66296%216, 304
src/taiga/users/api/validators
   __init__.py42392%39–41
src/taiga/users/services
   __init__.py244795%75, 259, 262–>257, 297–>280, 306–>280, 322–>318, 345–>341, 366, 494–>499, 513–520, 521–>526, 524–525
src/taiga/workflows
   models.py40490%42, 45, 85, 88
src/taiga/workflows/services
   __init__.py156595%54, 233, 329, 373–>403, 380, 466–>475, 482
src/taiga/workspaces/invitations
   models.py24292%84, 87
   permissions.py9182%19
   repositories.py77198%123
src/taiga/workspaces/invitations/api
   validators.py18288%24–25
src/taiga/workspaces/invitations/events
   __init__.py25191%36–>exit, 60–>exit, 71
src/taiga/workspaces/invitations/services
   __init__.py123199%222
src/taiga/workspaces/memberships
   api.py43196%126
   models.py15287%43, 46
   repositories.py63295%72, 105
src/taiga/workspaces/memberships/services
   __init__.py46197%117
src/taiga/workspaces/workspaces
   admin.py571962%25–26, 31–34, 49, 52–57, 61, 65, 73–74, 79–82
   models.py18290%32, 35
   repositories.py127299%232–233
src/taiga/workspaces/workspaces/services
   __init__.py54294%113, 116
TOTAL10384157284% 

Tests Skipped Failures Errors Time
1192 1 💤 0 ❌ 0 🔥 11m 34s ⏱️

@bameda bameda force-pushed the us/3965/delete_read_notifications_periodically branch from 4236815 to b01d29b Compare November 22, 2023 20:18
@bameda bameda changed the title feat(notifications): u#3965 add a periodic task and a command to delete read notifications [BACK] feat(notifications): u#3965 add a periodic task and a command to delete read notifications Nov 22, 2023
@bameda bameda marked this pull request as ready for review November 22, 2023 20:49
@daniel-herrero daniel-herrero self-assigned this Nov 23, 2023
@bameda bameda force-pushed the us/3965/delete_read_notifications_periodically branch from b01d29b to 9cde441 Compare November 23, 2023 08:23
Copy link
Contributor

@daniel-herrero daniel-herrero left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Well done!

@bameda bameda merged commit 72c6974 into main Nov 23, 2023
2 checks passed
@bameda bameda deleted the us/3965/delete_read_notifications_periodically branch November 23, 2023 08:26
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
2 participants