Merge branch 'release/v1.7.2' of git.noarch.de:hardi/opt-cc into release/v1.7.2
commit
0cffa96b41
|
@ -25,7 +25,7 @@ In addition, it sets up the mongo deamon to start up automatically with the syst
|
||||||
|
|
||||||
For production setup run the script, described in _Setup for development_, adding the parameter `prod`
|
For production setup run the script, described in _Setup for development_, adding the parameter `prod`
|
||||||
|
|
||||||
./docs/opt-cc-environment/3rd-party-install.sh prod
|
./docs/opt-cc-environment/3rd-party-install.sh prod
|
||||||
|
|
||||||
This adds the [`pm2` process manager](http://pm2.keymetrics.io/) to be installed and start the _opt-cc_ server as `pm2` process.
|
This adds the [`pm2` process manager](http://pm2.keymetrics.io/) to be installed and start the _opt-cc_ server as `pm2` process.
|
||||||
Run the `sudo` command printed as last output to configure the `pm2` process for automatic start on the system.
|
Run the `sudo` command printed as last output to configure the `pm2` process for automatic start on the system.
|
||||||
|
|
|
@ -1,18 +1,24 @@
|
||||||
### GET Awardings [GET /awardings{?userId,confirmed}]
|
### GET Awardings [GET /awardings{?userId,inProgress,fractFilter}]
|
||||||
|
|
||||||
List all awardings
|
List all awardings
|
||||||
|
|
||||||
+ Parameters
|
+ Parameters
|
||||||
+ userId (string, optional)
|
+ userId (string, optional)
|
||||||
specific army member Id to show the awardings for
|
specific army member Id to show the awardings for
|
||||||
|
|
||||||
+ confirmed (number, optional)
|
+ inProgress (boolean, optional)
|
||||||
Field to filter by request awarding state
|
true to filter by awarding state 'in progress'
|
||||||
|
|
||||||
|
+ Default: false
|
||||||
|
|
||||||
|
+ fractFilter (enum[string], optional)
|
||||||
|
Field to filter by fraction
|
||||||
|
|
||||||
+ Members
|
+ Members
|
||||||
+ 0 - not decided
|
+ `BLUFOR`
|
||||||
+ 1 - confirmed
|
+ `OPFOR`
|
||||||
+ 2 - rejected
|
+ `GLOBAL`
|
||||||
|
|
||||||
|
|
||||||
+ Response 200
|
+ Response 200
|
||||||
|
|
||||||
|
|
|
@ -0,0 +1,25 @@
|
||||||
|
### GET Promotions [GET /promotion{?squadId,inProgress,fractFilter}]
|
||||||
|
|
||||||
|
List all promotion requests
|
||||||
|
|
||||||
|
+ Parameters
|
||||||
|
+ squadId (string, optional)
|
||||||
|
specific squad Id to show the promotion requests for
|
||||||
|
|
||||||
|
+ inProgress (boolean, optional)
|
||||||
|
true to filter by promotion state 'in progress'
|
||||||
|
|
||||||
|
+ Default: false
|
||||||
|
|
||||||
|
+ fractFilter (enum[string], optional)
|
||||||
|
Field to filter by fraction
|
||||||
|
|
||||||
|
+ Members
|
||||||
|
+ `BLUFOR`
|
||||||
|
+ `OPFOR`
|
||||||
|
+ `GLOBAL`
|
||||||
|
|
||||||
|
|
||||||
|
+ Response 200
|
||||||
|
|
||||||
|
+ Attributes (array[Promotion])
|
|
@ -1,7 +1,38 @@
|
||||||
### GET User [GET /users/:id]
|
### GET Users [GET /users{?q,fractFilter,limit,offset}]
|
||||||
|
|
||||||
Get single army member information
|
Get single army member information
|
||||||
|
|
||||||
|
+ Parameters
|
||||||
|
+ q: `hardi` (string, optional) - filter string which filters for partial username
|
||||||
|
|
||||||
|
+ fractFilter (enum[string], optional)
|
||||||
|
Field to filter by fraction
|
||||||
|
|
||||||
|
+ Members
|
||||||
|
+ `BLUFOR`
|
||||||
|
+ `OPFOR`
|
||||||
|
+ `GLOBAL`
|
||||||
|
|
||||||
|
+ limit: 20 (number, optional)
|
||||||
|
Maximum number of users to return
|
||||||
|
|
||||||
|
+ offset (number, optional)
|
||||||
|
Offset into result-set (useful for pagination)
|
||||||
|
|
||||||
|
+ Default: 0
|
||||||
|
|
||||||
|
+ Response 200
|
||||||
|
|
||||||
|
+ Attributes (array[User])
|
||||||
|
|
||||||
|
|
||||||
|
### GET User [GET /users/{id}]
|
||||||
|
|
||||||
|
Get single army member information
|
||||||
|
|
||||||
|
+ Parameters
|
||||||
|
+ id: `5ab68d42f547ed304064e5f7` (string, required) - unique id of army-member
|
||||||
|
|
||||||
+ Response 200
|
+ Response 200
|
||||||
|
|
||||||
+ Attributes (User)
|
+ Attributes (User)
|
||||||
|
|
|
@ -2,7 +2,7 @@
|
||||||
|
|
||||||
Generate a token which can be used to make API requests.
|
Generate a token which can be used to make API requests.
|
||||||
|
|
||||||
+ Request Generate Token
|
+ Request Generate Token (application/json)
|
||||||
|
|
||||||
+ Attributes (Login)
|
+ Attributes (Login)
|
||||||
|
|
||||||
|
|
|
@ -0,0 +1,36 @@
|
||||||
|
The running express server instance saves entity related files like squad logos and statistic logs on the file system.
|
||||||
|
In the original mean application they are served in the `/resource` path of the application server.
|
||||||
|
|
||||||
|
The following examples show where those files are located, to be accessed on the cloud instance.
|
||||||
|
|
||||||
|
## Images
|
||||||
|
**Decoration Image**
|
||||||
|
|
||||||
|
`https://cc.noarch.de/resource/decoration/{decorationId}.png`
|
||||||
|
|
||||||
|
**Rank Image**
|
||||||
|
|
||||||
|
`https://cc.noarch.de/resource/rank/{rankId}.png`
|
||||||
|
|
||||||
|
**Signature Image**
|
||||||
|
|
||||||
|
`https://cc.noarch.de/resource/signature/{userId}.png`
|
||||||
|
|
||||||
|
**Squad Logo**
|
||||||
|
|
||||||
|
`https://cc.noarch.de/resource/squad/{squadId}.png`
|
||||||
|
|
||||||
|
## Log-Files
|
||||||
|
|
||||||
|
**Sanitized Log File**
|
||||||
|
|
||||||
|
`https://cc.noarch.de/resource/logs/{warId}/clean.log`
|
||||||
|
|
||||||
|
**Original Uploaded Log File**
|
||||||
|
|
||||||
|
`https://cc.noarch.de/resource/logs/{warId}/war.log`
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -0,0 +1,8 @@
|
||||||
|
# Proposer (object)
|
||||||
|
Representation of an app user who proposed an awarding or a promotion
|
||||||
|
|
||||||
|
## Properties
|
||||||
|
|
||||||
|
+ _id: `593d5e3f72d35225222bcaba` (string, required) - unique id of the app user
|
||||||
|
+ username: `hardiready` (string, required) - username of the app user
|
||||||
|
+ squad: `591470249e9fae286e308e41` (string, required) - squad id associated with the app user
|
|
@ -3,7 +3,7 @@ User related entity for creating a token using application credentials
|
||||||
|
|
||||||
## Properties
|
## Properties
|
||||||
|
|
||||||
+ username: `hardiready` (string, required) - username of the app-user
|
+ username: `testuser` (string, required) - username of the app-user
|
||||||
+ password: `password` (string, required) - password of the app-user
|
+ password: `password` (string, required) - password of the app-user
|
||||||
|
|
||||||
# LoginResponse (object)
|
# LoginResponse (object)
|
||||||
|
|
|
@ -7,6 +7,7 @@ Awarding associating a decoration to a user
|
||||||
+ date: `2017-05-17T19:44:24.926Z` (string, required) - date when the awarding was requested
|
+ date: `2017-05-17T19:44:24.926Z` (string, required) - date when the awarding was requested
|
||||||
+ decorationId (Decoration, required) - populated decoration object that is given with the awarding
|
+ decorationId (Decoration, required) - populated decoration object that is given with the awarding
|
||||||
+ reason: `war dabei` (string, required) - reason for giving the awarding
|
+ reason: `war dabei` (string, required) - reason for giving the awarding
|
||||||
|
+ proposer (Proposer, required) - app user who requested this awarding, null if awarding was given directly
|
||||||
+ timestamp: `2017-05-17T19:44:28.751Z` (string, required) - creation date
|
+ timestamp: `2017-05-17T19:44:28.751Z` (string, required) - creation date
|
||||||
+ updatedAt: `"2017-05-17T19:44:28.751Z` (string, required) - version date
|
+ updatedAt: `"2017-05-17T19:44:28.751Z` (string, required) - version date
|
||||||
+ userId: `5918d2ca574b0b1d820a0b24` (string, required) - the unique id of the user who got this awarding
|
+ userId: `5918d2ca574b0b1d820a0b24` (string, required) - the unique id of the user who got this awarding
|
||||||
|
|
|
@ -0,0 +1,13 @@
|
||||||
|
# Promotion (object)
|
||||||
|
Representation of a promotion request for a army member
|
||||||
|
|
||||||
|
## Properties
|
||||||
|
+ _id: `5as7d05dcb90ce4da68c4f5f` (string, required) - unique id of the promotion request
|
||||||
|
+ confirmed: 0 (number, required) - number representing status of the promotion (0 - in progress, 1 - approved, 2 - rejected)
|
||||||
|
+ newRankLvl: 14 - new rank level that is requested in this promotion
|
||||||
|
+ oldRankLvl: 10 - old rank level of the user
|
||||||
|
+ proposer (Proposer, required) - app user who requested the promotion
|
||||||
|
+ timestamp: `2018-03-25T18:54:21.609Z` (string, required) - creation timestamp
|
||||||
|
+ updatedAt: `2018-03-25T18:54:21.609Z` (string, required) - version timestamp
|
||||||
|
+ userId (User, required) - populated user instance of user the promotion is requested for
|
||||||
|
+ __v: 0 (number, required) - version number of promotion instance
|
|
@ -2,7 +2,7 @@
|
||||||
A participant managed in the system
|
A participant managed in the system
|
||||||
|
|
||||||
## Properties
|
## Properties
|
||||||
+ _id: `5918d2ca574b0b1d820a0b24` (string, required) - unique id of the army member
|
+ _id: `5ab68d42f547ed304064e5f7` (string, required) - unique id of the army member
|
||||||
+ username: `Jagernaut` - the displayed username of the army member
|
+ username: `Jagernaut` - the displayed username of the army member
|
||||||
+ rankLvl: 22 (number, required) - rank level representing the rank
|
+ rankLvl: 22 (number, required) - rank level representing the rank
|
||||||
+ squadId (Squad, required) - populated squad which the army member is part of
|
+ squadId (Squad, required) - populated squad which the army member is part of
|
||||||
|
|
|
@ -1,5 +1,7 @@
|
||||||
# Data Structures
|
# Data Structures
|
||||||
|
|
||||||
|
:[Gists](_app-user.apib)
|
||||||
|
|
||||||
:[Gists](_army.apib)
|
:[Gists](_army.apib)
|
||||||
|
|
||||||
:[Gists](_auth.apib)
|
:[Gists](_auth.apib)
|
||||||
|
@ -8,6 +10,8 @@
|
||||||
|
|
||||||
:[Gists](_decoration.apib)
|
:[Gists](_decoration.apib)
|
||||||
|
|
||||||
|
:[Gists](_promotion.apib)
|
||||||
|
|
||||||
:[Gists](_squad.apib)
|
:[Gists](_squad.apib)
|
||||||
|
|
||||||
:[Gists](_user.apib)
|
:[Gists](_user.apib)
|
||||||
|
|
|
@ -10,6 +10,10 @@ FORMAT: 1A
|
||||||
|
|
||||||
:[Gists](base/datetime.apib)
|
:[Gists](base/datetime.apib)
|
||||||
|
|
||||||
|
# Group File Resources
|
||||||
|
|
||||||
|
:[Gists](base/file-resources.apib)
|
||||||
|
|
||||||
# Group Access
|
# Group Access
|
||||||
|
|
||||||
:[Gists](auth/signup.apib)
|
:[Gists](auth/signup.apib)
|
||||||
|
@ -18,6 +22,10 @@ FORMAT: 1A
|
||||||
|
|
||||||
# Group Account
|
# Group Account
|
||||||
|
|
||||||
|
# Group Army Overview
|
||||||
|
|
||||||
|
:[Gists](army-management/army.apib)
|
||||||
|
|
||||||
# Group Awardings
|
# Group Awardings
|
||||||
|
|
||||||
:[Gists](army-management/awardings.apib)
|
:[Gists](army-management/awardings.apib)
|
||||||
|
@ -30,16 +38,14 @@ FORMAT: 1A
|
||||||
|
|
||||||
# Group Logs
|
# Group Logs
|
||||||
|
|
||||||
# Group Overview
|
|
||||||
|
|
||||||
:[Gists](overview/army.apib)
|
|
||||||
|
|
||||||
# Group Players
|
# Group Players
|
||||||
|
|
||||||
# Group Ranks
|
# Group Ranks
|
||||||
|
|
||||||
# Group Requests
|
# Group Requests
|
||||||
|
|
||||||
|
:[Gists](army-management/promotions.apib)
|
||||||
|
|
||||||
# Group Squads
|
# Group Squads
|
||||||
|
|
||||||
# Group Users
|
# Group Users
|
||||||
|
|
|
@ -0,0 +1 @@
|
||||||
|
{"_id":{"$oid":"5ab68ceef547ed304064e5f6"},"squad":null,"permission":3,"activated":true,"username":"testuser","secret":"my secret","password":"$2a$10$wvgBbcckHrFu8Ctw8hSPNuFLoBy4sRubioyiK1NabOC0UgYD.KITi","timestamp":{"$date":"2018-03-24T17:37:50.668Z"},"updatedAt":{"$date":"2018-03-24T17:37:50.668Z"},"__v":0}
|
|
@ -0,0 +1 @@
|
||||||
|
{"_id":{"$oid":"5ab68d42f547ed304064e5f7"},"rankLvl":0,"squadId":null,"username":"user1","timestamp":{"$date":"2018-03-24T17:39:14.841Z"},"updatedAt":{"$date":"2018-03-24T17:39:14.841Z"},"__v":0}
|
|
@ -0,0 +1,29 @@
|
||||||
|
#!/usr/bin/env bash
|
||||||
|
|
||||||
|
########## IMPORT EXPORT/SCRIPT FOR DREDD TEST DATA ############
|
||||||
|
###----------------------------------------------------------###
|
||||||
|
###------------------ HOW TO USE THIS FILE ------------------###
|
||||||
|
###----------------------------------------------------------###
|
||||||
|
### 1. start express server with `npm run start-test` ###
|
||||||
|
### 2. import data by executing script: `./populate-data.sh` ###
|
||||||
|
### 3. change data in app as you need for tests ###
|
||||||
|
### 4. export data state with: `./populate-data.sh save` ###
|
||||||
|
################################################################
|
||||||
|
|
||||||
|
# execute script in its location folder
|
||||||
|
cd $(dirname $0)
|
||||||
|
|
||||||
|
# array of available collection names
|
||||||
|
col=(app_user awarding campaign decoration logBudget logFlag logKill logPoints logRespawn logRevive logTransport player promotion rank squad user war )
|
||||||
|
|
||||||
|
for i in "${col[@]}"
|
||||||
|
do
|
||||||
|
# provide date for restore process, if data import is needed
|
||||||
|
if [ "$1" == "save" ]
|
||||||
|
then
|
||||||
|
echo -e "$(date "+%Y-%m-%dT%T.%3N%z")\tTable: ${i}"
|
||||||
|
mongoexport --db cc-test --collection $i --out data/${i}.json;
|
||||||
|
else
|
||||||
|
mongoimport --db cc-test --collection $i --drop --file data/${i}.json
|
||||||
|
fi
|
||||||
|
done
|
|
@ -14,7 +14,7 @@
|
||||||
"start-test": "DEBUG='cc:*' NODE_ENV=test node server.js",
|
"start-test": "DEBUG='cc:*' NODE_ENV=test node server.js",
|
||||||
"api:compile-docs": "$(npm bin)/hercule apib/dev-doc.apib -o apib/documentation.apib",
|
"api:compile-docs": "$(npm bin)/hercule apib/dev-doc.apib -o apib/documentation.apib",
|
||||||
"api:publish-docs": "$(npm bin)/aglio --theme-variables slate -i ./apib/documentation.apib -o ../public/api-docs.html",
|
"api:publish-docs": "$(npm bin)/aglio --theme-variables slate -i ./apib/documentation.apib -o ../public/api-docs.html",
|
||||||
"api:test-docs": "$(npm bin)/dredd",
|
"api:test-docs": "npm run api:docs && ./apib/dredd/populate-data.sh && $(npm bin)/dredd",
|
||||||
"api:docs": "npm run api:compile-docs && npm run api:publish-docs"
|
"api:docs": "npm run api:compile-docs && npm run api:publish-docs"
|
||||||
},
|
},
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
|
|
|
@ -32,47 +32,30 @@ awarding.route('/')
|
||||||
if (req.query.inProgress) {
|
if (req.query.inProgress) {
|
||||||
filter.confirmed = 0;
|
filter.confirmed = 0;
|
||||||
}
|
}
|
||||||
if (req.query.simple) {
|
AwardingModel.find(filter, {}, {sort: {date: 'desc'}})
|
||||||
AwardingModel.find(filter, {}, {sort: {date: 'desc'}}, (err, items) => {
|
.populate('decorationId').populate('proposer', resultSet)
|
||||||
if (err) {
|
.exec((err, items) => {
|
||||||
err.status = codes.servererror;
|
if (err) {
|
||||||
return next(err);
|
err.status = codes.servererror;
|
||||||
// with return before (or after) the next(err) we prevent that the code continues here after next(err)
|
return next(err);
|
||||||
// has finished. this saves an extra else {..}
|
// with return before (or after) the next(err) we prevent that the code continues here
|
||||||
}
|
// after next(err) has finished. this saves an extra else {..}
|
||||||
// if the collection is empty we do not send empty arrays back.
|
}
|
||||||
if (items && items.length > 0) {
|
let results = [];
|
||||||
res.locals.items = items;
|
if (req.query.fractFilter) {
|
||||||
}
|
for (let item of items) {
|
||||||
res.locals.processed = true;
|
if (item.decorationId.fraction === req.query.fractFilter) {
|
||||||
next();
|
results.push(item);
|
||||||
});
|
|
||||||
} else {
|
|
||||||
AwardingModel.find(filter, {}, {sort: {date: 'desc'}})
|
|
||||||
.populate('decorationId').populate('proposer', resultSet)
|
|
||||||
.exec((err, items) => {
|
|
||||||
if (err) {
|
|
||||||
err.status = codes.servererror;
|
|
||||||
return next(err);
|
|
||||||
// with return before (or after) the next(err) we prevent that the code continues here
|
|
||||||
// after next(err) has finished. this saves an extra else {..}
|
|
||||||
}
|
|
||||||
let results = [];
|
|
||||||
if (req.query.fractFilter) {
|
|
||||||
for (let item of items) {
|
|
||||||
if (item.decorationId.fraction === req.query.fractFilter) {
|
|
||||||
results.push(item);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
res.locals.items = results;
|
|
||||||
} else {
|
|
||||||
res.locals.items = items;
|
|
||||||
}
|
}
|
||||||
|
res.locals.items = results;
|
||||||
|
} else {
|
||||||
|
res.locals.items = items;
|
||||||
|
}
|
||||||
|
|
||||||
res.locals.processed = true;
|
res.locals.processed = true;
|
||||||
next();
|
next();
|
||||||
});
|
});
|
||||||
}
|
|
||||||
})
|
})
|
||||||
|
|
||||||
.post(apiAuthenticationMiddleware, checkHl, (req, res, next) => {
|
.post(apiAuthenticationMiddleware, checkHl, (req, res, next) => {
|
||||||
|
|
|
@ -58,7 +58,7 @@ request.route('/award')
|
||||||
request.route('/promotion')
|
request.route('/promotion')
|
||||||
|
|
||||||
.get((req, res, next) => {
|
.get((req, res, next) => {
|
||||||
// TODO: add SQL authentication
|
// TODO: add SQL authentication?
|
||||||
const squadFilter = req.query.squadId;
|
const squadFilter = req.query.squadId;
|
||||||
const fractFilter = req.query.fractFilter;
|
const fractFilter = req.query.fractFilter;
|
||||||
const progressFilter = req.query.inProgress;
|
const progressFilter = req.query.inProgress;
|
||||||
|
|
|
@ -15,7 +15,8 @@
|
||||||
"test": "npm test --prefix ./api",
|
"test": "npm test --prefix ./api",
|
||||||
"e2e": "npm run deploy-static && concurrently \"npm run start-test --prefix ./api\" \"wait-on -t 60000 http://localhost:3001/ && npm run e2e --prefix ./static\" --success first --kill-others",
|
"e2e": "npm run deploy-static && concurrently \"npm run start-test --prefix ./api\" \"wait-on -t 60000 http://localhost:3001/ && npm run e2e --prefix ./static\" --success first --kill-others",
|
||||||
"start-e2e": "npm run deploy-static && npm run start-test --prefix ./api",
|
"start-e2e": "npm run deploy-static && npm run start-test --prefix ./api",
|
||||||
"test-e2e": "npm run e2e --prefix ./static"
|
"test-e2e": "npm run e2e --prefix ./static",
|
||||||
|
"test-api": "npm run api:test-docs --prefix ./api"
|
||||||
},
|
},
|
||||||
"dependencies": {},
|
"dependencies": {},
|
||||||
"devDependencies": {
|
"devDependencies": {
|
||||||
|
|
Loading…
Reference in New Issue