From 04f86f794bfaa06bc0da8ea0f79bfabd58506d2e Mon Sep 17 00:00:00 2001 From: Frederik Reich Date: Tue, 28 Apr 2020 13:56:00 +0200 Subject: [PATCH] Add player interaction routines --- server/api/character.js | 14 +++++++ server/api/player.js | 79 ++++++++++++++++++++++++++++++++++++++ server/models/Character.js | 4 +- server/models/Inventory.js | 12 ++++++ server/models/Player.js | 2 + server/models/index.js | 4 +- 6 files changed, 113 insertions(+), 2 deletions(-) create mode 100644 server/api/character.js create mode 100644 server/api/player.js create mode 100644 server/models/Inventory.js diff --git a/server/api/character.js b/server/api/character.js new file mode 100644 index 0000000..17594aa --- /dev/null +++ b/server/api/character.js @@ -0,0 +1,14 @@ +'use strict'; + +const mongoose = require('mongoose'); + +const { Player, Project, Character } = require('./../models'); + +module.exports = (app, logger, serviceName) => { + app.post(`/${serviceName}/api/character/create`, (req, res, next) => { + const { body } = req; + const { query } = body; + + console.log(query); + }); +}; diff --git a/server/api/player.js b/server/api/player.js new file mode 100644 index 0000000..01416b2 --- /dev/null +++ b/server/api/player.js @@ -0,0 +1,79 @@ +'use strict'; + +const mongoose = require('mongoose'); + +const { Project, Player } = require('./../models'); + +module.exports = (app, logger, serviceName) => { + // Login Player + app.post(`/${serviceName}/api/login`, (req, res, next) => { + const { body } = req; + const { query } = body; + + let jsonData; + + if (query) { + jsonData = JSON.parse(query); + } else { + return res.json({ + success: false + }); + } + + if (!jsonData.playerName) { + return res.send({ + success: false, + message: "Player can't be empty" + }); + } + + Player.findOne({ name: jsonData.playerName }, (err, player) => { + if (err) { + return res.send({ + success: false, + message: err + }); + } + + if (player !== null) { + // Login existing player + Project.findById(new mongoose.Types.ObjectId(jsonData.projectId), (err, project) => { + if (project) { + if (project.players.indexOf(new mongoose.Types.ObjectId(player._id)) > -1) { + return res.json({ + success: true, + data: player + }); + } else { + project.players.push(new mongoose.Types.ObjectId(player._id)); + project.save((err, currentProject) => { + return res.json({ + success: true, + data: player + }); + }); + } + } else { + } + }); + } else { + // Create new Player + const newPlayer = new Player(); + newPlayer.name = jsonData.playerName; + newPlayer.save((err, player) => { + Project.findById(new mongoose.Types.ObjectId(jsonData.projectId), (err, project) => { + if (project) { + project.players.push(new mongoose.Types.ObjectId(player._id)); + project.save((err, currentProject) => { + return res.send({ + success: true, + data: player + }); + }); + } + }); + }); + } + }); + }); +}; diff --git a/server/models/Character.js b/server/models/Character.js index c96ba74..226cca9 100644 --- a/server/models/Character.js +++ b/server/models/Character.js @@ -4,7 +4,9 @@ const mongoose = require('mongoose'); const CharacterSchema = new mongoose.Schema({ name: { type: String, required: true }, - created: { type: Date, default: Date.now() } + created: { type: Date, default: Date.now() }, + updated: { type: Date, default: Date.now() } + //inventories }); module.exports = mongoose.model('Character', CharacterSchema); diff --git a/server/models/Inventory.js b/server/models/Inventory.js new file mode 100644 index 0000000..075ae5c --- /dev/null +++ b/server/models/Inventory.js @@ -0,0 +1,12 @@ +'use strict'; + +const mongoose = require('mongoose'); + +const InventorySchema = new mongoose.Schema({ + title: { type: String, required: true }, + created: { type: Date, default: Date.now() }, + updated: { type: Date, default: Date.now() } + //inventories +}); + +module.exports = mongoose.model('Inventory', InventorySchema); diff --git a/server/models/Player.js b/server/models/Player.js index b0d526c..ae9a29d 100644 --- a/server/models/Player.js +++ b/server/models/Player.js @@ -12,6 +12,8 @@ const PlayerSchema = new mongoose.Schema({ * @body This element needs to be added to the PlayerSchema of the player-service. */ data: { type: Object, default: {} } + //inventories + //characters }); module.exports = mongoose.model('Player', PlayerSchema); diff --git a/server/models/index.js b/server/models/index.js index f3a95de..786970d 100644 --- a/server/models/index.js +++ b/server/models/index.js @@ -3,9 +3,11 @@ const Player = require('./Player'); const Project = require('./Project'); const ProjectToken = require('./ProjectToken'); +const Character = require('./Character'); module.exports = { Player, Project, - ProjectToken + ProjectToken, + Character };