gamoraa-mongostore
Version:
Plugin provides firestore kind of functionality but based on mongodb.
123 lines • 4.38 kB
JavaScript
;
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
return new (P || (P = Promise))(function (resolve, reject) {
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
step((generator = generator.apply(thisArg, _arguments || [])).next());
});
};
var __importDefault = (this && this.__importDefault) || function (mod) {
return (mod && mod.__esModule) ? mod : { "default": mod };
};
Object.defineProperty(exports, "__esModule", { value: true });
const { ReplSet } = require('mongodb-topology-manager');
const { Schema, Types } = require('mongoose');
const mongoose_1 = __importDefault(require("mongoose"));
const gamoraa_1 = __importDefault(require("gamoraa"));
const mongo_store_service_1 = __importDefault(require("../src/mongo-store-service"));
const authorSchema = new Schema({
name: { type: String, required: true },
age: { type: Number, required: false },
stories: [{ type: Schema.ObjectId, ref: 'storeis' }],
});
const storySchema = new Schema({
title: { type: String, required: true },
description: { type: String, required: false },
rating: { type: Number, required: true },
creator: { type: Types.ObjectId, ref: 'authors' },
});
/**
*
*/
function startServer() {
return __awaiter(this, void 0, void 0, function* () {
console.log(new Date(), `mongoose version: ${mongoose_1.default.version}`);
yield setupReplicaSet();
const uri = 'mongodb://localhost:31000,localhost:31001,localhost:31002/test_db?replicaSet=rs0';
const conn = yield createDatabaseConnection(uri);
const authorModel = conn.model('authors', authorSchema);
const storyModel = conn.model('storeis', storySchema);
const server = new gamoraa_1.default({
address: '0.0.0.0',
port: 50051,
});
server.register(mongo_store_service_1.default, {
connection: conn,
modelsOptions: [
{
model: authorModel,
},
{
model: storyModel,
},
],
});
server.startInsecure();
});
}
/**
*
* @param uri
*/
function createDatabaseConnection(uri) {
return __awaiter(this, void 0, void 0, function* () {
try {
const conn = yield mongoose_1.default.createConnection(uri, {
useUnifiedTopology: true,
useNewUrlParser: true,
useCreateIndex: true,
poolSize: 7,
useFindAndModify: false,
});
return conn;
}
catch (error) {
console.log(error);
throw error;
}
});
}
/**
*
*/
function setupReplicaSet() {
return __awaiter(this, void 0, void 0, function* () {
const bind_ip = 'localhost';
// Starts a 3-node replica set on ports 31000, 31001, 31002, replica set
// name is "rs0".
const replSet = new ReplSet('mongod', [
{
options: {
port: 31000,
dbpath: `${__dirname}/../../data/db/31000`,
bind_ip,
},
},
{
options: {
port: 31001,
dbpath: `${__dirname}/../../data/db/31001`,
bind_ip,
},
},
{
options: {
port: 31002,
dbpath: `${__dirname}/../../data/db/31002`,
bind_ip,
},
},
], { replSet: 'rs0' });
// Initialize the replica set
yield replSet.purge();
yield replSet.stop();
yield replSet.start();
console.log(new Date(), 'Replica set started...');
});
}
startServer()
.then(_ => console.log('started'))
.catch(err => console.log(err));
//# sourceMappingURL=example.js.map