Skip to content

nathangero/play.join

 
 

Repository files navigation

play.join()

Description

Introducing Play.Join(), the go-to app for gamers looking to connect and team up with fellow players. With Play.Join(), you can easily discover gaming friends who share your passion for your favorite titles. Simply create your profile, list your preferred games, and instantly find other gamers with similar interests. Connect with other gamers by adding their gamer tags and take your multiplayer adventures to the next level. Play.Join is your ticket to expanding your gaming circle and making memorable gaming experiences with like-minded players.

You can visit the website here: play.join

Technologies Used

Tech Docs
Javascript docs
CSS docs
Materialize framework docs
Express JS docs
Express Handlebars docs
Handlebars docs
Express Session docs
Sequelize v6 docs
Bcrypt docs
Heroku docs
IGDB docs
IGDB node package docs

CSS Framework

We used Materialize CSS for our CSS framework. It was easy to use and made our website look simple and add colors. It was able to quickly make text white, style our backgrounds, and even make simple card layouts.

User Stores

  • I want to login/signup to have full access to the website

gif of a user logging in

  • I want to search for games to play with others

gif of a user searching for apex legends

  • I want to favorite a game

gif of favoriting a game

  • I want to see other users who play the same games I do

gif of seeing other users playing apex legends

  • I want to add friends

gif of clicking the Add Friend button on a user

Models

AccessToken

Column Requirements
id Integer, not null, auto increment, primary key
token String, not null

Friends

Column Requirements
id Integer, not null, auto increment, primary key
user_id Integer, references User
game_id Integer, references Game
isFriend Boolean, not null

Game

Column Requirements
id Integer, not null, primary key
name String, not null

GamerTag

Column Requirements
id Integer, not null, auto increment, primary key
name String, not null
platform_id Integer, references Platform
user_id Integer

Platform

NOTE: Unused but maybe for future implementation

Column Requirements
id Integer, not null, auto increment, primary key
name String, not null

User

Column Requirements
id Integer, not null, auto increment, primary key
userName String, not null, validate: len(4)
email String, not null
password String, not null, validate: len(8)

UserGame

Column Requirements
id Integer, not null, auto increment, primary key
game_id Integer, references Game
user_id Integer, references User
gametag_id Integer, references GamerTag

Model relationships

Model Relationship Model
User has many GamerTag
User belongs to many User as "friender"
User belongs to many User as "friended"
User belongs to many Game
Game belongs to many User
Platform has man GamerTag
GamerTag belongs to Platform
GamerTag belongs to User

IGDB Node Package

We used the IGDB RESTful API and its companion node package, the IGDB Node Package. It was extremely useful when getting a list of games given a search query. Our front-end would call our back-end server, which was then calls the IGDB api.

Here's code of how we used the node package

const response = await client
    .fields('name, cover.*')
    .limit(parseInt(process.env.IGDB_LIMIT))
    .search(keyword.length > 1 ? keyword.split("%20").join(" ") : keyword) // search for a specific name (search implementations can vary)
    .where(`category = (0, 4)`) // filter the results
    .request('/games'); // execute the query and return a response object

Images

Homepage with a game search

homepage with a search of call of duty games.

Profile page with the user's gamertags, favorite games, and friends

Profile page with the user's gamertags, favorite games, and friends.

Showing the screen responsiveness

Profile page with the user's gamertags, favorite games, and friends.

Application creators:

Credits

Fix: require models directory to make tables

Fix: .bulkCreate() not running hooks

Sequelize eager loading with nested columns

Sequelize find and count all

Express custom middleware with parameters

Sorting an array

License

MIT License

Copyright (c) 2023 Christina Larsen

Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:

The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.

THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.

About

No description, website, or topics provided.

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages

  • JavaScript 80.6%
  • Handlebars 18.2%
  • CSS 1.2%