Skip to content

Instantly share code, notes, and snippets.

@ross-u
Last active August 28, 2023 15:58
Show Gist options
  • Save ross-u/71e23e7571a90a8d76d6ac97b9304665 to your computer and use it in GitHub Desktop.
Save ross-u/71e23e7571a90a8d76d6ac97b9304665 to your computer and use it in GitHub Desktop.
M3 README EXAMPLE

M3 - README.md Example


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

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

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