Skip to content

Commit

Permalink
Merge pull request #65 from ES2-UFPI/Gabriel
Browse files Browse the repository at this point in the history
Gabriel
  • Loading branch information
nyxoop2 authored Mar 28, 2023
2 parents a2b2ec0 + 02df49b commit dd3a35e
Show file tree
Hide file tree
Showing 48 changed files with 868 additions and 409 deletions.
1 change: 1 addition & 0 deletions Gemfile
Original file line number Diff line number Diff line change
Expand Up @@ -21,6 +21,7 @@ gem "importmap-rails"
# Hotwire's SPA-like page accelerator [https://turbo.hotwired.dev]
gem "turbo-rails"
gem 'byebug'
gem 'image_processing', '~> 1.2'

# Hotwire's modest JavaScript framework [https://stimulus.hotwired.dev]
gem "stimulus-rails"
Expand Down
8 changes: 8 additions & 0 deletions Gemfile.lock
Original file line number Diff line number Diff line change
Expand Up @@ -95,10 +95,14 @@ GEM
responders
warden (~> 1.2.3)
erubi (1.12.0)
ffi (1.15.5)
globalid (1.1.0)
activesupport (>= 5.0)
i18n (1.12.0)
concurrent-ruby (~> 1.0)
image_processing (1.12.2)
mini_magick (>= 4.9.5, < 5)
ruby-vips (>= 2.0.17, < 3)
importmap-rails (1.1.5)
actionpack (>= 6.0.0)
railties (>= 6.0.0)
Expand All @@ -116,6 +120,7 @@ GEM
marcel (1.0.2)
matrix (0.4.2)
method_source (1.0.0)
mini_magick (4.12.0)
mini_mime (1.1.2)
minitest (5.17.0)
msgpack (1.6.0)
Expand Down Expand Up @@ -177,6 +182,8 @@ GEM
actionpack (>= 5.0)
railties (>= 5.0)
rexml (3.2.5)
ruby-vips (2.1.4)
ffi (~> 1.12)
rubyzip (2.3.2)
selenium-webdriver (4.8.0)
rexml (~> 3.2, >= 3.2.5)
Expand Down Expand Up @@ -230,6 +237,7 @@ DEPENDENCIES
capybara
debug
devise (~> 4.8)
image_processing (~> 1.2)
importmap-rails
jbuilder
pg (~> 1.1)
Expand Down
17 changes: 17 additions & 0 deletions app/controllers/admin_controller.rb
Original file line number Diff line number Diff line change
@@ -0,0 +1,17 @@
class AdminController < ApplicationController
before_action :authenticate_user!
before_action :check_admin

def index
@games = Game.all
@platforms = Platform.all
@developers = Developer.all
@publishers = Publisher.all
@genres = Genre.all
end

def check_admin
redirect_to root_path, alert: "Acesso negado!" unless current_user.is_admin?
end

end
30 changes: 22 additions & 8 deletions app/controllers/games_controller.rb
Original file line number Diff line number Diff line change
@@ -1,8 +1,6 @@
require 'byebug'

class GamesController < ApplicationController
before_action :set_game, only: %i[ show edit update destroy ]
before_action :authenticate_user!, only: %i[favorite]
before_action :authenticate_user!, only: %i[favorite wishlist]

# GET /games or /games.json
def index
Expand Down Expand Up @@ -89,14 +87,30 @@ def favorite
redirect_to @game
end

def wishlist
@game = Game.find(params[:id])
if current_user.wishlist_games.include?(@game)
current_user.wishlist_games.delete(@game)
flash[:notice] = "Game removed from wishlist."
else
current_user.wishlist_games << @game
flash[:notice] = "Game added to wishlist."
end
redirect_to @game
end

def add_to_collection
@game = Game.find(params[:id])
@collection = current_user.collections.find(params[:collection_item][:collection_id])
@collection_item = CollectionItem.new(collection: @collection, game: @game)
if @collection_item.save
redirect_to @game, notice: 'Jogo adicionado à coleção.'
if @collection.collection_items.exists?(game_id: @game.id)
redirect_to @game, alert: 'Este jogo já está na coleção.'
else
redirect_to @game, alert: 'Falha ao adicionar jogo à coleção.'
@collection_item = CollectionItem.new(collection: @collection, game: @game)
if @collection_item.save
redirect_to @game, notice: 'Jogo adicionado à coleção.'
else
redirect_to @game, alert: 'Falha ao adicionar jogo à coleção.'
end
end
end

Expand All @@ -108,7 +122,7 @@ def set_game

# Only allow a list of trusted parameters through.
def game_params
params.require(:game).permit(:name_game, :description_game, :release, :rate_game, :franchise, :publisher_id, :developer_id, genre_ids: [], platform_ids: [])
params.require(:game).permit(:name_game, :description_game, :release, :rate_game, :franchise, :publisher_id, :developer_id, :icon, genre_ids: [], platform_ids: [])
end

end
13 changes: 9 additions & 4 deletions app/controllers/pages_controller.rb
Original file line number Diff line number Diff line change
@@ -1,4 +1,9 @@
class PagesController < ApplicationController
def home
end
end
class PagesController < ApplicationController

def home
if current_user
@recommended_games = current_user.recommended_games
end
end

end
72 changes: 37 additions & 35 deletions app/controllers/reviews_controller.rb
Original file line number Diff line number Diff line change
@@ -1,35 +1,37 @@
class ReviewsController < ApplicationController
before_action :authenticate_user!

def create
@game = Game.find(params[:game_id])
@review = @game.reviews.new(review_params)
@review.user = current_user
@review.posted_at = Time.now

if @review.save
@game.update_attribute(:rate_game, @game.calculate_average_rating)
redirect_to game_path(@game), notice: "Review enviada com sucesso!"
else
redirect_to game_path(@game), alert: "Não foi possível enviar a review."
end
end

def destroy
@review = Review.find(params[:id])

if @review.user_id == current_user.id
@review.destroy
redirect_to game_path(@review.game_id), notice: "Review excluída com sucesso!"
else
redirect_to game_path(@review.game_id), alert: "Você não tem permissão para excluir esta review."
end
end

private

def review_params
params.require(:review).permit(:content, :score, :user_id)
end

end
class ReviewsController < ApplicationController
before_action :authenticate_user!

def create
@game = Game.find(params[:game_id])
@review = @game.reviews.build(review_params)
@review.user = current_user
@review.posted_at = Time.current

if @review.save
@game.update(rate_game: @game.calculate_average_rating)
redirect_to game_path(@game), notice: "Review enviada com sucesso!"
else
redirect_to game_path(@game), alert: "Não foi possível enviar a review."
end
end

def destroy
@review = Review.find(params[:id])

if @review.user_id == current_user.id
@review.destroy
game = @review.game
game.update(rate_game: game.calculate_average_rating)
redirect_to game_path(game), notice: "Review excluída com sucesso!"
else
redirect_to game_path(@review.game_id), alert: "Você não tem permissão para excluir esta review."
end
end

private

def review_params
params.require(:review).permit(:content, :score, :user_id)
end

end
49 changes: 49 additions & 0 deletions app/controllers/user_games_controller.rb
Original file line number Diff line number Diff line change
@@ -0,0 +1,49 @@
class UserGamesController < ApplicationController
before_action :authenticate_user!

def index
@user = User.find(params[:user_id])
@user_games = @user.user_games
@played_games = @user_games.played
@in_progress_games = @user_games.playing
@unfinished = @user_games.unfinished
end

def edit
@user = current_user
@user_games = @user.user_games
@played_games = @user_games.played
@in_progress_games = @user_games.playing
@unfinished = @user_games.unfinished
end

def create
@game = Game.find(params[:game_id])
@user_game = current_user.user_games.build(user_game_params)
@user_game.game = @game

if @user_game.save
redirect_to @game, notice: "Jogo adicionado à biblioteca."
else
render 'games/show'
end
end

def update
user_id = params[:user_id]
user_games_params = params[:user_game]

user_games_params.each do |id, attrs|
user_game = UserGame.find(id)
user_game.update(status: attrs[:status])
end

redirect_to user_library_path(user_id)
end

private

def user_game_params
params.require(:user_game).permit(:status)
end
end
2 changes: 1 addition & 1 deletion app/controllers/users_controller.rb
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,7 @@ def show

def update
if current_user.update(user_params)
redirect_to user_path(current_user), notice: 'Description atualizada com sucesso.'
redirect_to user_path(current_user), notice: 'Descrição atualizada com sucesso.'
else
render :edit
end
Expand Down
2 changes: 2 additions & 0 deletions app/helpers/admin_helper.rb
Original file line number Diff line number Diff line change
@@ -0,0 +1,2 @@
module AdminHelper
end
2 changes: 2 additions & 0 deletions app/helpers/user_games_helper.rb
Original file line number Diff line number Diff line change
@@ -0,0 +1,2 @@
module UserGamesHelper
end
2 changes: 2 additions & 0 deletions app/helpers/wishlist_helper.rb
Original file line number Diff line number Diff line change
@@ -0,0 +1,2 @@
module WishlistHelper
end
7 changes: 6 additions & 1 deletion app/models/game.rb
Original file line number Diff line number Diff line change
@@ -1,7 +1,8 @@
class Game < ApplicationRecord
validates :name_game, :description_game, presence: true
validates :rate_game, numericality: { greater_than_or_equal_to: 0.0, less_than_or_equal_to: 10.0 }

has_one_attached :icon

belongs_to :publisher
has_and_belongs_to_many :genres, join_table: :game_genres
accepts_nested_attributes_for :genres
Expand All @@ -15,6 +16,10 @@ class Game < ApplicationRecord
has_many :favorited_by, through: :favorites, source: :user
has_many :collection_items, dependent: :destroy
has_many :collections, through: :collection_items
has_many :wishlists, dependent: :destroy
has_many :wishlisted_by, through: :wishlists, source: :user
has_many :user_games, dependent: :destroy
has_many :users, through: :user_games

def calculate_average_rating
reviews.average(:score).to_f.round(1)
Expand Down
16 changes: 16 additions & 0 deletions app/models/user.rb
Original file line number Diff line number Diff line change
Expand Up @@ -7,8 +7,13 @@ class User < ApplicationRecord
has_many :reviews
has_many :favorites, dependent: :destroy
has_many :favorite_games, through: :favorites, source: :game
has_many :wishlists, dependent: :destroy
has_many :wishlist_games, through: :wishlists, source: :game
has_many :user_games, dependent: :destroy
has_many :games, through: :user_games
devise :database_authenticatable, :registerable,
:recoverable, :rememberable, :validatable
enum role: [:user, :admin]

has_many :friendships, dependent: :destroy
has_many :friends, through: :friendships
Expand All @@ -21,5 +26,16 @@ class User < ApplicationRecord
def friendship_with(other_user)
Friendship.find_by(user: self, friend: other_user) || Friendship.find_by(user: other_user, friend: self)
end

def recommended_games
friend_ids = friendships.pluck(:friend_id)
friend_favorite_game_ids = Favorite.where(user_id: friend_ids).pluck(:game_id)
excluded_game_ids = game_ids + favorite_games.pluck(:id)
Game.where(id: friend_favorite_game_ids).where.not(id: excluded_game_ids + user_games.pluck(:game_id))
end

def is_admin?
self.admin
end

end
7 changes: 7 additions & 0 deletions app/models/user_game.rb
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
class UserGame < ApplicationRecord
validates :user, :game, presence: true
validates :game_id, uniqueness: { scope: :user_id }
belongs_to :user
belongs_to :game
enum status: [:played, :playing, :unfinished]
end
4 changes: 4 additions & 0 deletions app/models/wishlist.rb
Original file line number Diff line number Diff line change
@@ -0,0 +1,4 @@
class Wishlist < ApplicationRecord
belongs_to :user
belongs_to :game
end
Loading

0 comments on commit dd3a35e

Please sign in to comment.