|
1 |
| -import { createServiceProvider, MongoService } from '@devmx/shared-data-source'; |
2 |
| -import { EditableEntity, QueryParams } from '@devmx/shared-api-interfaces'; |
| 1 | +import { QueryParams, EditableEntity } from '@devmx/shared-api-interfaces'; |
3 | 2 | import { EventsService } from '@devmx/event-domain/server';
|
4 | 3 | import { getModelToken } from '@nestjs/mongoose';
|
5 | 4 | import { EventCollection } from '../schemas';
|
6 | 5 | import { Query } from 'mongoose';
|
| 6 | +import { |
| 7 | + MongoService, |
| 8 | + createServiceProvider, |
| 9 | + objectId, |
| 10 | +} from '@devmx/shared-data-source'; |
7 | 11 |
|
8 | 12 | export class EventsMongoServiceImpl
|
9 | 13 | extends MongoService<EventCollection>
|
10 | 14 | implements EventsService
|
11 | 15 | {
|
| 16 | + async findMyEvents(params: QueryParams<EventCollection>) { |
| 17 | + const { page = 0, size = 10, filter, sort } = params; |
| 18 | + |
| 19 | + const skip = page * size; |
| 20 | + const where = this.applyFilter(filter ?? {}); |
| 21 | + const order = this.applySort(sort ?? {}); |
| 22 | + |
| 23 | + const { owner = '' } = filter ?? {}; |
| 24 | + |
| 25 | + const query = this.entityModel |
| 26 | + .find({ leaders: { $in: [objectId(String(owner))] } }) |
| 27 | + .sort(order) |
| 28 | + .skip(skip) |
| 29 | + .limit(size); |
| 30 | + |
| 31 | + const entities = await this.applyPopulate(query).exec(); |
| 32 | + |
| 33 | + const data = entities.map((item) => item.toJSON()); |
| 34 | + const items = await this.entityModel.countDocuments(where).exec(); |
| 35 | + const pages = Math.ceil(items / size); |
| 36 | + |
| 37 | + return { data, items, pages }; |
| 38 | + } |
| 39 | + |
12 | 40 | async findFrom(date: Date, params: QueryParams<EventCollection>) {
|
13 | 41 | const { page = 0, size = 10, filter, sort } = params;
|
14 | 42 |
|
@@ -50,7 +78,11 @@ export class EventsMongoServiceImpl
|
50 | 78 | ): U {
|
51 | 79 | const presentations = (data.presentations ?? []).map((p) => p.id);
|
52 | 80 | const leaders = (data.leaders ?? []).map((p) => p.id);
|
| 81 | + |
53 | 82 | const owner = typeof data.owner === 'string' ? data.owner : data.owner.id;
|
| 83 | + |
| 84 | + if (!data.id) leaders.push(owner); |
| 85 | + |
54 | 86 | return { ...data, owner, leaders, presentations } as U;
|
55 | 87 | }
|
56 | 88 | }
|
|
0 commit comments