## Criando os serviços ##
Neste serviço, vamos processar as informações para pegar uma categoria, um conjunto de vídeos e
séries do continue assistindo ou do que estiver em destaque.
```ruby
class DashboardService
# No serviço, vamos processar as informações para pegar uma categoria, um conjunto de vídeos e séries do continue assistindo ou do que estiver em destaque.
# Neste método, é como se fosse o construtor, onde tudo será preparado
# Onde as variáveis são declaradas
def initialize(type, user)
@type = type
@user = user
end
def perform
# O método send é uma maneira para não precisar fazer um "if, else"
# Ex: ficaria assim ( if type == 'category' ), etc...
# Facilita a escrita
send("group_by_#{ @type }")
end
private
# Este método carrega todos os conteúdos filtrados por categoria
def group_by_category
# O .includes funciona para incluir tanto filmes como série dentro do resultado
categories = Category.includes(:movies, :series)
Api::V1::CategorySerializer.new(categories)
end
# Este método carrega todos os conteúdos que o usuário ainda não terminou de assistir
# É o "Continue assistindo"
def group_by_keep_watching
# O .include pega todos os filmes ou episódios, e filtra por todos que o end_date for vazio, ou seja
# pega todos os registros que o usuário ainda não terminou de assistir
players = Player.includes(:movie).where(end_date: nil, user: @user)
# Como a gente não quer serializar o player e sim o registro associado a ele que é o movie,
# então fazemos um mapeamento com o .map
Api::V1::MovieSerializer.new(players.map(&:movie))
end
# Este método carrega os conteúdos marcados como "favoritos"
def group_by_highlight
highlight = Movie.find_by(highlighted: true)
highlight ||= Serie.find_by(highlight: true)
Api::V1::WatchableSerializer.new(highlight, params: { user: @user })
end
end
```