Skip to content

Commit

Permalink
Merge pull request #83 from infinitybase/staging
Browse files Browse the repository at this point in the history
Staging
  • Loading branch information
guimroque authored Mar 8, 2024
2 parents bd300b7 + b6a3d2b commit a3d3abb
Show file tree
Hide file tree
Showing 10 changed files with 146 additions and 18 deletions.
4 changes: 2 additions & 2 deletions package.json
Original file line number Diff line number Diff line change
Expand Up @@ -27,7 +27,7 @@
"axios": "1.5.1",
"bcrypt": "5.1.0",
"body-parser": "1.20.2",
"bsafe": "0.0.45",
"bsafe": "0.0.49",
"cheerio": "1.0.0-rc.12",
"class-validator": "0.14.0",
"cookie-parser": "1.4.6",
Expand All @@ -37,7 +37,7 @@
"dotenv": "16.4.5",
"express": "4.17.1",
"express-joi-validation": "5.0.0",
"fuels": "0.73.0",
"fuels": "0.74.0",
"joi": "17.4.0",
"jsonwebtoken": "9.0.1",
"morgan": "1.10.0",
Expand Down
1 change: 0 additions & 1 deletion src/modules/addressBook/controller.ts
Original file line number Diff line number Diff line change
Expand Up @@ -81,7 +81,6 @@ export class AddressBookController {

return successful(newContact, Responses.Ok);
} catch (e) {
console.log(e);
return error(e.error, e.statusCode);
}
}
Expand Down
9 changes: 7 additions & 2 deletions src/modules/predicate/controller.ts
Original file line number Diff line number Diff line change
Expand Up @@ -147,7 +147,13 @@ export class PredicateController {
.paginate(undefined)
.list()
.then((data: Predicate[]) => data[0]);
return successful(response, Responses.Ok);

const _response = await this.predicateService.findById(
response.id,
undefined,
);

return successful(_response, Responses.Ok);
} catch (e) {
return error(e.error, e.statusCode);
}
Expand Down Expand Up @@ -182,7 +188,6 @@ export class PredicateController {
});

const predicate = await this.predicateService.findById(address, undefined);
console.log(predicate);

const instance = await this.predicateService.instancePredicate(predicate.id);
const balance = await instance.getBalance();
Expand Down
2 changes: 2 additions & 0 deletions src/modules/predicate/services.ts
Original file line number Diff line number Diff line change
Expand Up @@ -41,6 +41,8 @@ export class PredicateService implements IPredicateService {
'p.provider',
'p.chainId',
'p.configurable',
'p.bytes',
'p.abi',
];

filter(filter: IPredicateFilterParams) {
Expand Down
107 changes: 101 additions & 6 deletions src/modules/transaction/controller.ts
Original file line number Diff line number Diff line change
@@ -1,17 +1,12 @@
import { ITransactionResume, TransactionStatus } from 'bsafe';
import { Provider, Signer, hashMessage } from 'fuels';

import AddressBook from '@src/models/AddressBook';
import { PermissionRoles, Workspace } from '@src/models/Workspace';
import {
Unauthorized,
UnauthorizedErrorTitles,
} from '@src/utils/error/Unauthorized';
import { IPagination } from '@src/utils/pagination';
import {
validatePermissionVault,
validatePermissionGeneral,
} from '@src/utils/permissionValidate';
import { validatePermissionGeneral } from '@src/utils/permissionValidate';

import {
NotificationTitle,
Expand All @@ -35,13 +30,15 @@ import { WorkspaceService } from '../workspace/services';
import { TransactionService } from './services';
import {
ICloseTransactionRequest,
ICreateTransactionHistoryRequest,
ICreateTransactionRequest,
IFindTransactionByHashRequest,
IFindTransactionByIdRequest,
IListRequest,
ISendTransactionRequest,
ISignByIdRequest,
ITransactionService,
TransactionHistory,
} from './types';

export class TransactionController {
Expand Down Expand Up @@ -194,6 +191,104 @@ export class TransactionController {
}
}

async createHistory({ params: { id } }: ICreateTransactionHistoryRequest) {
try {
const response = await this.transactionService
.findById(id)
.then(async (data: Transaction) => {
return TransactionController.formatTransactionsHistory(data);
});
return successful(response, Responses.Ok);
} catch (e) {
return error(e.error, e.statusCode);
}
}

static async formatTransactionsHistory(data: Transaction) {
const userService = new UserService();
const results = [];
const _witnesses = data.witnesses.filter(
witness =>
witness.status === WitnessesStatus.DONE ||
witness.status === WitnessesStatus.REJECTED,
);

const witnessRejected = data.witnesses.filter(
witness => witness.status === WitnessesStatus.REJECTED,
);

results.push({
type: TransactionHistory.CREATED,
date: data.createdAt,
owner: {
id: data.createdBy.id,
avatar: data.createdBy.avatar,
address: data.createdBy.address,
},
});

for await (const witness of _witnesses) {
const { avatar, id, address } = await userService.findByAddress(
witness.account,
);

results.push({
type:
witness.status === WitnessesStatus.REJECTED
? TransactionHistory.DECLINE
: TransactionHistory.SIGN,
date: witness.updatedAt,
owner: {
id,
avatar,
address,
},
});
}

if (data.status === TransactionStatus.SUCCESS) {
results.push({
type: TransactionHistory.SEND,
date: data.sendTime,
owner: {
id: data.createdBy.id,
avatar: data.createdBy.avatar,
address: data.createdBy.address,
},
});
}

if (data.status === TransactionStatus.DECLINED && !witnessRejected) {
results.push({
type: TransactionHistory.DECLINE,
date: data.updatedAt,
owner: {
id: data.createdBy.id,
avatar: data.createdBy.avatar,
address: data.createdBy.address,
},
});
}

if (data.status === TransactionStatus.FAILED) {
results.push({
type: TransactionHistory.FAILED,
date: data.updatedAt,
owner: {
id: data.createdBy.id,
avatar: data.createdBy.avatar,
address: data.createdBy.address,
},
});
}

// results.sort((a, b) => {
// return new Date(a.date).getTime() - new Date(b.date).getTime();
// });

return results;
}

async findById({ params: { id } }: IFindTransactionByIdRequest) {
try {
const response = await this.transactionService
Expand Down
2 changes: 2 additions & 0 deletions src/modules/transaction/routes.ts
Original file line number Diff line number Diff line change
Expand Up @@ -38,6 +38,7 @@ const {
signByID,
findByHash,
verifyOnChain,
createHistory,
} = new TransactionController(
transactionService,
predicateService,
Expand All @@ -58,5 +59,6 @@ router.put('/close/:id', validateCloseTransactionPayload, handleResponse(close))
router.post('/send/:id', handleResponse(send));
router.post('/verify/:id', handleResponse(verifyOnChain));
router.put('/signer/:id', validateSignerByIdPayload, handleResponse(signByID));
router.get('/history/:id', handleResponse(createHistory));

export default router;
14 changes: 10 additions & 4 deletions src/modules/transaction/services.ts
Original file line number Diff line number Diff line change
Expand Up @@ -6,15 +6,15 @@ import {
Vault,
} from 'bsafe';
import {
hexlify,
Provider,
TransactionRequest,
transactionRequestify,
TransactionResponse,
hexlify,
transactionRequestify,
} from 'fuels';
import { Brackets } from 'typeorm';

import { sendMail, EmailTemplateType } from '@src/utils/EmailSender';
import { EmailTemplateType, sendMail } from '@src/utils/EmailSender';

import {
NotificationTitle,
Expand Down Expand Up @@ -91,7 +91,13 @@ export class TransactionService implements ITransactionService {
async findById(id: string): Promise<Transaction> {
return await Transaction.findOne({
where: { id },
relations: ['assets', 'witnesses', 'predicate', 'predicate.members'],
relations: [
'assets',
'witnesses',
'predicate',
'predicate.members',
'createdBy',
],
})
.then(transaction => {
if (!transaction) {
Expand Down
16 changes: 15 additions & 1 deletion src/modules/transaction/types.ts
Original file line number Diff line number Diff line change
@@ -1,9 +1,9 @@
import {
ITransactionResume,
ITransactionSummary,
TransactionStatus,
Transfer,
Vault,
ITransactionSummary,
} from 'bsafe';
import { ContainerTypes, ValidatedRequestSchema } from 'express-joi-validation';
import { Provider, TransactionRequest } from 'fuels';
Expand All @@ -25,6 +25,15 @@ export enum Sort {
desc = 'DESC',
}

export enum TransactionHistory {
FAILED = 'FAILED',
CREATED = 'CREATED',
SIGN = 'SIGNATURE',
DECLINE = 'DECLINE',
CANCEL = 'CANCEL',
SEND = 'SEND',
}

export interface ICreateTransactionPayload {
name: string;
hash: string;
Expand Down Expand Up @@ -93,6 +102,10 @@ interface ICreateTransactionRequestSchema extends ValidatedRequestSchema {
[ContainerTypes.Body]: ICreateTransactionPayload;
}

interface ICreateTransactionHistoryRequestSchema extends ValidatedRequestSchema {
[ContainerTypes.Params]: { id: string };
}

interface IUpdateTransactionRequestSchema extends ValidatedRequestSchema {
[ContainerTypes.Body]: Omit<IUpdateTransactionPayload, 'hash'>;
[ContainerTypes.Params]: { id: string };
Expand Down Expand Up @@ -156,6 +169,7 @@ export interface ITCreateService
}

export type ICreateTransactionRequest = AuthValidatedRequest<ICreateTransactionRequestSchema>;
export type ICreateTransactionHistoryRequest = AuthValidatedRequest<ICreateTransactionHistoryRequestSchema>;
export type IUpdateTransactionRequest = AuthValidatedRequest<IUpdateTransactionRequestSchema>;
export type IDeleteTransactionRequest = AuthValidatedRequest<IDeleteTransactionRequestSchema>;
export type ICloseTransactionRequest = AuthValidatedRequest<ICloseTransactionRequestSchema>;
Expand Down
8 changes: 7 additions & 1 deletion src/modules/witness/services.ts
Original file line number Diff line number Diff line change
Expand Up @@ -67,7 +67,13 @@ export class WitnessService implements IWitnessService {
}

async update(id: string, payload: IUpdateWitnessPayload): Promise<Witness> {
return await Witness.update({ id }, payload)
return await Witness.update(
{ id },
{
...payload,
updatedAt: new Date(),
},
)
.then(async () => {
return await this.findById(id);
})
Expand Down
1 change: 0 additions & 1 deletion src/server/index.ts
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,6 @@ import { BSafe } from 'bsafe';

import App from './app';
import Bootstrap from './bootstrap';
import { IconUtils } from '@utils/icons';

const start = async () => {
const app = new App();
Expand Down

0 comments on commit a3d3abb

Please sign in to comment.