Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Feat/address book #36

Merged
merged 11 commits into from
Nov 17, 2023
Prev Previous commit
Next Next commit
feat(address-book): add nicknames on find vault by id response
phbarao committed Nov 10, 2023
commit 2b9fc4f9202d87aceb5c1f376d055641f80f537b
6 changes: 6 additions & 0 deletions src/modules/addressBook/services.ts
Original file line number Diff line number Diff line change
@@ -89,6 +89,12 @@ export class AddressBookService implements IAddressBookService {
nickname: `${this._filter.nickname}`,
});

this._filter.userIds &&
this._filter.userIds.length &&
queryBuilder.andWhere('ab.user_id IN (:...userIds)', {
userIds: this._filter.userIds,
});

this._filter.q &&
queryBuilder.andWhere(
new Brackets(qb =>
1 change: 1 addition & 0 deletions src/modules/addressBook/types.ts
Original file line number Diff line number Diff line change
@@ -39,6 +39,7 @@ export interface IFilterAddressBookParams {
createdBy?: string;
contactAddress?: string;
nickname?: string;
userIds?: string[];
}

interface ICreateAddressBookRequestSchema extends ValidatedRequestSchema {
26 changes: 24 additions & 2 deletions src/modules/predicate/controller.ts
Original file line number Diff line number Diff line change
@@ -1,9 +1,11 @@
import AddressBook from '@src/models/AddressBook';
import { Predicate } from '@src/models/Predicate';
import Role from '@src/models/Role';

import { error } from '@utils/error';
import { Responses, bindMethods, successful } from '@utils/index';

import { IAddressBookService } from '../addressBook/types';
import { IUserService } from '../configs/user/types';
import {
ICreatePredicateRequest,
@@ -17,10 +19,16 @@ import {
export class PredicateController {
private predicateService: IPredicateService;
private userService: IUserService;
private addressBookService: IAddressBookService;

constructor(predicateService: IPredicateService, userService: IUserService) {
constructor(
predicateService: IPredicateService,
userService: IUserService,
addressBookService: IAddressBookService,
) {
this.predicateService = predicateService;
this.userService = userService;
this.addressBookService = addressBookService;
bindMethods(this);
}

@@ -69,7 +77,21 @@ export class PredicateController {

async findById({ params: { id }, user }: IFindByIdRequest) {
try {
const response = await this.predicateService.findById(id, user.address);
const predicate = await this.predicateService.findById(id, user.address);
const membersIds = predicate.members.map(member => member.id);
const favorites = (await this.addressBookService
.filter({ createdBy: user.id, userIds: membersIds })
.list()) as AddressBook[];

const response = {
...predicate,
members: predicate.members.map(member => ({
...member,
nickname:
favorites?.find(({ user }) => user.id === member.id)?.nickname ??
undefined,
})),
};

return successful(response, Responses.Ok);
} catch (e) {
4 changes: 3 additions & 1 deletion src/modules/predicate/routes.ts
Original file line number Diff line number Diff line change
@@ -4,21 +4,23 @@ import { authMiddleware } from '@src/middlewares';

import { handleResponse } from '@utils/index';

import { AddressBookService } from '../addressBook/services';
import { UserService } from '../configs/user/service';
import { PredicateController } from './controller';
import { PredicateService } from './services';
import { validateAddPredicatePayload } from './validations';

const router = Router();
const predicateService = new PredicateService();
const addressBookService = new AddressBookService();
const userService = new UserService();
const {
create,
findById,
list,
findByAddress,
delete: deleteService,
} = new PredicateController(predicateService, userService);
} = new PredicateController(predicateService, userService, addressBookService);

router.use(authMiddleware);

1 change: 1 addition & 0 deletions src/modules/predicate/services.ts
Original file line number Diff line number Diff line change
@@ -76,6 +76,7 @@ export class PredicateService implements IPredicateService {
.select([
...this.predicateFieldsSelection,
'p.configurable',
'members.id',
'members.avatar',
'members.address',
'owner.id',