mirror of
https://github.com/PretendoNetwork/miiverse-api.git
synced 2026-08-25 01:54:11 -05:00
added basic community support
This commit is contained in:
committed by
jay.poff@outlook.com
parent
fd431a5f5a
commit
98bc104ef0
@@ -2,6 +2,8 @@ const mongoose = require('mongoose');
|
||||
const { mongoose: mongooseConfig } = require('./config.json');
|
||||
const { TOPIC } = require('./models/topic');
|
||||
const { ENDPOINT } = require('./models/endpoint');
|
||||
const { COMMUNITY } = require('./models/communities');
|
||||
const { POST } = require('./models/post');
|
||||
const { uri, database, options } = mongooseConfig;
|
||||
|
||||
let connection;
|
||||
@@ -45,16 +47,36 @@ async function getTopicByCommunityID(communityID) {
|
||||
|
||||
async function getCommunityByTitleID(title_id) {
|
||||
verifyConnected();
|
||||
|
||||
if (typeof communityID !== 'string') {
|
||||
return null;
|
||||
}
|
||||
|
||||
return TOPIC.findOne({
|
||||
return COMMUNITY.findOne({
|
||||
title_id: title_id
|
||||
});
|
||||
}
|
||||
|
||||
async function getCommunityByID(community_id) {
|
||||
verifyConnected();
|
||||
|
||||
return COMMUNITY.findOne({
|
||||
community_id: community_id
|
||||
});
|
||||
}
|
||||
|
||||
async function getPostsByCommunity(community, numberOfPosts) {
|
||||
verifyConnected();
|
||||
|
||||
return POST.find({
|
||||
title_id: community.title_id
|
||||
}).limit(numberOfPosts.value);
|
||||
}
|
||||
|
||||
async function getPostsByCommunityKey(community, numberOfPosts, search_key) {
|
||||
verifyConnected();
|
||||
console.log(community.title_id);
|
||||
return POST.find({
|
||||
title_id: community.title_id,
|
||||
search_key: search_key
|
||||
}).limit(numberOfPosts);
|
||||
}
|
||||
|
||||
async function getDiscoveryHosts() {
|
||||
verifyConnected();
|
||||
return ENDPOINT.findOne({
|
||||
@@ -73,6 +95,10 @@ module.exports = {
|
||||
connect,
|
||||
getTopicByName,
|
||||
getTopicByCommunityID,
|
||||
getCommunityByTitleID,
|
||||
getCommunityByID,
|
||||
getDiscoveryHosts,
|
||||
getPostsByCommunity,
|
||||
getPostsByCommunityKey,
|
||||
getServerConfig
|
||||
};
|
||||
@@ -0,0 +1,49 @@
|
||||
const { Schema, model } = require('mongoose');
|
||||
|
||||
const CommunitySchema = new Schema({
|
||||
empathy_count: {
|
||||
type: Number,
|
||||
default: 0
|
||||
},
|
||||
id: {
|
||||
type: Number,
|
||||
default: 0
|
||||
},
|
||||
has_shop_page: {
|
||||
type: Number,
|
||||
default: 0
|
||||
},
|
||||
icon: String,
|
||||
title_ids: {
|
||||
type: [Number],
|
||||
default: undefined
|
||||
},
|
||||
title_id: String,
|
||||
community_id: String,
|
||||
is_recommended: {
|
||||
type: Number,
|
||||
default: 0
|
||||
},
|
||||
name: String,
|
||||
});
|
||||
|
||||
CommunitySchema.methods.upEmpathy = async function() {
|
||||
const empathy = this.get('empathy_count');
|
||||
this.set('empathy_count', empathy + 1);
|
||||
|
||||
await this.save();
|
||||
};
|
||||
|
||||
CommunitySchema.methods.downEmpathy = async function() {
|
||||
const empathy = this.get('empathy_count');
|
||||
this.set('empathy_count', empathy - 1);
|
||||
|
||||
await this.save();
|
||||
};
|
||||
|
||||
const COMMUNITY = model('COMMUNITY', CommunitySchema);
|
||||
|
||||
module.exports = {
|
||||
CommunitySchema,
|
||||
COMMUNITY
|
||||
};
|
||||
@@ -9,6 +9,10 @@ const PostSchema = new Schema({
|
||||
type: [String],
|
||||
default: undefined
|
||||
},
|
||||
topic_tag: {
|
||||
type: [String],
|
||||
default: undefined
|
||||
},
|
||||
community_id: String,
|
||||
country_id: Number,
|
||||
created_at: String,
|
||||
@@ -52,7 +56,7 @@ const PostSchema = new Schema({
|
||||
default: 0
|
||||
},
|
||||
screen_name: String,
|
||||
title_id: Number,
|
||||
title_id: String,
|
||||
});
|
||||
|
||||
|
||||
|
||||
@@ -17,6 +17,7 @@ logger.info('[MIIVERSE] Creating \'discovery\' subdomain');
|
||||
router.use(subdomain('discovery.olv', discovery));
|
||||
logger.info('[MIIVERSE] Creating \'api\' subdomain');
|
||||
router.use(subdomain('api.olv', api));
|
||||
router.use(subdomain('d4c59198', api));
|
||||
|
||||
|
||||
logger.info('[MIIVERSE] Importing middleware');
|
||||
@@ -26,5 +27,6 @@ discovery.use(pnidMiddleware);
|
||||
// Setup routes
|
||||
discovery.use('/v1/endpoint', routes.DISCOVERY);
|
||||
api.use('/v1/posts', routes.POST);
|
||||
api.use('/v1/communities/', routes.COMMUNITY);
|
||||
|
||||
module.exports = router;
|
||||
@@ -1,38 +1,24 @@
|
||||
var express = require('express');
|
||||
var router = express.Router();
|
||||
const database = require('.../database');
|
||||
const database = require('../../../database');
|
||||
const comPostGen = require('../../../util/CommunityPostGen');
|
||||
const processHeaders = require('../../../util/processHeaders');
|
||||
|
||||
/* GET post titles. */
|
||||
router.get('/', function (req, res) {
|
||||
/* Parse out parameters from URL and headers */
|
||||
const communityID = parseInt(req.params[0].split('/')[0], 10);
|
||||
const paramPack = this.decodeParamPack(req.headers["x-nintendo-parampack"]);
|
||||
router.get('/0/posts', function (req, res) {
|
||||
database.connect().then(async e => {
|
||||
/* Parse out parameters from URL and headers */
|
||||
const paramPack = processHeaders.data.decodeParamPack(req.headers["x-nintendo-parampack"]);
|
||||
//"[0:1]=1407375153523200"
|
||||
let community = await database.getCommunityByTitleID(paramPack.title_id);
|
||||
/* Go to the database for posts. */
|
||||
let posts = await database.getPostsByCommunity(community, parseInt(req.query.limit));
|
||||
|
||||
/* Get community details. communityID is usually 0, for some reason. */
|
||||
let community = null;
|
||||
if (communityID === 0) {
|
||||
community = await database.getCommunityByTitleID(paramPack.title_id);
|
||||
} else {
|
||||
community = await DataStorage.getDataStorage()
|
||||
.getCommunityByID(communityID);
|
||||
}
|
||||
if (!community) {
|
||||
this.reqdie(res);
|
||||
return;
|
||||
}
|
||||
|
||||
/* Go to the database for posts. */
|
||||
const posts = await DataStorage.getDataStorage()
|
||||
.getPostsByCommunity(community, req.query.limit);
|
||||
if (!posts) {
|
||||
this.reqdie(res);
|
||||
return;
|
||||
}
|
||||
|
||||
/* Build formatted response and send it off. */
|
||||
const response = await ResponseGen.PostsResponse(posts, community);
|
||||
res.contentType("application/xml");
|
||||
res.send(response);
|
||||
/* Build formatted response and send it off. */
|
||||
let response = await comPostGen.PostsResponse(posts, community);
|
||||
res.contentType("application/xml");
|
||||
res.send(response);
|
||||
});
|
||||
});
|
||||
|
||||
module.exports = router;
|
||||
@@ -1,4 +1,5 @@
|
||||
module.exports = {
|
||||
DISCOVERY: require('./discovery'),
|
||||
POST: require('./post'),
|
||||
COMMUNITY: require('./communities'),
|
||||
};
|
||||
@@ -8,22 +8,33 @@ var upload = multer();
|
||||
|
||||
/* GET post titles. */
|
||||
router.post('/', upload.none(), function (req, res, next) {
|
||||
|
||||
let paramPack = req.get('x-nintendo-parampack');
|
||||
let paramPackData = processHeaders.data.decodeParamPack(paramPack);
|
||||
let paramPackData = processHeaders.data.decodeParamPack(req.headers["x-nintendo-parampack"]);
|
||||
/*let dec = Buffer.from(paramPack, "base64").toString("ascii");
|
||||
dec = dec.slice(1, -1).split("\\");
|
||||
const paramPackData = {};
|
||||
for (let i = 0; i < dec.length; i += 2) {
|
||||
paramPackData[dec[i].trim()] = dec[i + 1].trim();
|
||||
}*/
|
||||
const creationDate = moment().format('YYYY-MM-DDTHH:MM:SS');
|
||||
const creationDate = moment().format('YYYY-MM-DD HH:MM:SS');
|
||||
let appData = "";
|
||||
if (req.body.app_data) {
|
||||
appData = req.body.app_data.replace(/\0/g, "").trim();
|
||||
}
|
||||
let painting = "";
|
||||
if (req.body.painting) {
|
||||
painting = req.body.painting.replace(/\0/g, "").trim();
|
||||
}
|
||||
let screenshot = "";
|
||||
if (req.body.screenshot) {
|
||||
screenshot = req.body.screenshot.replace(/\0/g, "").trim();
|
||||
}
|
||||
const document = {
|
||||
body: req.body.body,
|
||||
app_data: req.body.app_data,
|
||||
painting: req.body.painting,
|
||||
screenshot: req.body.screenshot,
|
||||
app_data: appData,
|
||||
painting: painting,
|
||||
screenshot: screenshot,
|
||||
search_key: req.body.search_key,
|
||||
topic_tag: req.body.topic_tag,
|
||||
community_id: req.body.community_id,
|
||||
country_id: paramPackData.country_id,
|
||||
created_at: creationDate,
|
||||
|
||||
@@ -1,22 +1,11 @@
|
||||
const { ENDPOINT } = require('./models/endpoint');
|
||||
const database = require('./database');
|
||||
|
||||
|
||||
|
||||
const doc = {
|
||||
has_error: 0,
|
||||
version: 1,
|
||||
endpoint: {
|
||||
host: "host1",
|
||||
api_host: "host2",
|
||||
portal_host: "host3",
|
||||
n3ds_host: "host4"
|
||||
}
|
||||
};
|
||||
const newEndpoint = new ENDPOINT(doc);
|
||||
database.connect().then(async yeet => {
|
||||
const temp = await database.getServerConfig();
|
||||
console.log(temp);
|
||||
const temp = await database.getCommunityByID('0');
|
||||
console.log(temp.name);
|
||||
const temp2 = await database.getPostsByCommunityKey(temp, 2, 'Warawara_03');
|
||||
console.log(temp2[1].painting.length);
|
||||
});
|
||||
//database.getDiscoveryHosts().then(r => console.log(r.endpoint));
|
||||
|
||||
|
||||
@@ -9,39 +9,39 @@ class CommunityPostGen {
|
||||
.e("version", "1").up()
|
||||
.e("request_name", "posts").up()
|
||||
.e("topic")
|
||||
.e("community_id", community.id).up()
|
||||
.e("community_id", community.community_id).up()
|
||||
.up()
|
||||
.e("posts");
|
||||
for (let i = 0; i < posts.length; i++) {
|
||||
xml = xml.e("post")
|
||||
.e("app_data", posts[i].appData).up()
|
||||
.e("app_data", posts[i].app_data).up()
|
||||
.e("body", posts[i].body).up()
|
||||
.e("community_id", community.id).up()
|
||||
.e("community_id", community.community_id).up()
|
||||
.e("country_id", "254").up()
|
||||
.e("created_at", moment(posts[i].created).tz("GMT").format("YYYY-MM-DD hh:mm:ss")).up()
|
||||
.e("created_at", posts[i].created_at).up()
|
||||
.e("feeling_id", "1").up()
|
||||
.e("id", posts[i].id).up()
|
||||
.e("id", i + 1).up()
|
||||
.e("is_autopost", "0").up()
|
||||
.e("is_community_private_autopost", "0").up()
|
||||
.e("is_spoiler", "0").up()
|
||||
.e("is_app_jumpable", "0").up()
|
||||
.e("empathy_count", posts[i].empathy).up()
|
||||
.e("empathy_count", posts[i].empathy_count).up()
|
||||
.e("language_id", "1").up()
|
||||
.e("number", "0").up();
|
||||
if (posts[i].painting) {
|
||||
xml = xml.e("painting")
|
||||
.e("format", "tga").up()
|
||||
.e("content", posts[i].painting).up()
|
||||
.e("size", posts[i].paintingSz).up()
|
||||
.e("size", posts[i].painting.length).up()
|
||||
.e("url", "https://s3.amazonaws.com/olv-public/pap/WVW69koebmETvBVqm1").up()
|
||||
.up();
|
||||
}
|
||||
xml = xml.e("pid", posts[i].pid).up()
|
||||
xml = xml.e("pid", i + 1).up()
|
||||
.e("platform_id", "1").up()
|
||||
.e("region_id", "4").up()
|
||||
.e("reply_count", "0").up()
|
||||
.e("screen_name", posts[i].screenName).up()
|
||||
.e("title_id", posts[i].tid).up()
|
||||
.e("screen_name", posts[i].screen_name).up()
|
||||
.e("title_id", posts[i].title_id).up()
|
||||
.up();
|
||||
}
|
||||
|
||||
@@ -61,27 +61,27 @@ class CommunityPostGen {
|
||||
.e("has_error", "0").up()
|
||||
.e("version", "1").up()
|
||||
.e("post");
|
||||
if (post.appData) {
|
||||
xml = xml.e("app_data", post.appData).up();
|
||||
if (post.app_data) {
|
||||
xml = xml.e("app_data", post.app_data).up();
|
||||
}
|
||||
xml = xml.e("body", post.body).up()
|
||||
.e("community_id", post.communityID).up()
|
||||
.e("community_id", post.community_id).up()
|
||||
.e("country_id", "254").up()
|
||||
.e("created_at", moment(post.created).tz("GMT").format("YYYY-MM-DD hh:mm:ss")).up()
|
||||
.e("created_at", post.created_at).up()
|
||||
.e("feeling_id", "1").up()
|
||||
.e("id", post.id).up()
|
||||
.e("is_autopost", "0").up()
|
||||
.e("is_community_private_autopost", "0").up()
|
||||
.e("is_spoiler", "0").up()
|
||||
.e("is_app_jumpable", "0").up()
|
||||
.e("empathy_count", post.empathy).up()
|
||||
.e("empathy_count", post.empathy_count).up()
|
||||
.e("language_id", "1").up()
|
||||
.e("number", "0").up();
|
||||
if (post.painting) {
|
||||
xml = xml.e("painting")
|
||||
.e("format", "tga").up()
|
||||
.e("content", post.painting).up()
|
||||
.e("size", post.paintingSz).up()
|
||||
.e("size", post.painting.length).up()
|
||||
.e("url", "https://s3.amazonaws.com/olv-public/pap/WVW69koebmETvBVqm1").up()
|
||||
.up();
|
||||
}
|
||||
@@ -89,8 +89,8 @@ class CommunityPostGen {
|
||||
.e("platform_id", "1").up()
|
||||
.e("region_id", "4").up()
|
||||
.e("reply_count", "0").up()
|
||||
.e("screen_name", post.screenName).up()
|
||||
.e("title_id", post.tid).up()
|
||||
.e("screen_name", post.screen_name).up()
|
||||
.e("title_id", post.title_id).up()
|
||||
.up();
|
||||
return xml.end({ pretty: true, allowEmpty: true });
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user