Great Deal! Get Instant $10 FREE in Account on First Order + 10% Cashback on Every Order Order Now

FitnessFighter App using react.js, node and express, MongoDB, heroku create an app overview of full intended applicationFitnessFighter seamlessly syncs with the users smartwatch's stepcounter to earn...

1 answer below »
FitnessFighter App
using react.js, node and express, MongoDB, heroku create an app
overview of full intended applicationFitnessFighter seamlessly syncs with the users smartwatch's stepcounter to earn the user "fitcoins" (1 step = 1 fitcoin)that can be used to purchase battle powerups. Users can battle other users to win coins.
when signing up users choose a username and choose between land, sea and magic creature and get assigned a creature that is one of 3 colors randomly
minimum viable productan app that you log into, the user is authenticated, and then taken to a screen with their creature and current fitcoin coin count. If they've accummulated any coins since last log in, it will briefly appear as a red "+999" (or whatever the number of steps accumulated is) and then add to their total in realtime. In this screen there will be 3 options. Option One is to seek a battle, clicking on it will match you with someone looking for a battle, take you to a title screen for the battle (Evee vs Charmander99!) and show that X number of coins have been taken from each participant to initate the battle and then the battle happens (a set of fixed graphics, bang! zap! plod!) and the result of the battle is based off 40% player attributes and 60% randomization and then it shows who has earned the coins and then takes you back to the main screen. Option Two is to use your coins to powerup your creature, click on a screen, see a bar graph respresentation of your creatures current attributes and choose which you would like to boost, click on it, your bar graph ticks up and coins are subtracted, back to the main screen. Option Three is to log out.
screen by screen walkthrough of elements needed:https://pr.to/YY32OS/
files for graphics attached. use whatever else you think you need
Answered Same Day Apr 30, 2021

Solution

Sanghamitra answered on May 09 2021
149 Votes
backend/.env
PORT=3333
ackend/app/models/user.js
var mongoose = require('mongoose');
var Schema = mongoose.Schema;
let UserSchema = new Schema({
    name: String,
    email: String,
    password: String,
    admin: String
});
UserSchema.methods.toJSON = function() {
    var obj = this.toObject();
    delete obj.password;
    return obj;
}
module.exports = mongoose.model('User', UserSchema);
ackend/app/models/userfitpoints.js
var mongoose = require('mongoose');
var Schema = mongoose.Schema;
let UserfitpointsSchema = new Schema({
userid :String,
    points:String
});
UserfitpointsSchema.methods.toJSON = function() {
    var obj = this.toObject();
    return obj;
}
module.exports = mongoose.model('Userfitpoints', UserfitpointsSchema);
ackend/app/models/usergame.js
var mongoose = require('mongoose');
var Schema = mongoose.Schema;
let UsergameSchema = new Schema({
    userid: String ,
    opponentid:String ,
    status:String,
    playeddon: Date
});
UsergameSchema.methods.toJSON = function() {
    var obj = this.toObject();
    
    return obj;
}
module.exports = mongoose.model('Usergame', UsergameSchema);
ackend/app/models/userstrength.js
var mongoose = require('mongoose');
var Schema = mongoose.Schema;
let UserstrengthSchema = new Schema({
    userid: String,
    strength: String,
    endurance: String,
    guile: String ,
    frenzy:String
});
UserstrengthSchema.methods.toJSON = function() {
    var obj = this.toObject();
    delete obj.password;
    return obj;
}
module.exports = mongoose.model('Userstrength', UserstrengthSchema);
ackend/app/services/UtilityService.js
let UtilityService = {
    checkForE
ors: function(body){
        var hasE
ors = false;
        var e
ors = []
        if(!body.hasOwnProperty('name')){
            e
ors.push('No name provided');
        }
        if(!body.hasOwnProperty('email')){
            e
ors.push('No email provided');
        }
        if(!body.hasOwnProperty('password')){
            e
ors.push('No password provided');
        }
        
        return {hasE
ors: hasE
ors, e
ors: e
ors}
    }
}
module.exports = UtilityService;
ackend/config.js
module.exports = {
    'secret': 'fitnessfighter',
    'database': 'mongodb:
localhost:27017/fitnessfighterdb'
};
ackend/package-lock.json
{
"name": "node-token-authentication",
"requires": true,
"lockfileVersion": 1,
"dependencies": {
"accepts": {
"version": "1.3.7",
"resolved": "https:
egistry.npmjs.org/accepts/-/accepts-1.3.7.tgz",
"integrity": "sha512-Il80Qs2WjYlJIBNzNkK6KYqlVMTbZLXgHx2oT0pU/fjRHyEp+PEfEPY0R3WCwAGVOtauxh1hOxNgIf5bv7dQpA==",
"requires": {
"mime-types": "~2.1.24",
"negotiator": "0.6.2"
}
},
"a
ay-flatten": {
"version": "1.1.1",
"resolved": "https:
egistry.npmjs.org/a
ay-flatten/-/a
ay-flatten-1.1.1.tgz",
"integrity": "sha1-ml9pkFGx5wczKPKgCJaLZOopVdI="
},
"async": {
"version": "2.6.0",
"resolved": "https:
egistry.npmjs.org/async/-/async-2.6.0.tgz",
"integrity": "sha512-xAfGg1/NTLBBKlHFmnd7PlmUW9KhVQIUuSrYem9xzFUZy13ScvtyGGejaae9iAVRiRq9+Cx7DPFaAAhCpyxyPw==",
"requires": {
"lodash": "^4.14.0"
}
},
"basic-auth": {
"version": "2.0.1",
"resolved": "https:
egistry.npmjs.org
asic-auth/-
asic-auth-2.0.1.tgz",
"integrity": "sha512-NF+epuEdnUYVlGuhax
q+dvJttwLnGY+YixlXlME5KpQ5W3CnXA5cVTneY3SPbPDRkcjMbifrwmFYcClgOZeg==",
"requires": {
"safe-buffer": "5.1.2"
}
},
"bluebird": {
"version": "3.5.0",
"resolved": "https:
egistry.npmjs.org
luebird/-
luebird-3.5.0.tgz",
"integrity": "sha1-eRQg1/VR7qKJdFOop3ZT+WYG1nw="
},
"body-parser": {
"version": "1.19.0",
"resolved": "https:
egistry.npmjs.org
ody-parse
-
ody-parser-1.19.0.tgz",
"integrity": "sha512-dhEPs72UPbDnAQJ9ZKMNTP6ptJaionhP5cBb541nXPlW60Jepo9RV/a4fX4XWW9CuFNK22krhrj1+rgzifNCsw==",
"requires": {
"bytes": "3.1.0",
"content-type": "~1.0.4",
"debug": "2.6.9",
"depd": "~1.1.2",
"http-e
ors": "1.7.2",
"iconv-lite": "0.4.24",
"on-finished": "~2.3.0",
"qs": "6.7.0",
"raw-body": "2.4.0",
"type-is": "~1.6.17"
}
},
"bson": {
"version": "1.0.9",
"resolved": "https:
egistry.npmjs.org
son/-
son-1.0.9.tgz",
"integrity": "sha512-IQX9/h7WdMBIW/q/++tGd+emQr0XMdeZ6icnT/74Xk9fnabWn+gZgpE+9V+gujL3hhJOoNrnDVY7tWdzc7NUTg=="
},
"buffer-equal-constant-time": {
"version": "1.0.1",
"resolved": "https:
egistry.npmjs.org
uffer-equal-constant-time/-
uffer-equal-constant-time-1.0.1.tgz",
"integrity": "sha1-+OcRMvf/5uAaXJaXpMbz5I1cyBk="
},
"buffer-shims": {
"version": "1.0.0",
"resolved": "https:
egistry.npmjs.org
uffer-shims/-
uffer-shims-1.0.0.tgz",
"integrity": "sha1-mXjOMXOIxkmth5MCjDR37wRKi1E="
},
"bytes": {
"version": "3.1.0",
"resolved": "https:
egistry.npmjs.org
ytes/-
ytes-3.1.0.tgz",
"integrity": "sha512-zauLjrfCG+xvoyaqLoV8bLVXXNGC4JqlxFCutSDWA6fJrTo2ZuvLYTqZ7aHBLZSMOopbzwv8f+wZcVzfVTI2Dg=="
},
"content-disposition": {
"version": "0.5.3",
"resolved": "https:
egistry.npmjs.org/content-disposition/-/content-disposition-0.5.3.tgz",
"integrity": "sha512-ExO0774ikEObIAEV9kDo50o+79VCUdEB6n6lzKgGwupcVeRlhrj3qGAfwq8G6uBJjkqLrhT0qEYFcWng8z1z0g==",
"requires": {
"safe-buffer": "5.1.2"
}
},
"content-type": {
"version": "1.0.4",
"resolved": "https:
egistry.npmjs.org/content-type/-/content-type-1.0.4.tgz",
"integrity": "sha512-hIP3EEPs8tB9AT1L+NUqtwOAps4mk2Zob89MWXMHjHWg9milF/j4osnnQLXBCBFBk/tvIG/tUc9mOUJiPBhPXA=="
},
"cookie": {
"version": "0.4.0",
"resolved": "https:
egistry.npmjs.org/cookie/-/cookie-0.4.0.tgz",
"integrity": "sha512-+Hp8fLp57wnUSt0tY0tHEXh4voZRDnoIrZPqlo3DPiI4y9lwg/jqx+1Om94/W6ZaPDOUbnjOt/99w66zk+l1Xg=="
},
"cookie-signature": {
"version": "1.0.6",
"resolved": "https:
egistry.npmjs.org/cookie-signature/-/cookie-signature-1.0.6.tgz",
"integrity": "sha1-4wOogrNCzD7oylE6eZmXNNqzriw="
},
"core-util-is": {
"version": "1.0.2",
"resolved": "https:
egistry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz",
"integrity": "sha1-tf1UIgqivFq1eqtxQMlAdUUDwac="
},
"cors": {
"version": "2.8.5",
"resolved": "https:
egistry.npmjs.org/cors/-/cors-2.8.5.tgz",
"integrity": "sha512-KIHbLJqu73RG
hn
O9uBeixNGuvSQjul/jdFvS/KFSIH1hWVd1ng7zOHx+YrEfInLG7q4n6GHQ9cDtxv/P6g==",
"requires": {
"object-assign": "^4",
"vary": "^1"
}
},
"debug": {
"version": "2.6.9",
"resolved": "https:
egistry.npmjs.org/debug/-/debug-2.6.9.tgz",
"integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==",
"requires": {
"ms": "2.0.0"
}
},
"depd": {
"version": "1.1.2",
"resolved": "https:
egistry.npmjs.org/depd/-/depd-1.1.2.tgz",
"integrity": "sha1-m81S4UwJd2PnSbJ0xDRu0uVgtak="
},
"destroy": {
"version": "1.0.4",
"resolved": "https:
egistry.npmjs.org/destroy/-/destroy-1.0.4.tgz",
"integrity": "sha1-l4hXRCxEdJ5CBmE+N5RiBYJqvYA="
},
"ecdsa-sig-formatter": {
"version": "1.0.11",
"resolved": "https:
egistry.npmjs.org/ecdsa-sig-formatte
-/ecdsa-sig-formatter-1.0.11.tgz",
"integrity": "sha512-nagl3RY
Nv6kQkeJIpt6NJZy8twLB/2vtz6yN9Z4vRKHN4/QZJIEbqohALSgwKdnksuY3k5Addp5lg8sVoVcQ==",
"requires": {
"safe-buffer": "^5.0.1"
}
},
"ee-first": {
"version": "1.1.1",
"resolved": "https:
egistry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz",
"integrity": "sha1-WQxhFWsK4vTwJVcyoViyZrxWsh0="
},
"encodeurl": {
"version": "1.0.2",
"resolved": "https:
egistry.npmjs.org/encodeurl/-/encodeurl-1.0.2.tgz",
"integrity": "sha1-rT/0yG7C0CkyL1oCw6mmBslbP1k="
},
"es6-promise": {
"version": "3.2.1",
"resolved": "https:
egistry.npmjs.org/es6-promise/-/es6-promise-3.2.1.tgz",
"integrity": "sha1-7FYjOGgDKQkgcXDDlEjiREndH8Q="
},
"escape-html": {
"version": "1.0.3",
"resolved": "https:
egistry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz",
"integrity": "sha1-Aljq5NPQwJdN4cFpGI7wBR0dGYg="
},
"etag": {
"version": "1.8.1",
"resolved": "https:
egistry.npmjs.org/etag/-/etag-1.8.1.tgz",
"integrity": "sha1-Qa4u62XvpiJo
qg6x9eSmbCIc="
},
"express": {
"version": "4.17.1",
"resolved": "https:
egistry.npmjs.org/express/-/express-4.17.1.tgz",
"integrity": "sha512-mHJ9O79RqluphRrcw2X/GTh3k9tVv8YcoyY4Kkh4WDMUYKRZUq0h1o0w2
xBqM7VoeUVqgb27xlEMXTnYt4g==",
"requires": {
"accepts": "~1.3.7",
"a
ay-flatten": "1.1.1",
"body-parser": "1.19.0",
"content-disposition": "0.5.3",
"content-type": "~1.0.4",
"cookie": "0.4.0",
"cookie-signature": "1.0.6",
"debug": "2.6.9",
"depd": "~1.1.2",
"encodeurl": "~1.0.2",
"escape-html": "~1.0.3",
"etag": "~1.8.1",
"finalhandler": "~1.1.2",
"fresh": "0.5.2",
"merge-descriptors": "1.0.1",
"methods": "~1.1.2",
"on-finished": "~2.3.0",
"parseurl": "~1.3.3",
"path-to-regexp": "0.1.7",
"proxy-addr": "~2.0.5",
"qs": "6.7.0",
"range-parser": "~1.2.1",
"safe-buffer": "5.1.2",
"send": "0.17.1",
"serve-static": "1.14.1",
"setprototypeof": "1.1.1",
"statuses": "~1.5.0",
"type-is": "~1.6.18",
"utils-merge": "1.0.1",
"vary": "~1.1.2"
}
},
"finalhandler": {
"version": "1.1.2",
"resolved": "https:
egistry.npmjs.org/finalhandle
-/finalhandler-1.1.2.tgz",
"integrity": "sha512-aAWcW57uxVNrQZqFXjITpW3sIUQmHGG3qSb9mUah9MgMC4NeWhNOlNjXEYq3HjRAvL6arUviZGGJsBg6z0zsWA==",
"requires": {
"debug": "2.6.9",
"encodeurl": "~1.0.2",
"escape-html": "~1.0.3",
"on-finished": "~2.3.0",
"parseurl": "~1.3.3",
"statuses": "~1.5.0",
"unpipe": "~1.0.0"
}
},
"forwarded": {
"version": "0.1.2",
"resolved": "https:
egistry.npmjs.org/forwarded/-/forwarded-0.1.2.tgz",
"integrity": "sha1-mMI9qxF1ZXuMBXPozszZGw/xjIQ="
},
"fresh": {
"version": "0.5.2",
"resolved": "https:
egistry.npmjs.org/fresh/-/fresh-0.5.2.tgz",
"integrity": "sha1-PYyt2Q2XZWn6g1qx+OSyOhBWBac="
},
"hooks-fixed": {
"version": "2.0.2",
"resolved": "https:
egistry.npmjs.org/hooks-fixed/-/hooks-fixed-2.0.2.tgz",
"integrity": "sha512-YurCM4gQSetcrhwEtpQHhQ4M7Zo7poNGqY4kQGeBS6eZtOcT3tnNs01ThFa0jYBByAiYt1MjMjP/YApG0EnAvQ=="
},
"http-e
ors": {
"version": "1.7.2",
"resolved": "https:
egistry.npmjs.org/http-e
ors/-/http-e
ors-1.7.2.tgz",
"integrity":...
SOLUTION.PDF

Answer To This Question Is Available To Download

Related Questions & Answers

More Questions »

Submit New Assignment

Copy and Paste Your Assignment Here