Skip to content

Instantly share code, notes, and snippets.

@MrAFerreira
Forked from ross-u/README.md
Last active November 28, 2023 11:32
Show Gist options
  • Save MrAFerreira/57422943571b0a850e92d104b5affb74 to your computer and use it in GitHub Desktop.
Save MrAFerreira/57422943571b0a850e92d104b5affb74 to your computer and use it in GitHub Desktop.
M3 README EXAMPLE

Project Name


Quick Compo


Description

This is an app to manage unofficial tournaments within communities. The app helps to organize, manage and track competitions.

User Stories

  • 404: As a user I get to see a 404 page with a feedback message if I try to reach a page that does not exist so that I know it's my fault.
  • Signup: As an anonymous user I can sign up on the platform so that I can start creating and managing tournaments.
  • Login: As a user I can login to the platform so that I can access my profile and start creating and managing tournaments.
  • Logout: As a logged in user I can logout from the platform so no one else can use it.
  • Profile Page: As a logged in user I can visit my profile page so that I can access the edit page and see the list of tournaments I have created.
  • Add Tournaments: As a logged in user I can access the add tournament page so that I can create a new tournament.
  • Edit Tournaments: As a logged in user I can access the edit tournament page so that I can edit the tournament I created.
  • Add Players: As a user I can add players to a tournament.
  • View Tournament Table: As a user I want to see the tournament details, players list and the time table.
  • View Ranks: As a user I can see the rankings list for the tournament.

Backlog

  • Add weather widget
  • lottie interactions
  • users can bet
  • add geolocation to events when creating

Client / Frontend

React Router Routes (React App)

Path Component Permissions Behavior
/login LoginPage anon only <AnonRoute> Login form, navigates to home page after login.
/signup SignupPage anon only <AnonRoute> Signup form, navigates to home page after signup.
/ HomePage public <Route> Home page.
/user-profile ProfilePage user only <PrivateRoute> User and player profile for the current user.
/user-profile/edit EditProfilePage user only <PrivateRoute> Edit user profile form.
/tournaments/add CreateTournamentPage user only <PrivateRoute> Create new tournament form.
/tournaments TournamentListPage user only <PrivateRoute> Tournaments list.
/tournaments/:tournamentId TournamentDetailPage user only <PrivateRoute> Tournament details. Shows players list and other details.
/tournament/players/:id PlayerDetailsPage user only <PrivateRoute> Single player details.
/rankings/:tournamentId RankingsPage user only <PrivateRoute> Tournament rankings list.

Components

Pages:

  • LoginPage

  • SignupPage

  • HomePage

  • ProfilePage

  • EditProfilePage

  • CreateTournamentPage

  • TournamentListPage

  • TournamentDetailsPage

  • PlayerDetailsPage

  • RankingsPage

Components:

  • PlayerCard
  • TournamentCard
  • Navbar

Services

  • Auth Service

    • authService :
      • .login(user)
      • .signup(user)
      • .logout()
      • .validate()
  • User Service

    • userService :
      • .updateCurrentUser(id, userData)
      • .getCurrentUser()
  • Tournament Service

    • tournamentService :
      • .addTournament(tournamentData)
      • .getTournaments()
      • .getOneTournament(id)
      • .deleteTournament(id)
  • Player Service

    • playerService :
      • .createPlayer(id)
      • .getPlayerDetails(id)

Server / Backend

Models

User model

{
  email: { type: String, required: true, unique: true },
  password: { type: String, required: true },
	playerProfile: { type: Schema.Types.ObjectId, ref:'Player' },
  createdTournaments: [ { type: Schema.Types.ObjectId, ref:'Tournament' } ]
}

Tournament model

 {
   name: { type: String, required: true },
   img: { type: String },
   players: [ { type: Schema.Types.ObjectId, ref:'Player' } ],
   games: [],
   rankings: []
 }

Player model

{
  firstName: { type: String, required: true },
  lastName: { type: String, required: true },
  profileImage: { type: String },
  scores: []
}

API Endpoints (backend routes)

HTTP Method URL Request Body Success status Error Status Description
GET /auth/profile Saved session 200 404 Check if user is logged in and return profile page
POST /auth/signup {name, email, password} 201 404 Checks if fields not empty (422) and user not exists (409), then create user with encrypted password, and store user in session
POST /auth/login {username, password} 200 401 Checks if fields not empty (422), if user exists (404), and if password matches (404), then stores user in session
POST /auth/logout 204 400 Logs out the user
GET /api/tournaments 400 Show all tournaments
GET /api/tournaments/:id Show specific tournament
POST /api/tournaments { name, img, players } 201 400 Create and save a new tournament
PUT /api/tournaments/:id { name, img, players } 200 400 edit tournament
DELETE /api/tournaments/:id 201 400 delete tournament
GET /api/players/:id show specific player
POST /api/players { name, img, tournamentId } 200 404 add player
PUT /api/players/:id { name, img } 201 400 edit player
DELETE /api/players/:id 200 400 delete player
GET /api/games 201 400 show games
GET /api/games/:id show specific game
POST /api/games {player1,player2,winner,img} add game
PUT /api/games/:id {winner,score} edit game

API's


Packages


Links

Trello/Kanban

Link to your trello board or a picture of your physical board

Git

The url to your repository and to your deployed project

Client repository Link

Server repository Link

Deployed App Link

Slides

Slides Link - The url to your public presentation slides

Contributors

FirstName LastName - -

FirstName LastName - -

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment