Skip to content

Commit d40f6e6

Browse files
committed
refactor: improve interfaces and expandAuthor
1 parent 0915870 commit d40f6e6

File tree

3 files changed

+24
-15
lines changed

3 files changed

+24
-15
lines changed

models/polls/poll.schema.ts

Lines changed: 7 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,18 +1,23 @@
11
import { Document, Schema, Types } from 'mongoose';
2+
import { User } from '../users/user.schema'
23

34
interface ImageData {
45
url: string;
56
votes: number;
67
}
78

8-
export interface PollSchema extends Document {
9-
authorId: string;
9+
export interface Poll {
10+
author: User;
1011
contents: {
1112
left: ImageData;
1213
right: ImageData;
1314
};
1415
}
1516

17+
export interface PollSchema extends Document, Omit<Poll, 'author'> {
18+
authorId: string;
19+
}
20+
1621

1722
const imageDataSchema = {
1823
url: String,

models/users/user.schema.ts

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,13 @@
11
import { Document, Schema } from "mongoose"
22

3-
export interface UserSchema extends Document {
3+
export interface User {
44
name: string;
55
avatarUrl?: string;
66
age?: number;
77
}
88

9+
export interface UserSchema extends Document, User {}
10+
911
export const userSchema = new Schema({
1012
name: String,
1113
avatarUrl: {

services/polls/polls.hooks.ts

Lines changed: 14 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -2,20 +2,22 @@ import { HookContext } from '@feathersjs/feathers';
22
import bluebird from 'bluebird';
33
import _ from 'lodash';
44

5-
import { PollSchema } from '../../models/polls/poll.schema';
6-
import { UserSchema } from '../../models/users/user.schema';
5+
import { Poll, PollSchema } from '../../models/polls/poll.schema';
6+
import { User } from '../../models/users/user.schema';
77
import UserModel from '../../models/users/user.model';
88

99

10-
interface Poll extends Omit<PollSchema, 'authorId'> {
11-
author: UserSchema;
12-
}
13-
1410
const expandAuthor = async (poll: PollSchema): Promise<Poll | null> => {
15-
return UserModel.findById(poll.authorId).then((author: UserSchema | null): Poll | null => {
16-
if (author) return _.merge(_.omit(poll, 'authorId'), { author });
17-
return null;
18-
});
11+
return UserModel.findById(poll.authorId)
12+
.lean<User>()
13+
.exec()
14+
.then((author: User | null): Poll | null => {
15+
return author && _.merge(_.omit(poll, 'authorId'), { author });
16+
})
17+
.catch(err => {
18+
console.error(err);
19+
return err;
20+
});
1921
};
2022

2123
const expandAuthorHook = async (context: HookContext): Promise<HookContext> => {
@@ -24,8 +26,8 @@ const expandAuthorHook = async (context: HookContext): Promise<HookContext> => {
2426
};
2527

2628
const expandAuthorManyHook = async (context: HookContext): Promise<HookContext> => {
27-
context.result = await bluebird.map(context.result, (poll: any) => expandAuthor(poll));
28-
console.log(context.result);
29+
const polls = await bluebird.map(context.result, (poll: any) => expandAuthor(poll));
30+
context.result = _.compact(polls);
2931
return context;
3032
};
3133

0 commit comments

Comments
 (0)