Skip to content

Commit 0a49c7e

Browse files
committed
fix(event): corrige listagem de eventos para líderes vinculados
1 parent 6b34725 commit 0a49c7e

File tree

15 files changed

+155
-8
lines changed

15 files changed

+155
-8
lines changed

packages/account/feature-auth/src/lib/containers/authentication/authentication.container.ts

-3
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,3 @@
1-
import { LowerDirective, TrimDirective } from '@devmx/shared-ui-global/forms';
21
import { MatStepper, MatStepperModule } from '@angular/material/stepper';
32
import { AuthenticationFacade } from '@devmx/account-data-access';
43
import { MatFormFieldModule } from '@angular/material/form-field';
@@ -31,8 +30,6 @@ import {
3130
MatButtonModule,
3231
MatInputModule,
3332
MatCardModule,
34-
LowerDirective,
35-
TrimDirective,
3633
RouterLink,
3734
AsyncPipe,
3835
],

packages/event/data-access/src/lib/application/event.facade.ts

+7
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,7 @@ import {
1010
FindEventByIDUseCase,
1111
FindAllEventsUseCase,
1212
CopyEventUseCase,
13+
FindMyEventsUseCase,
1314
} from '@devmx/event-domain/client';
1415

1516
export class EventFacade extends EntityFacade<Event> {
@@ -23,6 +24,7 @@ export class EventFacade extends EntityFacade<Event> {
2324
constructor(
2425
private createEventUseCase: CreateEventUseCase,
2526
private findEventsUseCase: FindEventsUseCase,
27+
private findMyEventsUseCase: FindMyEventsUseCase,
2628
private findAllEventsUseCase: FindAllEventsUseCase,
2729
private findEventByIDUseCase: FindEventByIDUseCase,
2830
private updateEventUseCase: UpdateEventUseCase,
@@ -49,6 +51,10 @@ export class EventFacade extends EntityFacade<Event> {
4951
this.onLoad(this.findAllEventsUseCase.execute(this.state.params));
5052
}
5153

54+
loadMyEvents() {
55+
this.onLoad(this.findMyEventsUseCase.execute(this.state.params));
56+
}
57+
5258
loadOne(id: string) {
5359
this.onLoadOne(this.findEventByIDUseCase.execute(id));
5460
}
@@ -86,6 +92,7 @@ export function provideEventFacade() {
8692
return createClientProvider(EventFacade, [
8793
CreateEventUseCase,
8894
FindEventsUseCase,
95+
FindMyEventsUseCase,
8996
FindAllEventsUseCase,
9097
FindEventByIDUseCase,
9198
UpdateEventUseCase,

packages/event/data-access/src/lib/infrastructure/event.http.service.impl.ts

+5
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,11 @@ export class EventHttpServiceImpl
2020
return this.http.get<Page<Event>>(url.join('?'));
2121
}
2222

23+
findMyEvents(params: QueryParams<Event>) {
24+
const url = [`${this.url}/my`, createQueryParams(params)];
25+
return this.http.get<Page<Event>>(url.join('?'));
26+
}
27+
2328
copy(id: string, data: CopyEvent) {
2429
const url = [this.url, id, 'copy'];
2530
return this.http.patch<Event>(url.join('/'), data);

packages/event/data-access/src/lib/providers/event.ts

+2
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@ import {
77
provideFindAllEventsUseCase,
88
provideFindEventByIDUseCase,
99
provideFindEventsUseCase,
10+
provideFindMyEventsUseCase,
1011
provideUpdateEventUseCase,
1112
} from '@devmx/event-domain/client';
1213

@@ -16,6 +17,7 @@ export function provideEvent() {
1617

1718
provideCreateEventUseCase(),
1819
provideFindEventsUseCase(),
20+
provideFindMyEventsUseCase(),
1921
provideFindAllEventsUseCase(),
2022
provideFindEventByIDUseCase(),
2123
provideUpdateEventUseCase(),

packages/event/data-source/src/lib/application/events.facade.ts

+17-1
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,9 @@
1-
import { EventDto, CreateEventDto, UpdateEventDto, CopyEventDto } from '../dtos';
1+
import {
2+
EventDto,
3+
CreateEventDto,
4+
UpdateEventDto,
5+
CopyEventDto,
6+
} from '../dtos';
27
import { Event } from '@devmx/shared-api-interfaces';
38
import { plainToInstance } from 'class-transformer';
49
import {
@@ -8,6 +13,7 @@ import {
813
FindEventByIDUseCase,
914
FindEventsFromUseCase,
1015
FindEventsUseCase,
16+
FindMyEventsUseCase,
1117
UpdateEventUseCase,
1218
} from '@devmx/event-domain/server';
1319
import {
@@ -20,6 +26,7 @@ export class EventsFacade {
2026
constructor(
2127
private createEventUseCase: CreateEventUseCase,
2228
private findEventsUseCase: FindEventsUseCase,
29+
private findMyEventsUseCase: FindMyEventsUseCase,
2330
private findEventsFromUseCase: FindEventsFromUseCase,
2431
private findEventByIDUseCase: FindEventByIDUseCase,
2532
private updateEventUseCase: UpdateEventUseCase,
@@ -43,6 +50,14 @@ export class EventsFacade {
4350
return new PageDto(events, items, pages);
4451
}
4552

53+
async findMyEvents(params: QueryParamsDto<Event>) {
54+
const { data, items, pages } = await this.findMyEventsUseCase.execute(
55+
params
56+
);
57+
const events = plainToInstance(EventDto, data);
58+
return new PageDto(events, items, pages);
59+
}
60+
4661
async findFrom(date: Date, params: QueryParamsDto<Event>) {
4762
const { data, items, pages } = await this.findEventsFromUseCase.execute([
4863
date,
@@ -72,6 +87,7 @@ export function provideEventsFacade() {
7287
return createServerProvider(EventsFacade, [
7388
CreateEventUseCase,
7489
FindEventsUseCase,
90+
FindMyEventsUseCase,
7591
FindEventsFromUseCase,
7692
FindEventByIDUseCase,
7793
UpdateEventUseCase,

packages/event/data-source/src/lib/infrastructure/events.mongo.service.impl.ts

+34-2
Original file line numberDiff line numberDiff line change
@@ -1,14 +1,42 @@
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';
32
import { EventsService } from '@devmx/event-domain/server';
43
import { getModelToken } from '@nestjs/mongoose';
54
import { EventCollection } from '../schemas';
65
import { Query } from 'mongoose';
6+
import {
7+
MongoService,
8+
createServiceProvider,
9+
objectId,
10+
} from '@devmx/shared-data-source';
711

812
export class EventsMongoServiceImpl
913
extends MongoService<EventCollection>
1014
implements EventsService
1115
{
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+
1240
async findFrom(date: Date, params: QueryParams<EventCollection>) {
1341
const { page = 0, size = 10, filter, sort } = params;
1442

@@ -50,7 +78,11 @@ export class EventsMongoServiceImpl
5078
): U {
5179
const presentations = (data.presentations ?? []).map((p) => p.id);
5280
const leaders = (data.leaders ?? []).map((p) => p.id);
81+
5382
const owner = typeof data.owner === 'string' ? data.owner : data.owner.id;
83+
84+
if (!data.id) leaders.push(owner);
85+
5486
return { ...data, owner, leaders, presentations } as U;
5587
}
5688
}

packages/event/data-source/src/lib/providers/event.ts

+2
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@ import {
88
provideFindEventByIDUseCase,
99
provideFindEventsFromUseCase,
1010
provideCopyEventUseCase,
11+
provideFindMyEventsUseCase,
1112
} from '@devmx/event-domain/server';
1213

1314
export function provideEvent() {
@@ -16,6 +17,7 @@ export function provideEvent() {
1617

1718
provideCreateEventUseCase(),
1819
provideFindEventsUseCase(),
20+
provideFindMyEventsUseCase(),
1921
provideFindEventsFromUseCase(),
2022
provideFindEventByIDUseCase(),
2123
provideUpdateEventUseCase(),

packages/event/domain/src/client/services/event.ts

+2
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,8 @@ export abstract class EventService extends EntityService<Event> {
1414

1515
abstract findAll(params: QueryParams<Event>): Observable<Page<Event>>;
1616

17+
abstract findMyEvents(params: QueryParams<Event>): Observable<Page<Event>>;
18+
1719
abstract createRSVP(event: string, status: RSVPStatus): Observable<RSVP>;
1820

1921
abstract findRSVPByEvent(event: string): Observable<RSVP[]>;
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,22 @@
1+
import { createUseCaseProvider } from '@devmx/shared-util-data/client';
2+
import { EventService } from '../services';
3+
import {
4+
Page,
5+
Event,
6+
UseCase,
7+
QueryParams,
8+
} from '@devmx/shared-api-interfaces';
9+
10+
export class FindMyEventsUseCase
11+
implements UseCase<QueryParams<Event>, Page<Event>>
12+
{
13+
constructor(private eventService: EventService) {}
14+
15+
execute(params: QueryParams<Event>) {
16+
return this.eventService.findMyEvents(params);
17+
}
18+
}
19+
20+
export function provideFindMyEventsUseCase() {
21+
return createUseCaseProvider(FindMyEventsUseCase, [EventService]);
22+
}

packages/event/domain/src/client/use-cases/index.ts

+1
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@ export * from './delete-event';
55
export * from './find-all-events';
66
export * from './find-event-by-id';
77
export * from './find-events';
8+
export * from './find-my-events';
89
export * from './find-rsvp-by-event';
910
export * from './find-rsvp-confirmed-by-event';
1011
export * from './update-event';

packages/event/domain/src/server/services/events.ts

+2-1
Original file line numberDiff line numberDiff line change
@@ -6,5 +6,6 @@ export abstract class EventsService extends EntityService<Event> {
66
date: Date,
77
params: QueryParams<Event>
88
): Promise<Page<Event>>;
9-
// abstract findPast(params: QueryParams<Event>): Promise<Page<Event>>;
9+
10+
abstract findMyEvents(params: QueryParams<Event>): Promise<Page<Event>>;
1011
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,48 @@
1+
import { createUseCaseProvider } from '@devmx/shared-util-data/server';
2+
import { EventsService } from '../services';
3+
import {
4+
Event,
5+
Page,
6+
UseCase,
7+
QueryParams,
8+
} from '@devmx/shared-api-interfaces';
9+
10+
export class FindMyEventsUseCase
11+
implements UseCase<QueryParams<Event>, Page<Event>>
12+
{
13+
constructor(private eventsService: EventsService) {}
14+
15+
async execute(params: QueryParams<Event>) {
16+
if (params.filter) {
17+
if (params.filter.format) {
18+
params.filter.format = new RegExp(params.filter.format, 'i');
19+
} else {
20+
delete params.filter.format;
21+
}
22+
23+
if (params.filter.title) {
24+
params.filter.title = new RegExp(params.filter.title, 'i');
25+
} else {
26+
delete params.filter.title;
27+
}
28+
29+
if (params.filter.city) {
30+
params.filter.city = params.filter.city.toString();
31+
} else {
32+
delete params.filter.city;
33+
}
34+
35+
if (params.filter.description) {
36+
params.filter.description = new RegExp(params.filter.description, 'i');
37+
} else {
38+
delete params.filter.description;
39+
}
40+
}
41+
42+
return await this.eventsService.findMyEvents(params);
43+
}
44+
}
45+
46+
export function provideFindMyEventsUseCase() {
47+
return createUseCaseProvider(FindMyEventsUseCase, [EventsService]);
48+
}

packages/event/domain/src/server/use-cases/index.ts

+1
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@ export * from './delete-event';
55
export * from './find-event-by-id';
66
export * from './find-events-from';
77
export * from './find-events';
8+
export * from './find-my-events';
89
export * from './find-past-events';
910
export * from './find-rsvp-by-event';
1011
export * from './find-rsvp-confirmed-by-event';

packages/event/feature-admin/src/lib/containers/my-events/my-events.container.ts

+1-1
Original file line numberDiff line numberDiff line change
@@ -70,7 +70,7 @@ export class MyEventsContainer {
7070

7171
this.eventFacade.setParams({ page, size, filter });
7272

73-
this.eventFacade.loadAll();
73+
this.eventFacade.loadMyEvents();
7474
};
7575

7676
openRSVP(event: string) {

packages/event/resource/src/lib/controllers/events.ts

+11
Original file line numberDiff line numberDiff line change
@@ -93,6 +93,17 @@ export class EventsController {
9393
}
9494
}
9595

96+
@Get('my')
97+
@Allowed()
98+
@ApiPage(EventDto)
99+
async findMyEvents(@Query() params: QueryParamsDto<Event>) {
100+
try {
101+
return await this.eventsFacade.findMyEvents(params);
102+
} catch (err) {
103+
throw exceptionByError(err);
104+
}
105+
}
106+
96107
@Get('all')
97108
@Allowed()
98109
@ApiPage(EventDto)

0 commit comments

Comments
 (0)