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

Replace internal comments for valuations thread #1179

Merged
merged 26 commits into from
Jan 31, 2018

Conversation

bertocq
Copy link

@bertocq bertocq commented Jan 31, 2018

Where

This PR merges two consul PR's in one

Resulting in the replacement of the internal comments for the valuation comments

What & How & Screenshots & Test

Please check both PR individually, descriptions are HUGE and very explicit

Deployment

Remember to run bin/rake investments:internal_comments:migrate_to_thread RAILS_ENV=preproduction after deploying to PRE and bin/rake investments:internal_comments:migrate_to_thread RAILS_ENV=production to PRO environments!

Warnings

⚠️ READ DEPLOYMENT ⬆️

Why:

Budget Investment's valuators need to be able to comment on investments
without making those comments public. We need a way to clearly make a
distinction to avoid "leaking" internal valuation comments.

How:

Adding a boolean `valuation` attribute defaulted to false to the Comments
table, and index on it with concurrent algorithm as explained at
https://robots.thoughtbot.com/how-to-create-postgres-indexes-concurrently-in

The name `valuation` was chosen instead of `internal` because of the more
specific meaning as well as avoiding a collision with existing internal_comments
attribute on Budget::Investment model (soon to be deprecated & removed)
Why:

Internal valuation comments are only for admins and valuators,
not for the public view.

How:

Adding a `not_valuations` scope and use it at the `public_for_api` one
Why:

Budget Investments already has an existing `comments` relation that is
on use. We need to keep that relation unaltered after adding the
internal valuation comments, that means scoping the relation to only
public comments (non valuation ones) so existing code using it will
remain working as expected.

A new second relation will be needed to explicitly ask for valuation
comments only where needed, again scoping to valuation comments.

How:

Adding a second `valuations` relationship and filtering on both
with the new `valuation` flag from Comment model.
Why:

Budget Investment's valuators should be able to see internal valuation
comments thread at both show and edit views.

How:

At Valuation::BudgetInvestmentsController:
* Include CommentableActions to gain access to the entire feature, with
required resource_model & resource_name methods.
* Add the only possible order (oldest to newest)
* Load comments on both show & edit actions, passing `valuations` flag
to the CommentTree in order to only list those.

At CommentTree:
* Use `valuations` flag as instance variable to decide wich
comment threat to load: valuations (if relation exists) or comments.
How:

Using a local variable at partials to set a hidden true/false value for
`valuation` parameter on the comment creation form.

Allowing that new param at the comment controller and using it when
building a new Comment.
Why:

Only admins or valuators (for those investments they've assigned) can
create internal valuation comments on them.

How:

* Creating a new `comment_valuation` ability for admins and valuators in
the same manner the `valuate` ability works.

* Adding a validation at Comment model for those with `valuation` flag
active that checks if the author can make a valuation comment on the
commentable, as well as the respective active record error messages.
This will prevent comments from being created at a controller level as
well.

* Improving comment factory trait `valuation` to have an associated
investment, author that is a valuator and setting the valuator on the
valuators list of the investment
As Budget::Investment has two relationships over commentable polymorphic
relationship, the counter_cache is counting the sum of both comments and
valuations.

We don't show valuations count anywhere, only the (public) comments so
we just use comments.count in this case
Check that on both comment creation and comment reply the public facing
investment page doesn't show them
Its more descriptive in the contexts where its rendered
It's going to be used at valuation and admin panels
@bertocq bertocq force-pushed the replace_internal_comments_for_valuations branch from d4dc8a4 to c9e238a Compare January 31, 2018 16:10
@bertocq bertocq force-pushed the replace_internal_comments_for_valuations branch from b9802a6 to 2376b79 Compare January 31, 2018 16:20
@bertocq bertocq merged commit 2708c7d into master Jan 31, 2018
@bertocq bertocq deleted the replace_internal_comments_for_valuations branch January 31, 2018 18:17
@bertocq bertocq mentioned this pull request Jan 31, 2018
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

Successfully merging this pull request may close these issues.

1 participant