Controller do raportów / podsumowań

Mam aplikację dla klienta. Oprócz normalnych funkcjonalności potrzebne są też dla managerów raporty / podsumowania. I tu mam zagwozdkę jak to zrobić, żeby to było po rails-owemu.

Jak potrzebny był raport to dodałem do kontrolera parametr np ?summary, który jeśli był w adresie to kontroler wybierał odpowiednie działanie. I np. zamiast listy rzeczy przekazywał do widoku pogrupowane rzeczy. W widoku też trzeba było zmienić sposób wyświetlania w zależności od parametru. To generalnie działało, ale problem jest, że ilość raportów wzrasta i zaczyna być niezły chaos. Po za tym “trochę” komplikuje się sprawa dostępu do raportów dla pozostałych użytkowników.

Np. Aplikacja księgarnia.
Jest Użytkownik, Autor, Książka.

  1. Chciałbym raport ile dany użytkownik kupił książek
  2. Jaki Autor się najlepiej się sprzedawał
  3. Jaki Autor się najlepiej się sprzedawał z podziałem na rodzaj abonamentu Użytkownika (premium / normalna)
  4. Sprzedaż Książek wg Autora
  5. Sprzedaż Książek wg Użytkownika

I teraz pytanie czy lepiej jest:

  1. Zostawić tak jak jest? (parametry w adresie)
  2. Stworzyć osobne kontrolery dla każdego z raportów
  3. Jakieś inne rozwiązanie na które nie wpadłem?

A zrobić osobny namespace w postaci reports i tam zrobić osobno choćby i sto różnych kontrolerów/akcji dla poszczególnych raportów? np.:

reports/best_selling_books
reports/best_selling_books/week/
reports/best_selling_books/month/
reports/best_selling_books/by_author
reports/number_of_books_bought_by_user (plus przekazanie w paramsach id usera)

ew. zrobienie ogólnego reports/best_selling_books i przekazywanie w paramsach okresu czasu, autora itp. (w razie braku danej wartości w paramsach ustawianie wartości domyślnej np. od początku istnienia firmy i każdy autor)

Nie znam całej sytuacji, więc warto się dobrze zastanowić - może ktoś podrzuci inne/lepsze rozwiązanie.

Osobne akcje/widoki w tym wypadku powinny w miarę proste, część będzie można użyć na zasadzie kopiuj/wklej i tylko dostosować do konkretnej sytuacji. Mi osobiście bardziej się podoba zrobienie wielu prostych akcji zamiast się ‘zaifować’ na podstawie paramsów, a potem dostosowywać kolejnymi ifami widoki.

A odnośnie dostępu dla menedżerów, to można chociażby użytkownikom dać dodatkową rolę manager i zrobić jakiś reports controller z before action authorize manager, po którym będą dziedziczyły poszczególne kontrolery.

No właśnie tak wydaje mi się najbardziej logiczne. Tyle że nie mam dużego doświadczenia i myślałem, że może są jakieś funkcjonalności, których jeszcze nie odkryłem :wink: