-
Notifications
You must be signed in to change notification settings - Fork 52
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
feat(wallet_event): added relevant queries for wallet_event
- Loading branch information
Showing
18 changed files
with
511 additions
and
22 deletions.
There are no files selected for viewing
22 changes: 11 additions & 11 deletions
22
database/migrations/20200901213252-CreateEnumWalletEventType.js
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -1,27 +1,27 @@ | ||
|
||
|
||
let dbm; | ||
let type; | ||
let seed; | ||
|
||
/** | ||
* We receive the dbmigrate dependency from dbmigrate initially. | ||
* This enables us to not have to rely on NODE_PATH. | ||
*/ | ||
exports.setup = function(options, seedLink) { | ||
* We receive the dbmigrate dependency from dbmigrate initially. | ||
* This enables us to not have to rely on NODE_PATH. | ||
*/ | ||
exports.setup = function (options, seedLink) { | ||
dbm = options.dbmigrate; | ||
type = dbm.dataType; | ||
seed = seedLink; | ||
}; | ||
|
||
exports.up = function(db) { | ||
return db.runSql("CREATE TYPE wallet_event_type AS ENUM ('trust_request', 'trust_request_granted', 'trust_request_cancelled_by_originator', 'trust_request_cancelled_by_actor', 'trust_request_cancelled_by_target', 'transfer_requested', 'transfer_request_cancelled_by_source', 'transfer_request_cancelled_by_destination', 'transfer_request_cancelled_by_originator', 'transfer_pending_cancelled_by_source', 'transfer_pending_cancelled_by_destination', 'transfer_pending_cancelled_by_requestor', 'transfer_completed', 'transfer_failed')"); | ||
exports.up = function (db) { | ||
return db.runSql( | ||
"CREATE TYPE wallet_event_type AS ENUM ('trust_request', 'trust_request_granted', 'trust_request_cancelled_by_originator', 'trust_request_cancelled_by_actor', 'trust_request_cancelled_by_target', 'transfer_requested', 'transfer_request_cancelled_by_source', 'transfer_request_cancelled_by_destination', 'transfer_request_cancelled_by_originator', 'transfer_pending_cancelled_by_source', 'transfer_pending_cancelled_by_destination', 'transfer_pending_cancelled_by_requestor', 'transfer_completed', 'transfer_failed','login','wallet_created)", | ||
); | ||
}; | ||
|
||
exports.down = function(db) { | ||
return db.runSql("DROP TYPE wallet_event_type"); | ||
exports.down = function (db) { | ||
return db.runSql('DROP TYPE wallet_event_type'); | ||
}; | ||
|
||
exports._meta = { | ||
"version": 1 | ||
version: 1, | ||
}; |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,22 @@ | ||
const EventService = require('../../services/EventService'); | ||
|
||
const { eventsGetQuerySchema } = require('./schemas'); | ||
|
||
const eventsGet = async (req, res) => { | ||
await eventsGetQuerySchema.validateAsync(req.query, { abortEarly: false }); | ||
|
||
const { limit, since, wallet } = req.query; | ||
|
||
const eventService = new EventService(); | ||
|
||
const events = await eventService.getAllEvents({ | ||
limit, | ||
since, | ||
wallet, | ||
walletLoginId: req.wallet_id, | ||
}); | ||
|
||
res.status(200).json({ events }); | ||
}; | ||
|
||
module.exports = { eventsGet }; |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,9 @@ | ||
const Joi = require('joi'); | ||
|
||
const eventsGetQuerySchema = Joi.object({ | ||
limit: Joi.number().required(), | ||
since: Joi.date().iso(), | ||
wallet: Joi.string(), | ||
}); | ||
|
||
module.exports = { eventsGetQuerySchema }; |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,46 @@ | ||
const log = require('loglevel'); | ||
// const Joi = require('joi'); | ||
const EventRepository = require('../repositories/EventRepository'); | ||
|
||
class Event { | ||
constructor(session) { | ||
this._eventRepository = new EventRepository(session); | ||
} | ||
|
||
async getAllEvents(walletId, limit, since) { | ||
const filter = { | ||
and: [], | ||
}; | ||
|
||
if (walletId) { | ||
filter.and.push({ | ||
wallet_id: walletId, | ||
}); | ||
} | ||
|
||
if (since) { | ||
filter.and.push({ after: { 'wallet_event.created_at': since } }); | ||
} | ||
|
||
const events = await this._eventRepository.getAllEvents(filter, limit); | ||
|
||
return events.map((eventObject) => { | ||
return { | ||
...eventObject, | ||
}; | ||
}); | ||
} | ||
|
||
async logEvent({ loggedInWalletId, type, payload }) { | ||
log.info(loggedInWalletId); | ||
const event = await this._eventRepository.create({ | ||
wallet_id: loggedInWalletId, | ||
type, | ||
payload, | ||
}); | ||
|
||
return event; | ||
} | ||
} | ||
|
||
module.exports = Event; |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,27 @@ | ||
const log = require('loglevel'); | ||
const BaseRepository = require('./BaseRepository'); | ||
|
||
class EventRepository extends BaseRepository { | ||
constructor(session) { | ||
super('wallet_event', session); | ||
this._tableName = 'wallet_event'; | ||
this._session = session; | ||
} | ||
|
||
async getAllEvents(filter, limitOptions) { | ||
log.info(filter); | ||
let promise = this._session | ||
.getDB() | ||
.select('wallet_event.*') | ||
.table('wallet_event') | ||
.where((builder) => this.whereBuilder(filter, builder)); | ||
|
||
if (limitOptions && limitOptions.limit) { | ||
promise = promise.limit(limitOptions.limit); | ||
} | ||
|
||
return promise; | ||
} | ||
} | ||
|
||
module.exports = EventRepository; |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,15 @@ | ||
const express = require('express'); | ||
|
||
const router = express.Router(); | ||
const routerWrapper = express.Router(); | ||
const { | ||
handlerWrapper, | ||
verifyJWTHandler, | ||
apiKeyHandler, | ||
} = require('../utils/utils'); | ||
const { eventsGet } = require('../handlers/eventHandler'); | ||
|
||
router.get('/', handlerWrapper(eventsGet)); | ||
|
||
routerWrapper.use('/events', apiKeyHandler, verifyJWTHandler, router); | ||
module.exports = routerWrapper; |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,38 @@ | ||
const Event = require('../models/Event'); | ||
const WalletService = require('./WalletService'); | ||
const Session = require('../infra/database/Session'); | ||
const HttpError = require('../utils/HttpError'); | ||
|
||
class EventService { | ||
constructor() { | ||
this._session = new Session(); | ||
this._event = new Event(this._session); | ||
this._walletService = new WalletService(); | ||
} | ||
|
||
async getAllEvents({ wallet, limit, since, walletLoginId }) { | ||
let events = []; | ||
|
||
if (wallet) { | ||
const walletInstance = await this._walletService.getByName(wallet); | ||
const isSub = await this._walletService.hasControlOver( | ||
walletLoginId, | ||
walletInstance.id, | ||
); | ||
if (!isSub) { | ||
throw new HttpError( | ||
403, | ||
'Wallet does not belong to the logged in wallet', | ||
); | ||
} | ||
|
||
events = await this._event.getAllEvents(walletInstance.id, limit, since); | ||
} else { | ||
events = await this._event.getAllEvents(walletLoginId, limit, since); | ||
} | ||
|
||
return events; | ||
} | ||
} | ||
|
||
module.exports = EventService; |
Oops, something went wrong.