Skip to content

Commit d0d771e

Browse files
committed
venue create-service endpoint
1 parent 028fd8e commit d0d771e

10 files changed

Lines changed: 238 additions & 21 deletions

File tree

src/party/idocument.js

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -114,7 +114,7 @@ class IDocument extends EventEmitter {
114114
* @returns {object}
115115
*/
116116
async mergeData(input){
117-
return this.setData(Object.assign({}, this.data, input))
117+
return await this.setData(Object.assign({}, this.data, input))
118118
}
119119

120120
/**
@@ -139,8 +139,11 @@ class IDocument extends EventEmitter {
139139
delete value.__v
140140

141141
await this.setData(value)
142+
debug('data set')
142143
await this.party.update(value)
144+
debug('doc updated')
143145
await this.pull()
146+
debug('doc pulled')
144147
}
145148

146149

@@ -298,7 +301,7 @@ class IDocument extends EventEmitter {
298301
const newMsg = this.party.cache.findById(this.type, this.id)
299302
const oldMsg = Object.assign({}, this.getData())
300303

301-
debug('new message', newMsg)
304+
debug('new message', event.event, newMsg)
302305

303306
switch (event.event){
304307
case 'remove':

src/service/iservice.js

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@ const gitRepoInfo = require('git-repo-info')
77
const BouncerDb = require('@dataparty/bouncer-db')
88
const mongoose = BouncerDb.mongoose()
99
const json2ts = require('json-schema-to-typescript')
10+
const { build } = require('@hapi/joi')
1011
const debug = require('debug')('dataparty.service.IService')
1112

1213
module.exports = class IService {
@@ -59,6 +60,9 @@ module.exports = class IService {
5960
}
6061
}
6162

63+
importBuild(buildOutput){
64+
this.compiled = buildOutput
65+
}
6266

6367
/**
6468
*
@@ -83,7 +87,7 @@ module.exports = class IService {
8387
}
8488

8589
addEndpoint(endpoint_path){
86-
debug('andEndpoint', endpoint_path)
90+
debug('addEndpoint', endpoint_path)
8791
const endpoint = require(endpoint_path)
8892
const name = endpoint.Name
8993

Lines changed: 86 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,86 @@
1+
const Joi = require('@hapi/joi')
2+
const Hoek = require('@hapi/hoek')
3+
const {Message, Routines} = require('@dataparty/crypto')
4+
const debug = require('debug')('dataparty.endpoint.create-service')
5+
6+
const IEndpoint = require('../../service/iendpoint')
7+
const { exist } = require('@hapi/joi')
8+
9+
module.exports = class CreateSrvEndpoint extends IEndpoint {
10+
11+
static get Name(){
12+
return 'create-service'
13+
}
14+
15+
16+
static get Description(){
17+
return 'Create venue service'
18+
}
19+
20+
static get MiddlewareConfig(){
21+
return {
22+
pre: {
23+
decrypt: false,
24+
validate: Joi.object().keys(null)
25+
},
26+
post: {
27+
encrypt: false,
28+
validate: Joi.object().keys(null).description('any output allowed')
29+
}
30+
}
31+
}
32+
33+
static async run(ctx){
34+
35+
ctx.debug('hello')
36+
debug('echo')
37+
ctx.debug('ctx.input', ctx.input)
38+
39+
const compiledSrv = JSON.parse(ctx.input.service)
40+
const serviceId = compiledSrv.package.name + '-' + compiledSrv.package.version
41+
debug('addService', serviceId)
42+
43+
let srvDoc = (await ctx.party.find()
44+
.type('venue_srv')
45+
.where('name').equals(compiledSrv.package.name)
46+
.exec())[0]
47+
48+
49+
50+
if(!srvDoc){
51+
debug('creating service')
52+
srvDoc = await ctx.party.createDocument('venue_srv', {
53+
name: compiledSrv.package.name,
54+
'created': (new Date()).toISOString(),
55+
package: compiledSrv.package,
56+
schemas: compiledSrv.schemas,
57+
endpoints: compiledSrv.endpoints,
58+
midddleware: compiledSrv.middleware,
59+
middleware_order: compiledSrv.middleware_order
60+
})
61+
62+
debug('service created')
63+
}
64+
else{
65+
debug('updating service')
66+
debug(srvDoc.data)
67+
await srvDoc.mergeData({
68+
package: compiledSrv.package,
69+
//schemas: compiledSrv.schemas,
70+
//endpoints: compiledSrv.endpoints,
71+
//midddleware: compiledSrv.middleware,
72+
middleware_order: compiledSrv.middleware_order
73+
})
74+
75+
debug(srvDoc.data)
76+
77+
try{
78+
await srvDoc.save()
79+
}
80+
catch(err){}
81+
debug('updated service')
82+
}
83+
84+
return {srv:srvDoc.data}
85+
}
86+
}

src/venue/schema/venue_service.js

Lines changed: 65 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,65 @@
1+
'use strict'
2+
3+
const Hoek = require('hoek')
4+
//const BouncerDb = require('@dataparty/bouncer-db')
5+
/*
6+
require('mongoose-schema-jsonschema')(BouncerDb.mongoose())
7+
BouncerDb.mongoose().plugin(require("mongoose-ajv-plugin"))
8+
*/
9+
const debug = require('debug')('venue.venue_srv')
10+
11+
const Dataparty = require('../../service')
12+
13+
const Utils = Dataparty.ISchema.Utils
14+
15+
16+
class VenueSrv extends Dataparty.ISchema {
17+
18+
static get Type () { return 'venue_srv' }
19+
20+
static get Schema(){
21+
return {
22+
//project: Utils.actor(['venue_project']),
23+
name: {type: String, required: true},
24+
created: Utils.created,
25+
//owner: Utils.actor(['user']),
26+
package: {
27+
name: String,
28+
version: String,
29+
githash: String,
30+
branch: String
31+
},
32+
schemas: {
33+
Package: {},
34+
IndexSettings: {},
35+
JSONSchema: {},
36+
Permissions: {}
37+
},
38+
endpoints: {},
39+
middleware: {
40+
pre: {},
41+
post: {}
42+
},
43+
middleware_order: {
44+
pre: [String],
45+
post: [String]
46+
}
47+
}
48+
}
49+
50+
static setupSchema(schema){
51+
schema.index({ name: 1 }, {unique: true})
52+
return schema
53+
}
54+
55+
static permissions (context) {
56+
return {
57+
read: false,
58+
new: false,
59+
change: false
60+
}
61+
}
62+
}
63+
64+
65+
module.exports = VenueSrv

src/venue/venue-host.js

Lines changed: 52 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -7,30 +7,73 @@ const BouncerClientModels = require('@dataparty/bouncer-model/dist/bouncer-model
77

88
const VenueService = require('./venue-service')
99

10+
11+
class ExampleService extends Dataparty.IService {
12+
constructor(opts){
13+
super(opts)
14+
15+
this.addMiddleware(Dataparty.middleware_paths.pre.decrypt)
16+
this.addMiddleware(Dataparty.middleware_paths.pre.validate)
17+
18+
this.addMiddleware(Dataparty.middleware_paths.post.validate)
19+
this.addMiddleware(Dataparty.middleware_paths.post.encrypt)
20+
21+
this.addEndpoint(Dataparty.endpoint_paths.echo)
22+
this.addEndpoint(Dataparty.endpoint_paths.secureecho)
23+
this.addEndpoint(Dataparty.endpoint_paths.identity)
24+
this.addEndpoint(Dataparty.endpoint_paths.version)
25+
}
26+
27+
}
28+
29+
30+
1031
async function main(){
1132

12-
const uri = 'mongodb://localhost:27017/server-party-test'
33+
const uri = 'mongodb://localhost:27017/venue-test'
1334
debug('db location', uri)
1435

15-
let party = new Dataparty.MongoParty({
16-
uri,
17-
model: BouncerClientModels,
18-
serverModels: BouncerServerModels,
19-
config: new Dataparty.Config.MemoryConfig()
20-
})
36+
37+
38+
const exampleSrv = new ExampleService({ name: '@dataparty/nested-example', version: '0.0.1' })
39+
const compiledExampleSrv = await exampleSrv.compile(Path.join(__dirname,'../../dataparty'), true)
40+
2141

2242
const service = new VenueService({ name: '@dataparty/venue', version: '0.0.1' })
2343

44+
2445
const build = await service.compile(Path.join(__dirname,'../../dataparty'), true)
2546

26-
debug('built')
47+
48+
debug('compiled')
49+
50+
console.log(Object.keys(BouncerServerModels))
51+
52+
const serverModels = {
53+
Utils: BouncerServerModels.Utils,
54+
Model: BouncerServerModels.Model,
55+
Types: {
56+
...BouncerServerModels.Types,
57+
BanList: require('./schema/ban_list'),
58+
VenueSrv: require('./schema/venue_service')
59+
}
60+
}
61+
62+
let party = new Dataparty.MongoParty({
63+
uri,
64+
model: build.schemas,
65+
serverModels,
66+
config: new Dataparty.Config.MemoryConfig()
67+
})
68+
69+
debug('partying')
2770

2871
const runner = new Dataparty.ServiceRunner({
2972
party, service,
3073
sendFullErrors: true
3174
})
3275

33-
const host = new Dataparty.ServiceHost({runner})
76+
const host = new Dataparty.ServiceHost({runner, trust_proxy: true})
3477

3578
await party.start()
3679
await runner.start()

src/venue/venue-service.js

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@ class VenueService extends DatapartySrv.IService {
88
super(opts)
99

1010
this.addSchema(Path.join(__dirname, './schema/ban_list.js'))
11+
this.addSchema(Path.join(__dirname, './schema/venue_service.js'))
1112

1213
this.addMiddleware(DatapartySrv.middleware_paths.pre.decrypt)
1314
this.addMiddleware(DatapartySrv.middleware_paths.pre.validate)
@@ -17,6 +18,8 @@ class VenueService extends DatapartySrv.IService {
1718

1819
this.addEndpoint(DatapartySrv.endpoint_paths.identity)
1920
this.addEndpoint(DatapartySrv.endpoint_paths.version)
21+
22+
this.addEndpoint(Path.join(__dirname, './endpoints/create-service.js'))
2023
}
2124

2225
}

test/test-local-db.js

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -23,9 +23,12 @@ async function main(){
2323

2424

2525
if(!user){
26-
user = await local.createDocument('user', {name: 'tester'})
26+
debug('creating document')
27+
user = await local.createDocument('user', {name: 'tester', created: Date.now()})
28+
}
29+
else{
30+
debug('loaded document')
2731
}
28-
2932

3033
console.log(user.data)
3134
process.exit()

test/test-server-party-generic-model.js

Lines changed: 8 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@ const Dataparty = require('../src')
44

55
async function main(){
66

7-
const uri = 'mongodb://localhost:27017/server-party-test'
7+
const uri = 'mongodb://localhost:27017/server-party-generics-test'
88
debug('db location', uri)
99

1010
let party = new Dataparty.MongoParty({
@@ -21,17 +21,22 @@ async function main(){
2121
.where('name').equals('tester')
2222
.exec())[0]
2323

24-
24+
25+
2526
if(!user){
27+
debug('creating document')
2628
user = await party.createDocument('user', {
2729
name: 'tester',
2830
'created': (new Date()).toISOString(),
2931
profile: {
3032
'created': (new Date()).toISOString()
3133
}
3234
})
35+
debug('created document')
36+
}
37+
else{
38+
debug('loaded document')
3339
}
34-
3540

3641
console.log(user.data)
3742
process.exit()

test/test-server-party.js

Lines changed: 8 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -24,9 +24,14 @@ async function main(){
2424
.exec())[0]
2525

2626

27-
if(!user){
28-
user = await party.createDocument('user', {name: 'tester'})
29-
}
27+
if(!user){
28+
debug('creating document')
29+
user = await party.createDocument('user', {name: 'tester', created: Date.now()})
30+
debug('created document')
31+
}
32+
else{
33+
debug('loaded document')
34+
}
3035

3136

3237
console.log(user.data)

test/test-service-host.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -39,7 +39,7 @@ async function main(){
3939

4040
const build = await service.compile(Path.join(__dirname,'../dataparty'), true)
4141

42-
debug('built')
42+
debug('built', Object.keys(build))
4343

4444
const runner = new Dataparty.ServiceRunner({
4545
party, service,

0 commit comments

Comments
 (0)