Versions Compared

Key

  • This line was added.
  • This line was removed.
  • Formatting was changed.

Summary

Adds the ability to configure custom (granular) deletion policies for posts for specific teams and/or channels so that when the daily retention job runs it can selectively delete those resources posts by age based on what’s configuredthe configuration.

The retention job (or at least the queries) will have to be modified such that the global setting does not delete posts for any team or channel that is configured via granular policies. The granular policies completely override the global setting. Put another way a differently, granular setting can either cause a post to live longer or shorter than the global setting.

The feature requires some new APIs, some new tables, and an edit to the existing data retention job code.

API

Global Policy (existing API)

GET /api/v4/data_retention/policy to retrieve retrieves the global retention settings.

Code Block
{
    "message_deletion_enabled": false,
    "file_deletion_enabled": false,
    "message_retention_cutoff": 0,
    "file_retention_cutoff": 0
}

Updating Updates to the global retention policy continues to be managed via the config APIAPIs.

...

Retention Policies

POST /api/v4/retention_policies to create a new retention policy.

Request:

Code Block
languagejson
{
    "display_name": "foo",
    "post_duration": 4
}

Response201 response:

Code Block
{
    "id": "m8zoumpj9pn9zexospoxi5dzoc",
    "display_name": "foo",
    "post_duration": 4
}

...

PUT /api/v4/retention_policies/:policy_id/patch to patch patches a retention policy.

Request:

Code Block
{
    "display_name": "foo2",
    "post_duration": 365
}

200 Response:

Code Block
{
    "id": "m8zoumpj9pn9zexospoxi5dzoc",
    "display_name": "foo2",
    "post_duration": 365
}

...

GET /api/v4/retention_policies/:policy_id to get gets a retention policy by id.

Code Block
{
    "id": "m8zoumpj9pn9zexospoxi5dzoc",
    "display_name": "foo2",
    "post_duration": 365,
    "teams": ["z7rxbxbfb7yxdydxzi8pestath"],
    "channels": ["z7rxbxbfb7yxdydxzi8pestath"]
}

...

DELETE /api/v4/retention_policies/:policy_id to delete deletes a retention policy.

As a prerequisite one must delete all of the RetentionPoliciesChannels and RetentionPoliciesTeams first, otherwise the request is rejected.

...

GET /api/v4/retention_policies to list lists all retention policies, including associated teams and channels.

Code Block
{
    "policies": [
        {
            "display_name": "foo",
            "post_duration": 2,
            "teams": ["z7rxbxbfb7yxdydxzi8pestath"],
            "channels": ["z7rxbxbfb7yxdydxzi8pestath"]
        }
    ],
    "total_count": 1
}

TBD: How much easier is it to just include the team and channel display names rather than just ids? For example:

Code Block
{
    "policies": [
        {
            "display_name": "foo",
            "post_duration": 2,
            "teams": [
                {
                    "id": "z7rxbxbfb7yxdydxzi8pestath",
                    "display_name": "My Team 1"
                }
            ],
            "channels": [
                {
                    "id": "z7rxbxbfb7yxdydxzi8pestath",
                    "display_name": "Off Topic",
                    "team_display_name": "My Team 1"
                }
            ]
        }
    ],
    "total_count": 1
}

...

POST /api/v4/retention_policies/:policy_id/teams to associate associates a team to a retention policy.

Request:

Code Block
{
    "team_id": "z7rxbxbfb7yxdydxzi8pestath"
}

...

DELETE /api/v4/retention_policies/:policy_id/teams/:team_id to remove removes a team from a retention policy.

...

Retention Policies Channels

POST /api/v4/retention_policies/:policy_id/channels to associate associates a channel to a retention policy.

Request:

Code Block
{
    "channel_id": "z7rxbxbfb7yxdydxzi8pestath"
}

...

DELETE /api/v4/retention_policies/:policy_id/channels/:channel_id to delete deletes a channel from a retention policy.

...

Database

RetentionPolicies table

...

Column name

Description

PolicyId

varchar, the RetentionPolicies.Id foreign key

TeamId

varchar, the Teams.Id foreign key

Mobile

No changes. Existing file-deleted and post-deleted UX covers all.