code-corps-api icon indicating copy to clipboard operation
code-corps-api copied to clipboard

Add counter cache to projects for open and closed conversations

Open joshsmith opened this issue 8 years ago • 2 comments

Problem

When a conversation record is created/updated, we need to update the open_conversations_count and closed _conversations_count counter cache columns on the projects table.

  • [ ] Add project_id to Conversation
    • [ ] change in Ember app to send the project_id up to the app
    • [ ] change in API
    • [ ] migrate data

We'll need to update the counts based on the following logic:

  • on insert
    • inc: [open_conversations_count: 1]
  • on update
    • status "open" => "closed"
      • inc: [closed_conversations_count: 1, open_conversations_count: -1]
  • on update
    • status "closed" => "open"
      • inc: [closed_conversations_count: -1, open_conversations_count: 1]

We'll add prepare_changes to increment one and decrement the other. See this example in Ecto

A useful post on this, as well: https://medium.com/@kaisersly/prepare-changes-and-counter-cache-abd93b8a20a

joshsmith avatar Dec 20 '17 02:12 joshsmith

tackling this

snewcomer avatar Dec 26 '17 20:12 snewcomer

@joshsmith Do you think the Conversation needs an explicit association to a project for this to work? I think it will if we need to cast the project_id.

snewcomer avatar Dec 26 '17 21:12 snewcomer