Skip to content

Commit

Permalink
feat(wallet_event): added relevant queries for wallet_event
Browse files Browse the repository at this point in the history
  • Loading branch information
joonaun93 committed Jul 31, 2023
1 parent a4e8d23 commit e8f4973
Show file tree
Hide file tree
Showing 18 changed files with 511 additions and 22 deletions.
22 changes: 11 additions & 11 deletions database/migrations/20200901213252-CreateEnumWalletEventType.js
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,
};
17 changes: 8 additions & 9 deletions database/migrations/20200901222910-CreateTableWallet-Event.js
Original file line number Diff line number Diff line change
@@ -1,20 +1,18 @@


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) {
exports.up = function (db) {
return db.createTable('wallet_event', {
id: { type: 'uuid', primaryKey: true, notNull: true },
wallet_id: { type: 'uuid', notNull: true },
Expand All @@ -24,13 +22,14 @@ exports.up = function(db) {
notNull: true,
defaultValue: new String('now()'),
},
payload: { type: 'json', notNull: true },
});
};

exports.down = function(db) {
exports.down = function (db) {
return db.dropTable('wallet_event');
};

exports._meta = {
"version": 1
version: 1,
};
22 changes: 22 additions & 0 deletions server/handlers/eventHandler/index.js
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 };
9 changes: 9 additions & 0 deletions server/handlers/eventHandler/schemas.js
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 };
4 changes: 4 additions & 0 deletions server/handlers/transferHandler/index.js
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,7 @@ const {
} = require('./schemas');

const transferPost = async (req, res) => {
// need to add to the events table
await transferPostSchema.validateAsync(req.body, { abortEarly: false });
const transferService = new TransferService();

Expand All @@ -20,6 +21,7 @@ const transferPost = async (req, res) => {
};

const transferIdAcceptPost = async (req, res) => {
// need to add to the events table
await transferIdParamSchema.validateAsync(req.params, { abortEarly: false });

const transferService = new TransferService();
Expand All @@ -32,6 +34,7 @@ const transferIdAcceptPost = async (req, res) => {
};

const transferIdDeclinePost = async (req, res) => {
// need to add to the events table
await transferIdParamSchema.validateAsync(req.params, { abortEarly: false });

const transferService = new TransferService();
Expand All @@ -44,6 +47,7 @@ const transferIdDeclinePost = async (req, res) => {
};

const transferIdDelete = async (req, res) => {
// need to add to the events table
await transferIdParamSchema.validateAsync(req.params, { abortEarly: false });

const transferService = new TransferService();
Expand Down
4 changes: 4 additions & 0 deletions server/handlers/trustHandler/index.js
Original file line number Diff line number Diff line change
Expand Up @@ -32,6 +32,7 @@ const trustGet = async (req, res) => {
};

const trustPost = async (req, res) => {
// need to add to the events table
await trustPostSchema.validateAsync(req.body, { abortEarly: false });

const trustService = new TrustService();
Expand All @@ -46,6 +47,7 @@ const trustPost = async (req, res) => {
};

const trustRelationshipAccept = async (req, res) => {
// need to add to the events table
await trustRelationshipIdSchema.validateAsync(req.params, {
abortEarly: false,
});
Expand All @@ -60,6 +62,7 @@ const trustRelationshipAccept = async (req, res) => {
};

const trustRelationshipDecline = async (req, res) => {
// need to add to the events table
await trustRelationshipIdSchema.validateAsync(req.params, {
abortEarly: false,
});
Expand All @@ -74,6 +77,7 @@ const trustRelationshipDecline = async (req, res) => {
};

const trustRelationshipDelete = async (req, res) => {
// need to add to the events table
await trustRelationshipIdSchema.validateAsync(req.params, {
abortEarly: false,
});
Expand Down
1 change: 1 addition & 0 deletions server/handlers/walletHandler/index.js
Original file line number Diff line number Diff line change
Expand Up @@ -55,6 +55,7 @@ const walletGetTrustRelationships = async (req, res) => {
};

const walletPost = async (req, res) => {
// need to add to the events table
await walletPostSchema.validateAsync(req.body, { abortEarly: false });

const walletService = new WalletService();
Expand Down
46 changes: 46 additions & 0 deletions server/models/Event.js
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;
5 changes: 5 additions & 0 deletions server/models/Transfer.js
Original file line number Diff line number Diff line change
Expand Up @@ -36,6 +36,8 @@ class Transfer {

async getById({ transferId, walletLoginId }) {
const transfers = await this.getTransfers({ walletLoginId, transferId });

log.info(transferId, walletLoginId, transfers);
return transfers[0];
}

Expand Down Expand Up @@ -176,6 +178,9 @@ class Transfer {
// TODO: add boolean for claim in transferRepository
claim: claimBoolean,
});

log.info(transfer);
log.info('here');
log.debug('now, deal with tokens');
await this._token.completeTransfer(tokens, transfer, claimBoolean);
return this.constructor.removeWalletIds(transfer);
Expand Down
4 changes: 4 additions & 0 deletions server/models/Trust.js
Original file line number Diff line number Diff line change
Expand Up @@ -11,6 +11,10 @@ class Trust {
this._trustRepository = new TrustRepository(session);
}

async getTrustRelationshipsById(id) {
return this._trustRepository.getById(id);
}

/*
* Get trust relationships by filters, setting filter to undefined to allow all data
*/
Expand Down
27 changes: 27 additions & 0 deletions server/repositories/EventRepository.js
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;
15 changes: 15 additions & 0 deletions server/routes/eventRouter.js
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;
1 change: 1 addition & 0 deletions server/routes/index.js
Original file line number Diff line number Diff line change
Expand Up @@ -4,4 +4,5 @@ module.exports = [
require('./transferRouter'),
require('./trustRouter'),
require('./walletRouter'),
require('./eventRouter'),
];
10 changes: 10 additions & 0 deletions server/services/AuthService.js
Original file line number Diff line number Diff line change
@@ -1,9 +1,13 @@
const WalletService = require('./WalletService');
const Event = require('../models/Event');
const Session = require('../infra/database/Session');
const JWTService = require('./JWTService');
const HashService = require('./HashService');

class AuthService {
static async signIn({ wallet, password }) {
const session = new Session();
const event = new Event(session);
const walletService = new WalletService();
const walletObject = await walletService.getByIdOrName(wallet);

Expand All @@ -12,6 +16,12 @@ class AuthService {
if (hash === walletObject.password) {
const token = JWTService.sign(walletObject);

await event.logEvent({
loggedInWalletId: walletObject.id,
type: 'login',
payload: {},
});

return token;
}
return false;
Expand Down
38 changes: 38 additions & 0 deletions server/services/EventService.js
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;
Loading

0 comments on commit e8f4973

Please sign in to comment.