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

SCRUM-10 (Dashboard) #37

Merged
merged 5 commits into from
Oct 5, 2024
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
99 changes: 21 additions & 78 deletions README.md
Original file line number Diff line number Diff line change
@@ -1,89 +1,32 @@
# Important Links
- **Deployed App:** https://csce606arcade-12ac8dd4dc24.herokuapp.com/users
- **Code Climate Report:** https://codeclimate.com/github/tamu-edu-students/csce600-arcade
- **Project Management Page:** https://tamu-team-pyr0027e.atlassian.net/jira/software/projects/SCRUM/boards/1
# ARCADE

Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

thank you for doing this! I completely missed that part of the assignment and read it as put it in your read me

## Project Overview

The development of Arcade is driven by the vision of our primary customer, Prof. Ritchey. Prof. Ritchey was frustrated with the monetization of platforms like the New York Times games, which require users to log in and pay for access. These barriers not only make the experience cumbersome but also limit accessibility for many users.

In response, we are currently developing Arcade, an application that will offer a collection of games similar to those on the New York Times platform, but with free access and no mandatory login requirements. Users will be able to enjoy these games without creating an account or paying any fees, ensuring a seamless and unrestricted experience.

Arcade will also include an optional login feature to enhance the user experience. Logged-in users will have the ability to save their progress and view rankings across various games. However, the login remains optional, allowing users to enjoy the platform without any obligations if they prefer.

This project aligns with Prof. Ritchey’s goal of creating a more accessible, user-friendly gaming experience, free from the frustrations caused by monetized platforms.

# Team Working Agreement
## Team Information
- **Client:** Dr. Ritchey
- **Client Meetings:** Every Thursday, 4 PM - 5 PM, via Zoom
- **Developers:** Kanishk Chhabra, Nandinii Yeleswarapu, Tejas Singhal, Krishna Calindi, Junchao, Ze Sheng, Antonio

## Sprint - 1
- **Product Owner:** Tejas Singhal
- **Scrum Master:** Nandinii Yeleswarapu
## Purpose
This agreement outlines the team's shared understanding of collaboration, communication, and delivery to ensure we meet our goals and provide value effectively. It reflects our commitment to the Scrum values: **Commitment**, **Focus**, **Openness**, **Respect**, and **Courage**.
## Key Values
### 1. **Commitment**
- Each team member is responsible for completing their assigned story points within the sprint.
- Team members ensure transparency by updating their tasks daily in the project management tool.
- Everyone commits to attending daily stand-ups, sprint planning, reviews, and retrospectives on time.
### 2. **Focus**
- We will concentrate on sprint goals, ensuring our efforts contribute directly to the current sprint backlog.
- During core collaboration hours, team members should minimize distractions and focus on assigned tasks.
### 3. **Openness**
- Progress will be shared openly during stand-ups, especially blockers that require team support.
- Transparent communication is encouraged, whether it's about issues, delays, or new ideas.
- All feedback is valuable. We will create an environment where all ideas and perspectives are heard and respected.
### 4. **Respect**
- Respect each team member's time by being punctual for meetings and providing timely updates on tasks.
- Ensure all voices are heard during meetings, promoting inclusivity and collaboration.
### 5. **Courage**
- Team members are encouraged to take on challenging tasks and continue learning.
- We will embrace constructive criticism and use it to improve our processes and outputs.
## Working Hours
- **Core Hours:** 4 PM - 10 PM (team members are expected to be available for collaboration).
- **Flexible Hours:** Outside core hours, team members may work at their convenience but must ensure sprint commitments are met.
## Communication Guidelines
- **Primary Tool:** Slack (for daily updates, queries, and informal communication).
- **Project Management:** Tasks and progress will be tracked using Jira.
- **Email:** Used for formal communication with external stakeholders (e.g., client).
- **Video Conferencing:** Slack Huddle for team meetings and daily stand-ups, Zoom for client meetings.
### Communication Expectations:
- **Slack:** Respond within 2 hours during core working hours.
- **Email:** Respond within 1 business day.
- **Stand-ups:** Attend daily at 10:00 AM CST, sharing progress, blockers, and plans for the day.
## Meetings
- **Daily Stand-up:** Focus on what was completed, upcoming tasks, and any blockers.
- **Client Meeting:** Thursdays, 4 PM - 5 PM via Zoom. Prepare key updates and questions in advance.
- **Sprint Review & Retrospective:** End of each sprint, typically on Fridays, 3 PM - 6 PM. Review what went well, and what didn't, and identify action points for improvement.
## Definition of Completion
- All tasks must meet the acceptance criteria outlined in the user story.
- Code must be reviewed and merged into the main branch, with relevant documentation updated.
- Feature deployment must be tested in the staging environment before presenting to the client.
## Tools and Resources
- **Code Repository:** GitHub (all code changes should follow GitFlow and include peer code reviews).
- **Deployed Application:** Regular updates are required to ensure the app reflects the current progress.
- **Project Management Tool:** Jira is used to track tasks, story points, and overall progress.
## Collaboration Practices
- Pair programming or team collaboration is encouraged for complex tasks.
- All features should undergo a review process before being merged into the codebase.
- If you encounter a blocker, communicate it early and seek assistance from team members or the Scrum Master.
## Risk and Escalation
- For unexpected risks or delays, promptly communicate with the Scrum Master or Product Owner.
- If a risk may affect delivery, it will be discussed during the next stand-up or relevant meeting.
## Client Feedback Process
- Feedback from the client, Dr. Ritchey, will be reviewed and incorporated into our sprint planning.
- Action points from the client meeting will be documented and shared with the team via Jira or Slack.
## SDLC for this project
1. `main` is the top level branch for this project and maintains the latest fully tested working
copy of the codespace and should be deployable at any time.
2. When picking up a new ticket, checkout a new branch off of `main` and commit all your code to that branch
a. When the code is ready, **ensure all acceptance and unit tests are passing for the whole project**,
pull the latest version of `main`, merge `main` into your feature branch, resolve any merge conflicts,
ensure build is successful then push your code to github and create a pull request.
b. Assign a developer in the team to review the code
c. Once reviewed, merge your feature branch back to `main` and delete your feature branch.
3. Everytime code is merged to the `main` branch, Acceptance tests and Unit tests will be run on
on `main` to ensure we still have a woring copy of the code. If the tests fail, we fix the defects
before any new feature work is picked up. If the tests run succesfully, we deploy `main` to Heroku.
4. When we are ready to deploy, we merge `main` into `prod` and CICD takes care of the deployment.
## Revisiting the Agreement
This working agreement is a living document. The team will review and adjust it at the start of each sprint during Sprint Planning to ensure it reflects our evolving needs.
---
Team Arcade is committed to upholding this agreement and collaborating effectively to deliver value to our client, Dr. Ritchey.
- [Sprint 1 Plan](./documentation)

# Important Links
- [Team Working Agreement](TEAM_WORK_AGREEMENT.md)
- **Deployed App:** https://csce606arcade-12ac8dd4dc24.herokuapp.com/users
- **Code Climate Report:** https://codeclimate.com/github/tamu-edu-students/csce600-arcade
- **Project Management Page:** https://tamu-team-pyr0027e.atlassian.net/jira/software/projects/SCRUM/boards/1

## Software dependencies and version
**Ruby** - 3.3.4
**Rails** - 7.2.1
**Ruby** - 3.3.4 \
**Rails** - 7.2.1 \
**Rack** - 3.1.7
80 changes: 80 additions & 0 deletions TEAM_WORK_AGREEMENT.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,80 @@

# Team Working Agreement
## Team Information
- **Client:** Dr. Ritchey
- **Client Meetings:** Every Thursday, 4 PM - 5 PM, via Zoom
- **Developers:** Kanishk Chhabra, Nandinii Yeleswarapu, Tejas Singhal, Krishna Calindi, Junchao, Ze Sheng, Antonio
## Sprint - 1
- **Product Owner:** Tejas Singhal
- **Scrum Master:** Nandinii Yeleswarapu
## Purpose
This agreement outlines the team's shared understanding of collaboration, communication, and delivery to ensure we meet our goals and provide value effectively. It reflects our commitment to the Scrum values: **Commitment**, **Focus**, **Openness**, **Respect**, and **Courage**.
## Key Values
### 1. **Commitment**
- Each team member is responsible for completing their assigned story points within the sprint.
- Team members ensure transparency by updating their tasks daily in the project management tool.
- Everyone commits to attending daily stand-ups, sprint planning, reviews, and retrospectives on time.
### 2. **Focus**
- We will concentrate on sprint goals, ensuring our efforts contribute directly to the current sprint backlog.
- During core collaboration hours, team members should minimize distractions and focus on assigned tasks.
### 3. **Openness**
- Progress will be shared openly during stand-ups, especially blockers that require team support.
- Transparent communication is encouraged, whether it's about issues, delays, or new ideas.
- All feedback is valuable. We will create an environment where all ideas and perspectives are heard and respected.
### 4. **Respect**
- Respect each team member's time by being punctual for meetings and providing timely updates on tasks.
- Ensure all voices are heard during meetings, promoting inclusivity and collaboration.
### 5. **Courage**
- Team members are encouraged to take on challenging tasks and continue learning.
- We will embrace constructive criticism and use it to improve our processes and outputs.
## Working Hours
- **Core Hours:** 4 PM - 10 PM (team members are expected to be available for collaboration).
- **Flexible Hours:** Outside core hours, team members may work at their convenience but must ensure sprint commitments are met.
## Communication Guidelines
- **Primary Tool:** Slack (for daily updates, queries, and informal communication).
- **Project Management:** Tasks and progress will be tracked using Jira.
- **Email:** Used for formal communication with external stakeholders (e.g., client).
- **Video Conferencing:** Slack Huddle for team meetings and daily stand-ups, Zoom for client meetings.
### Communication Expectations:
- **Slack:** Respond within 2 hours during core working hours.
- **Email:** Respond within 1 business day.
- **Stand-ups:** Attend daily at 10:00 AM CST, sharing progress, blockers, and plans for the day.
## Meetings
- **Daily Stand-up:** Focus on what was completed, upcoming tasks, and any blockers.
- **Client Meeting:** Thursdays, 4 PM - 5 PM via Zoom. Prepare key updates and questions in advance.
- **Sprint Review & Retrospective:** End of each sprint, typically on Fridays, 3 PM - 6 PM. Review what went well, and what didn't, and identify action points for improvement.
## Definition of Completion
- All tasks must meet the acceptance criteria outlined in the user story.
- Code must be reviewed and merged into the main branch, with relevant documentation updated.
- Feature deployment must be tested in the staging environment before presenting to the client.
## Tools and Resources
- **Code Repository:** GitHub (all code changes should follow GitFlow and include peer code reviews).
- **Deployed Application:** Regular updates are required to ensure the app reflects the current progress.
- **Project Management Tool:** Jira is used to track tasks, story points, and overall progress.
## Collaboration Practices
- Pair programming or team collaboration is encouraged for complex tasks.
- All features should undergo a review process before being merged into the codebase.
- If you encounter a blocker, communicate it early and seek assistance from team members or the Scrum Master.
## Risk and Escalation
- For unexpected risks or delays, promptly communicate with the Scrum Master or Product Owner.
- If a risk may affect delivery, it will be discussed during the next stand-up or relevant meeting.
## Client Feedback Process
- Feedback from the client, Dr. Ritchey, will be reviewed and incorporated into our sprint planning.
- Action points from the client meeting will be documented and shared with the team via Jira or Slack.
## SDLC for this project
1. `main` is the top level branch for this project and maintains the latest fully tested working
copy of the codespace and should be deployable at any time.
2. When picking up a new ticket, checkout a new branch off of `main` and commit all your code to that branch
a. When the code is ready, **ensure all acceptance and unit tests are passing for the whole project**,
pull the latest version of `main`, merge `main` into your feature branch, resolve any merge conflicts,
ensure build is successful then push your code to github and create a pull request.
b. Assign a developer in the team to review the code
c. Once reviewed, merge your feature branch back to `main` and delete your feature branch.
3. Everytime code is merged to the `main` branch, Acceptance tests and Unit tests will be run on
on `main` to ensure we still have a woring copy of the code. If the tests fail, we fix the defects
before any new feature work is picked up. If the tests run succesfully, we deploy `main` to Heroku.
4. When we are ready to deploy, we merge `main` into `prod` and CICD takes care of the deployment.
## Revisiting the Agreement
This working agreement is a living document. The team will review and adjust it at the start of each sprint during Sprint Planning to ensure it reflects our evolving needs.
---
Team Arcade is committed to upholding this agreement and collaborating effectively to deliver value to our client, Dr. Ritchey.
80 changes: 80 additions & 0 deletions app/assets/stylesheets/dashboard.css
Original file line number Diff line number Diff line change
@@ -0,0 +1,80 @@
/* Game History Container */
.game-history {
display: flex;
justify-content: space-between;
padding: 20px;
background-color: #e0e0e0; /* Light gray background */
border-radius: 10px;
margin-bottom: 20px;
}

/* Each Stat Card */
.game-history .stat-card {
flex: 1;
background-color: #333;
color: #fff;
padding: 20px;
margin: 0 10px;
text-align: center;
border-radius: 10px;
box-shadow: 0 2px 4px rgba(0, 0, 0, 0.2);
}

.game-history .stat-card h3 {
font-size: 2.5rem;
margin-bottom: 10px;
}

.game-history .stat-card p {
font-size: 1.2rem;
color: #ccc;
}

.stat-label {
font-size: 0.9rem;
color: #aaa;
}

/* Game Cards Container */
.game-list {
display: grid;
grid-template-columns: repeat(2, 1fr);
grid-gap: 20px;
}

.game-card {
background-color: #333;
color: #fff;
padding: 20px;
border-radius: 10px;
box-shadow: 0 2px 4px rgba(0, 0, 0, 0.2);
}

.game-card h4 {
font-size: 1.5rem;
color: #fff;
margin-bottom: 10px;
}

.game-card p {
font-size: 1rem;
margin: 5px 0;
color: #ccc;
}

.game-card p.status {
color: green;
font-weight: bold;
}

/* Responsive Design */
@media (max-width: 768px) {
.game-history {
flex-direction: column;
gap: 10px;
}

.game-list {
grid-template-columns: 1fr;
}
}
36 changes: 36 additions & 0 deletions app/controllers/dashboard_controller.rb
Original file line number Diff line number Diff line change
@@ -0,0 +1,36 @@
class DashboardController < ApplicationController
before_action :require_login, only: [ :show ]

def show
# Dummy data to simulate user statistics
@dummy_dashboard = {
user_id: 1,
total_games_played: 950,
total_games_won: 450,
last_played: time_ago_in_words(Time.parse("2024-09-27")),
current_streak: 12,
longest_streak: 15
}

# Dummy data to simulate game history
@dummy_games = [
{ name: "Spelling Bee", played_on: "2024-09-27", status: "Won", points: 1354 },
{ name: "Wordle", played_on: "2024-09-27", status: "Won", points: 1354 },
{ name: "Letter Boxed", played_on: "2024-09-27", status: "Won", points: 1354 }
]
end

private
def time_ago_in_words(from_time)
distance_in_minutes = ((Time.now - from_time) / 60).to_i

case distance_in_minutes
when 0..59
"#{distance_in_minutes}m ago" # Minutes ago
when 60..1439
"#{distance_in_minutes / 60}h ago" # Hours ago
else
"#{distance_in_minutes / 1440}d ago" # Days ago
end
end
end
12 changes: 12 additions & 0 deletions app/models/dashboard.rb
Original file line number Diff line number Diff line change
@@ -0,0 +1,12 @@
class Dashboard < ApplicationRecord
# belongs_to :user
# has_many :games

def update_statistics(game)
self.total_games_played += 1
self.total_games_won += 1 if game.won?
self.last_played = game.played_on
# Logic for streaks goes here
self.save
end
end
33 changes: 33 additions & 0 deletions app/views/dashboard/show.html.erb
Original file line number Diff line number Diff line change
@@ -0,0 +1,33 @@
<%= stylesheet_link_tag 'dashboard', media: 'all', 'data-turbolinks-track': 'reload' %>
<%= render "/games/all_pages_nav" %>
<h1>Welcome to Your Dashboard!</h1>
<!-- Game Stats Section -->
<div class="game-history">
<!-- Total Games Played -->
<div class="stat-card">
<h3><%= @dummy_dashboard[:total_games_played] %></h3>
<p class="stat-label">Total Games Played</p>
</div>
<!-- Last Played -->
<div class="stat-card">
<h3><%= @dummy_dashboard[:last_played] %></h3> <!-- Dynamically calculated last played time -->
<p class="stat-label">Last Played</p>
</div>
<!-- Total Games Won -->
<div class="stat-card">
<h3><%= @dummy_dashboard[:total_games_won] %></h3>
<p class="stat-label">Total Games Won</p>
</div>
</div>
<!-- Recent Games Section -->
<h2>Your Recent Games</h2>
<div class="game-list">
<% @dummy_games.each do |game| %>
<div class="game-card">
<h4><%= game[:name] %></h4>
<p>Played on: <%= game[:played_on] %></p>
<p class="status">Status: <%= game[:status] %></p>
<p>Points Earned: <%= game[:points] %></p>
</div>
<% end %>
</div>
2 changes: 1 addition & 1 deletion app/views/games/_all_pages_nav.html.erb
Original file line number Diff line number Diff line change
Expand Up @@ -26,7 +26,7 @@
<div class="dropdown">
<button class="dropbtn">My Account</button>
<div class="dropdown-content">
<%= link_to 'Game Statistics', '#' %>
<%= link_to 'Game Statistics', dashboard_path %>
<%= link_to 'Profile', user_path(@current_user) %>
<%= link_to 'Log Out', logout_path, method: :delete %>
</div>
Expand Down
2 changes: 2 additions & 0 deletions config/routes.rb
Original file line number Diff line number Diff line change
Expand Up @@ -22,4 +22,6 @@
get "/spellingbee/:id", to: "games#demo_game", as: "spellingbee"
get "/wordle/:id", to: "games#demo_game", as: "wordle"
get "/letterboxed/:id", to: "games#demo_game", as: "letterboxed"

get "dashboard", to: "dashboard#show", as: "dashboard"
end
File renamed without changes.
17 changes: 17 additions & 0 deletions features/dashboard.feature
Original file line number Diff line number Diff line change
@@ -0,0 +1,17 @@
Feature: Dashboard

Background:
Given I am logged into Arcade

Scenario: Viewing the dashboard
When I visit the dashboard page
Then I should see "Welcome to Your Dashboard!"
And I should see "Total Games Played"
And I should see "Total Games Won"
And I should see "Last Played"
And I should see "Wordle"

Scenario: Guest user tries to access dashboard
Given I am a guest user
When I try to visit the dashboard page
Then I should see "Welcome, Guest!"
Loading
Loading