Skip to content

Commit

Permalink
Merge branch 'main' into feat/add-user-identification_as_anonymous
Browse files Browse the repository at this point in the history
  • Loading branch information
joaoCasteloBranco authored Feb 10, 2025
2 parents af83895 + 142b195 commit c1dce0f
Show file tree
Hide file tree
Showing 23 changed files with 167 additions and 65 deletions.
2 changes: 1 addition & 1 deletion app/controllers/api/v1/feedback_answers_controller.rb
Original file line number Diff line number Diff line change
Expand Up @@ -14,7 +14,7 @@ def create
private

def feedback_answers_params
params.permit(:name, :email, :comment)
params.require(:feedback_answer).permit(:name, :email, :comment)
end

def set_and_check_item_feedback
Expand Down
10 changes: 9 additions & 1 deletion app/controllers/api/v1/item_feedbacks_controller.rb
Original file line number Diff line number Diff line change
Expand Up @@ -5,11 +5,19 @@ def index
item_feedbacks = @item_feedbacks.map { |item_feedback| { id: item_feedback.id, title: item_feedback.title,
comment: item_feedback.comment, mark: item_feedback.mark,
user: item_feedback.user_identification,
schedule_item_id: item_feedback.schedule_item_id } }
schedule_item_id: item_feedback.schedule_item_id,
feedback_answers: feedback_answers(item_feedback) } }

render status: :ok, json: { item_feedbacks: item_feedbacks }
else
render status: :not_found, json: { schedule_item_id: params[:schedule_item_id], error: "Feedback items not found" }
end
end

private

def feedback_answers(item_feedback)
feedback_answers = FeedbackAnswer.where(item_feedback: item_feedback)
feedback_answers.as_json
end
end
1 change: 0 additions & 1 deletion app/controllers/dashboard_controller.rb
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,6 @@ class DashboardController < ApplicationController
def index
event_ids = current_user.tickets.where(status_confirmed: true).map(&:event_id)
@posts = Post.where(event_id: event_ids).order(created_at: :desc).limit(10)

if @posts.any?
@events = Event.request_events_posts(event_ids).select { |event| event_ids.include?(event.event_id) if event.present? }
end
Expand Down
2 changes: 1 addition & 1 deletion app/controllers/item_feedbacks_controller.rb
Original file line number Diff line number Diff line change
Expand Up @@ -24,7 +24,7 @@ def create
end

def show
@feedback_answer = FeedbackAnswer.find_by(item_feedback: @item_feedback.id)
@feedback_answer = FeedbackAnswer.find_by(item_feedback: @item_feedback)
end

private
Expand Down
6 changes: 6 additions & 0 deletions app/helpers/application_helper.rb
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,12 @@ def page_title(text)
end
end

def page_title_dash(text)
content_tag(:h1, class: "text-3xl font-extrabold text-center text-withe mt-8 mb-6") do
text
end
end

def page_sub_title(text)
content_tag(:h2, class: "ms-2 font-semibold text-4xl mb-6 text-violet-900 dark:text-violet-900 text-center") do
text
Expand Down
1 change: 1 addition & 0 deletions app/models/item_feedback.rb
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,7 @@ class ItemFeedback < ApplicationRecord
validates :title, :comment, :mark, presence: true
validates :comment, length: { maximum: 150 }
validates :mark, inclusion: { in: [ 1, 2, 3, 4, 5 ] }
has_many :feedback_answer

def schedule_item
event = Event.request_event_by_id(self.event_id)
Expand Down
2 changes: 1 addition & 1 deletion app/views/announcements/_announcement_list_item.html.erb
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
<div class="card-announcement-<%=announcement.announcement_id%>" role="alert">
<div class="card-announcement ca-<%=announcement.announcement_id%>" role="alert">
<div class="flex items-center">
<svg class="shrink-0 w-4 h-4 me-2 dark:text-gray-300" aria-hidden="true" xmlns="http://www.w3.org/2000/svg" fill="currentColor" viewBox="0 0 20 20">
<path d="M10 .5a9.5 9.5 0 1 0 9.5 9.5A9.51 9.51 0 0 0 10 .5ZM9.5 4a1.5 1.5 0 1 1 0 3 1.5 1.5 0 0 1 0-3ZM12 15H8a1 1 0 0 1 0-2h1v-3H8a1 1 0 0 1 0-2h2a1 1 0 0 1 1 1v4h1a1 1 0 0 1 0 2Z"/>
Expand Down
13 changes: 11 additions & 2 deletions app/views/dashboard/index.html.erb
Original file line number Diff line number Diff line change
@@ -1,13 +1,22 @@
<div class="bg-gradient-to-r from-blue-500 to-indigo-600 text-white py-6 px-8 rounded-lg shadow-md mb-6">
<%= page_title_dash(t('.dashboard'))%>
<p class="text-lg mt-2 opacity-90"><%= t('.dashboard_subtitle', default: 'Acompanhe os últimos posts e novidades dos seus eventos.') %></p>
</div>

<ul class="space-y-4">
<% if @posts.any? %>
<% @posts.each do |post| %>
<li class="bg-gradient-to-r from-white to-gray-100 shadow-lg rounded-xl transition transform hover:scale-105 hover:shadow-xl p-6">
<li class="border-l-4 border-blue-500 bg-white shadow-lg rounded-xl transition transform hover:scale-105 hover:shadow-xl p-6">
<%= render post %>
</li>
<% end %>
<% else %>
<div class="text-center py-10 bg-white shadow-md rounded-lg">
<div class="text-center py-10 bg-white shadow-md rounded-lg flex flex-col items-center">
<svg class="w-16 h-16 text-gray-400 mb-4" xmlns="http://www.w3.org/2000/svg" fill="none" viewBox="0 0 24 24" stroke="currentColor">
<path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M14.5 9.5l-2.5 2.5m0 0l-2.5-2.5m2.5 2.5V6m5 12H7a2 2 0 01-2-2V8a2 2 0 012-2h10a2 2 0 012 2v8a2 2 0 01-2 2z" />
</svg>
<h3 class="text-xl font-semibold text-gray-900"><%= t('.no_posts')%></h3>
<p class="text-gray-600 mt-2"><%= t('.participate')%></p>
<div class="mt-4">
<%= link_to t('.join_now'), events_path, class: "bg-blue-600 text-white px-4 py-2 rounded-md shadow-md hover:bg-blue-700 transition" %>
</div>
Expand Down
3 changes: 3 additions & 0 deletions app/views/feedbacks/index.html.erb
Original file line number Diff line number Diff line change
@@ -1,3 +1,6 @@
<div class='ml-6 mt-9'>
<%= button_to_back %>
</div>
<%= page_title(t('.title')) %>

<% @feedbacks.each do |feedback| %>
Expand Down
37 changes: 26 additions & 11 deletions app/views/my_events/index.html.erb
Original file line number Diff line number Diff line change
@@ -1,18 +1,33 @@
<%=page_title(t('.title'))%>

<% if @event_ids.empty? %>
<p class="text-lg text-center text-gray-500 dark:text-black-300 mt-6"><%= t('.no_tickets') %></p>
<div class="flex justify-center items-center h-64">
<p class="text-xl text-center text-gray-500 dark:text-gray-300">
<%= t('.no_tickets') %>
</p>
</div>
<% else %>
<p class="text-lg text-center text-gray-500 dark:text-black-300 mt-6"><%= t('.no_server') if @my_events.empty? %></p>

<% @my_events.each do |event| %>
<div id="event_id_<%=event.event_id%>" class="bg-white shadow-lg rounded-lg overflow-hidden hover:shadow-xl transition">
<div class="container mx-auto px-4">
<div class="grid grid-cols-1 sm:grid-cols-2 lg:grid-cols-3 gap-6">
<% @my_events.each do |event| %>
<div id="event_id_<%=event.event_id%>" class="bg-white shadow-lg rounded-lg overflow-hidden hover:shadow-xl transition transform hover:scale-105">
<%= render '/events/event', event: event %>
<%= link_to t('.event_details'), my_event_path(id: event.event_id), class: 'mt-4 w-full bg-blue-600 text-white py-2 rounded-lg hover:bg-blue-700 transition block p-6 text-center' %>
<% if event.end_date < Date.today %>
<%= link_to t('.add_feedback'), new_my_event_feedback_path(event.event_id), class: 'mt-4 w-full bg-blue-600 text-white py-2 rounded-lg hover:bg-blue-700 transition block p-6 text-center' %>
<%= link_to t('.see_feedbacks'), my_event_feedbacks_path(event.event_id), class: 'mt-4 w-full bg-blue-600 text-white py-2 rounded-lg hover:bg-blue-700 transition block p-6 text-center' %>
<% end %>
</div>
<% end %>

<div class="p-4">
<%= link_to t('.event_details'), my_event_path(id: event.event_id),
class: 'block w-full bg-blue-600 text-white py-2 rounded-lg hover:bg-blue-700 transition text-center font-medium' %>

<% if event.end_date < Date.today %>
<%= link_to t('.add_feedback'), new_my_event_feedback_path(event.event_id),
class: 'block w-full mt-2 bg-green-600 text-white py-2 rounded-lg hover:bg-green-700 transition text-center font-medium' %>

<%= link_to t('.see_feedbacks'), my_event_feedbacks_path(event.event_id),
class: 'block w-full mt-2 bg-gray-600 text-white py-2 rounded-lg hover:bg-gray-700 transition text-center font-medium' %>
<% end %>
</div>
</div>
<% end %>
</div>
</div>
<% end %>
18 changes: 11 additions & 7 deletions app/views/posts/_post.html.erb
Original file line number Diff line number Diff line change
@@ -1,10 +1,14 @@
<%= link_to event_post_path(event_id: post.event_id, id: post.id), class: "block" do %>
<h3 class="text-2xl font-bold text-gray-900"><%= post.title %></h3>
<p class="text-gray-600 text-sm mt-2">
<%= t('.created_by') %> <span class="font-medium text-gray-800"><%= post.user.name %></span> <%= t('.in') %>
<span class="text-gray-500"><%= l(post.created_at, format: :short) %></span>
<%= link_to event_post_path(event_id: post.event_id, id: post.id), class: "block hover:bg-gray-100 p-4 rounded-lg transition" do %>
<h3 class="text-2xl font-bold text-gray-900 mb-1">
📢 <%= post.title %>
</h3>
<p class="text-gray-600 text-sm flex items-center">
👤 <span class="ml-1 font-medium text-gray-800"><%= post.user.name %></span> &bull;
📅 <span class="ml-1 text-gray-500"><%= l(post.created_at, format: :short) %></span>
</p>
<% if request.path == "/dashboard" %>
<p class="mt-3 text-gray-700 text-sm"> <%= I18n.t('event.one') %>: <span class="font-semibold"><%= @events.find { |event| event.event_id == post.event_id}.name if @events.any? %></span></p>
<p class="mt-3 text-gray-700 text-sm"> 🎉 <%= I18n.t('event.one') %>:
<span class="font-semibold"><%= @events.find { |event| event.event_id == post.event_id}.name if @events.any? %></span>
</p>
<% end %>
<% end %>
<% end %>
25 changes: 15 additions & 10 deletions app/views/shared/_feedback_form.html.erb
Original file line number Diff line number Diff line change
@@ -1,7 +1,8 @@
<div class='flex item-center justify-center'>
<div class="relative p-4 flex flex-col item-center justify-center shadow-sm border border-purple-900 w-100 rounded-lg my-6">
<div class="relative flex flex-col rounded-xl bg-transparent">
<%= form_with model: model, method: 'post', url: url, class: 'mt-8 mb-2 w-80 max-w-screen-lg sm:w-96' do |f| %>
<%= page_title(t('.form_title')) %>
<%= form_with model: model, method: 'post', url: url, class: ' w-80 max-w-screen-lg sm:w-96' do |f| %>
<div class="mb-1 flex flex-col gap-6">
<div class="w-full">
<%=f.label :title, class: 'form-label' %>
Expand All @@ -15,21 +16,25 @@
<%=f.label :mark, class: 'form-label' %>
<%= render 'shared/rating', name: model.is_a?(ItemFeedback) ? "item_feedback" : "feedback" %>
</div>
<label class="flex items-center cursor-pointer relative" for="check-2">
<%= f.check_box :public, class: "peer h-5 w-5 cursor-pointer transition-all appearance-none rounded shadow hover:shadow-md border border-purple-900 checked:bg-slate-800 checked:border-slate-800", id: "check-2" %>
<span class="absolute text-white opacity-0 pointer-events-none peer-checked:opacity-100 top-1/2 left-1/2 transform -translate-x-1/2 -translate-y-1/2">
<svg xmlns="http://www.w3.org/2000/svg" class="h-3.5 w-3.5" viewBox="0 0 20 20" fill="currentColor" stroke="currentColor" stroke-width="1">
<div class="inline-flex items-center mt-2">
<%= f.hidden_field :public, value: "0" %>
<label class="flex items-center cursor-pointer relative" for="check-2">
<%= f.check_box :public, class: "peer h-5 w-5 cursor-pointer transition-all appearance-none rounded shadow hover:shadow-md border border-purple-900 checked:bg-slate-800 checked:border-slate-800", id: "check-2", value: "1" %>

<span class="absolute text-white opacity-0 pointer-events-none peer-checked:opacity-100 top-1/2 left-1/2 transform -translate-x-1/2 -translate-y-1/2">
<svg xmlns="http://www.w3.org/2000/svg" class="h-3.5 w-3.5" viewBox="0 0 20 20" fill="currentColor" stroke="currentColor" stroke-width="1">
<path fill-rule="evenodd" d="M16.707 5.293a1 1 0 010 1.414l-8 8a1 1 0 01-1.414 0l-4-4a1 1 0 011.414-1.414L8 12.586l7.293-7.293a1 1 0 011.414 0z" clip-rule="evenodd"></path>
</svg>
</span>
</label>
<%= f.label :public, class: "cursor-pointer ml-2 text-slate-600 text-sm", for: "check-2" %>
</svg>
</span>
</label>
<%= f.label :public, class: "cursor-pointer ml-2 text-slate-600 text-sm", for: "check-2" %>
</div>
<div>
<%=f.submit t('.save'), class: 'btn-confirm' %>
</div>
</div>
<% end %>
<div class="actions my-5 flex">
<div class="actions mt-5 flex">
<%= form_link_to_back %>
</div>
</div>
Expand Down
6 changes: 4 additions & 2 deletions config/locales/views/dashboard/en.yml
Original file line number Diff line number Diff line change
@@ -1,5 +1,7 @@
en:
dashboard:
index:
no_posts: 🚀 Explore incredible events and be part of the experience!
join_now: Join Now
no_posts: There are no publications yet.
participate: 🚀 Participate in events and see new content!
join_now: Participate Now
dashboard: Dashboard
6 changes: 4 additions & 2 deletions config/locales/views/dashboard/pt-BR.yml
Original file line number Diff line number Diff line change
@@ -1,5 +1,7 @@
pt-BR:
dashboard:
index:
no_posts: 🚀 Explore eventos incríveis e faça parte da experiência!
join_now: Participar Agora
no_posts: Ainda não há publicações.
participate: 🚀 Participe de eventos e veja novos conteúdos!
join_now: Participar Agora
dashboard: Dashboard
5 changes: 5 additions & 0 deletions config/locales/views/shared/feedback_form/en.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
en:
shared:
feedback_form:
save: Add Feedback
form_title: Review
6 changes: 6 additions & 0 deletions config/locales/views/shared/feedback_form/pt-BR.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
pt-BR:
shared:
feedback_form:
save: Adicionar Feedback
form_title: Avaliação

2 changes: 0 additions & 2 deletions config/locales/views/shared/nav/en.yml
Original file line number Diff line number Diff line change
Expand Up @@ -9,5 +9,3 @@ en:
my_events: My Events
my_profile: My Profile
hello: "Hello, %{name}"
feedback_form:
save: Add Feedback
2 changes: 0 additions & 2 deletions config/locales/views/shared/nav/pt-BR.yml
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,4 @@ pt-BR:
my_events: Meus Eventos
my_profile: Meu Perfil
hello: "Olá, %{name}"
feedback_form:
save: Adicionar Feedback

Original file line number Diff line number Diff line change
Expand Up @@ -26,10 +26,12 @@
user: user, schedule_item_id: schedule_item.schedule_item_id, public: true)

post "/api/v1/item_feedbacks/#{item_feedback.id}/feedback_answers", params: {
name: 'Nome do Participante Teste',
email: '[email protected]',
comment: 'Comentário Teste'
}
feedback_answer: {
name: 'Nome do Participante Teste',
email: '[email protected]',
comment: 'Comentário Teste'
}
}

expect(response).to have_http_status 201
expect(response.content_type).to include 'application/json'
Expand Down Expand Up @@ -65,10 +67,12 @@
user: user, schedule_item_id: schedule_item.schedule_item_id, public: true)

post "/api/v1/item_feedbacks/#{item_feedback.id}/feedback_answers", params: {
name: '',
feedback_answer: {
name: '',
email: '',
comment: ''
}
}

expect(response).to have_http_status 406
expect(response.content_type).to include 'application/json'
Expand Down Expand Up @@ -98,10 +102,12 @@
login_as user

post "/api/v1/item_feedbacks/#{item_feedback_id}/feedback_answers", params: {
name: 'Nome do Participante Teste',
email: '[email protected]',
comment: 'Comentário Teste'
}
feedback_answer: {
name: 'Nome do Participante Teste',
email: '[email protected]',
comment: 'Comentário Teste'
}
}

expect(response).to have_http_status 404
expect(response.content_type).to include 'application/json'
Expand Down Expand Up @@ -134,10 +140,12 @@
allow(FeedbackAnswer).to receive(:new).and_raise(ActiveRecord::ActiveRecordError)

post "/api/v1/item_feedbacks/#{item_feedback.id}/feedback_answers", params: {
name: 'Nome do Participante Teste',
email: '[email protected]',
comment: 'Comentário Teste'
}
feedback_answer: {
name: 'Nome do Participante Teste',
email: '[email protected]',
comment: 'Comentário Teste'
}
}

expect(response).to have_http_status 500
expect(response.content_type).to include 'application/json'
Expand Down
27 changes: 27 additions & 0 deletions spec/requests/apis/item_feedbacks/item_feedback_api_spec.rb
Original file line number Diff line number Diff line change
Expand Up @@ -47,4 +47,31 @@
expect(response.status).to eq 500
end
end

it 'e mostra respostas a um feedback' do
user = create(:user, name: 'David', last_name: 'Martinez')
item_feedback = create(:item_feedback, title: 'Título do feedback de item', comment: 'Comentário Padrão de item', mark: 4, event_id: '1', schedule_item_id: '1', public: true, user: user)
post "/api/v1/item_feedbacks/#{item_feedback.id}/feedback_answers", params: {
feedback_answer: {
name: 'Nome do Participante Teste',
email: '[email protected]',
comment: 'Comentário Teste'
}
}

get "/api/v1/schedule_items/1/item_feedbacks"

expect(response.status).to eq 200
expect(response.content_type).to include 'application/json'
json_response = JSON.parse(response.body)
expect(json_response["item_feedbacks"][0]["id"]).to eq 1
expect(json_response["item_feedbacks"][0]["schedule_item_id"]).to eq '1'
expect(json_response["item_feedbacks"][0]["title"]).to eq 'Título do feedback de item'
expect(json_response["item_feedbacks"][0]["comment"]).to eq 'Comentário Padrão de item'
expect(json_response["item_feedbacks"][0]["mark"]).to eq 4
expect(json_response["item_feedbacks"][0]["user"]).to eq 'David Martinez'
expect(json_response["item_feedbacks"][0]["feedback_answers"][0]["name"]).to eq 'Nome do Participante Teste'
expect(json_response["item_feedbacks"][0]["feedback_answers"][0]["email"]).to eq '[email protected]'
expect(json_response["item_feedbacks"][0]["feedback_answers"][0]["comment"]).to eq 'Comentário Teste'
end
end
Original file line number Diff line number Diff line change
Expand Up @@ -22,7 +22,7 @@
click_on 'Meus Eventos'
end
click_on 'Acessar Conteúdo do Evento'
within(".card-announcement-#{announcement_two.announcement_id}") do
within(".ca-#{announcement_two.announcement_id}") do
click_on 'Ver Comunicado'
end

Expand Down Expand Up @@ -51,7 +51,7 @@
click_on 'Meus Eventos'
end
click_on 'Acessar Conteúdo do Evento'
within(".card-announcement-#{announcement_two.announcement_id}") do
within(".ca-#{announcement_two.announcement_id}") do
click_on 'Ver Comunicado'
end
click_on 'Voltar'
Expand Down
Loading

0 comments on commit c1dce0f

Please sign in to comment.