Skip to content

Commit 442be65

Browse files
committed
feat(album): envia email notificando sobre marcação em foto
1 parent 67e6f61 commit 442be65

File tree

35 files changed

+335
-143
lines changed

35 files changed

+335
-143
lines changed

apps/devmx/public/portal-devpr-mx.svg

+24
Loading
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,4 @@
11
<div>
2-
<h2>{{value}}</h2>
2+
<h3>{{value}}</h3>
33
</div>
4+
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,12 @@
1+
<div>
2+
<h3>Olá {{displayName}}, tudo beleza?</h3>
3+
4+
<p>
5+
Você foi marcado(a) em uma foto da comunidade, acesse o album
6+
<a href="{{url}}">{{title}}</a> para ver
7+
</p>
8+
</div>
9+
10+
<footer>
11+
<img src="https://devparana.mx/portal-devpr-mx.svg" alt="Portal devparana.mx">
12+
</footer>

packages/album/data-access/src/lib/application/photo.facade.ts

+8-3
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,10 @@
11
import { createClientProvider, EntityFacade } from '@devmx/shared-data-access';
2-
import { Photo, EditablePhoto } from '@devmx/shared-api-interfaces';
2+
import { take } from 'rxjs';
3+
import {
4+
Photo,
5+
EditablePhoto,
6+
UpdatePhotoTags,
7+
} from '@devmx/shared-api-interfaces';
38
import {
49
CreatePhotoUseCase,
510
DeletePhotoUseCase,
@@ -10,7 +15,7 @@ import {
1015
UploadPhoto,
1116
UploadPhotoUseCase,
1217
} from '@devmx/album-domain/client';
13-
import { take } from 'rxjs';
18+
1419

1520
export class PhotoFacade extends EntityFacade<Photo> {
1621
constructor(
@@ -59,7 +64,7 @@ export class PhotoFacade extends EntityFacade<Photo> {
5964
return request$.pipe(take(1));
6065
}
6166

62-
updateTags(data: EditablePhoto) {
67+
updateTags(data: UpdatePhotoTags) {
6368
this.onUpdate(this.updatePhotoTagsUseCase.execute(data));
6469
}
6570

Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
1-
import { provideFacades, provideServices, provideUseCases } from './providers';
1+
import { provideAlbum, providePhoto } from './providers';
22

33
export function provideAlbums() {
4-
return [...provideServices(), ...provideUseCases(), ...provideFacades()];
4+
return [...provideAlbum(), ...providePhoto()];
55
}

packages/album/data-source/src/lib/application/photos.facade.ts

+18-10
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,12 @@
1-
import { PhotoDto, CreatePhotoDto, UpdatePhotoDto } from '../dtos';
1+
import { PhotoDto, CreatePhotoDto, UpdatePhotoDto, UpdatePhotoTagsDto } from '../dtos';
22
import { Photo } from '@devmx/shared-api-interfaces';
33
import { plainToInstance } from 'class-transformer';
44
import {
55
CreatePhotoUseCase,
66
DeletePhotoUseCase,
77
FindPhotoByIDUseCase,
88
FindPhotosUseCase,
9+
UpdatePhotoTagsUseCase,
910
UpdatePhotoUseCase,
1011
} from '@devmx/album-domain/server';
1112
import {
@@ -20,7 +21,8 @@ export class PhotosFacade {
2021
private findPhotosUseCase: FindPhotosUseCase,
2122
private findPhotoByIDUseCase: FindPhotoByIDUseCase,
2223
private updatePhotoUseCase: UpdatePhotoUseCase,
23-
private deletePhotoUseCase: DeletePhotoUseCase
24+
private deletePhotoUseCase: DeletePhotoUseCase,
25+
private updatePhotoTagsUseCase: UpdatePhotoTagsUseCase
2426
) {}
2527

2628
async create(data: CreatePhotoDto) {
@@ -30,23 +32,28 @@ export class PhotosFacade {
3032

3133
async find(params: QueryParamsDto<Photo>) {
3234
const { data, items, pages } = await this.findPhotosUseCase.execute(params);
33-
const albums = plainToInstance(PhotoDto, data);
34-
return new PageDto(albums, items, pages);
35+
const photos = plainToInstance(PhotoDto, data);
36+
return new PageDto(photos, items, pages);
3537
}
3638

3739
async findOne(id: string) {
38-
const album = await this.findPhotoByIDUseCase.execute(id);
39-
return plainToInstance(PhotoDto, album);
40+
const photo = await this.findPhotoByIDUseCase.execute(id);
41+
return plainToInstance(PhotoDto, photo);
4042
}
4143

4244
async update(id: string, data: UpdatePhotoDto) {
43-
const album = await this.updatePhotoUseCase.execute({ ...data, id });
44-
return plainToInstance(PhotoDto, album);
45+
const photo = await this.updatePhotoUseCase.execute({ ...data, id });
46+
return plainToInstance(PhotoDto, photo);
47+
}
48+
49+
async updateTags(id: string, data: UpdatePhotoTagsDto) {
50+
const photo = await this.updatePhotoTagsUseCase.execute({ ...data, id });
51+
return plainToInstance(PhotoDto, photo);
4552
}
4653

4754
async delete(id: string) {
48-
const album = this.deletePhotoUseCase.execute(id);
49-
return plainToInstance(PhotoDto, album);
55+
const photo = this.deletePhotoUseCase.execute(id);
56+
return plainToInstance(PhotoDto, photo);
5057
}
5158
}
5259

@@ -57,5 +64,6 @@ export function providePhotosFacade() {
5764
FindPhotoByIDUseCase,
5865
UpdatePhotoUseCase,
5966
DeletePhotoUseCase,
67+
UpdatePhotoTagsUseCase
6068
]);
6169
}
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
1-
export * from './album';
2-
export * from './create-album';
3-
export * from './create-photo';
4-
export * from './photo';
5-
export * from './update-album';
6-
export * from './update-photo';
1+
export * from './album';
2+
export * from './create-album';
3+
export * from './create-photo';
4+
export * from './photo';
5+
export * from './update-album';
6+
export * from './update-photo-tags';
7+
export * from './update-photo';
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,42 @@
1+
import { IsNotEmpty, IsNumber, IsOptional } from 'class-validator';
2+
import { ApiProperty, ApiPropertyOptional } from '@nestjs/swagger';
3+
import { UserTagDto } from '@devmx/shared-data-source';
4+
import { Exclude, Type } from 'class-transformer';
5+
import {
6+
UserTag,
7+
ImageMimeType,
8+
UpdatePhotoTags,
9+
} from '@devmx/shared-api-interfaces';
10+
11+
export class UpdatePhotoTagsDto implements UpdatePhotoTags {
12+
id: string;
13+
14+
@Exclude()
15+
data: string;
16+
17+
@IsNumber()
18+
@ApiProperty()
19+
@Type(() => Number)
20+
width: number;
21+
22+
@IsNumber()
23+
@ApiProperty()
24+
@Type(() => Number)
25+
height: number;
26+
27+
@IsNotEmpty()
28+
album: string;
29+
30+
@IsOptional()
31+
@ApiPropertyOptional()
32+
type: ImageMimeType;
33+
34+
@IsOptional()
35+
@ApiPropertyOptional()
36+
caption?: string;
37+
38+
@Type(() => UserTagDto)
39+
tags: UserTag[] = [];
40+
41+
owner: string;
42+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,23 @@
1+
import { provideAlbumsMongoService } from '../infrastructure';
2+
import { provideAlbumsFacade } from '../application';
3+
import {
4+
provideCreateAlbumUseCase,
5+
provideDeleteAlbumUseCase,
6+
provideFindAlbumByIDUseCase,
7+
provideFindAlbumsUseCase,
8+
provideUpdateAlbumUseCase,
9+
} from '@devmx/album-domain/server';
10+
11+
export function provideAlbum() {
12+
return [
13+
provideAlbumsMongoService(),
14+
15+
provideCreateAlbumUseCase(),
16+
provideFindAlbumsUseCase(),
17+
provideFindAlbumByIDUseCase(),
18+
provideUpdateAlbumUseCase(),
19+
provideDeleteAlbumUseCase(),
20+
21+
provideAlbumsFacade()
22+
];
23+
}

packages/album/data-source/src/lib/providers/facades.ts

-5
This file was deleted.
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,2 @@
1-
export * from './facades';
2-
export * from './services';
3-
export * from './use-cases';
1+
export * from './album';
2+
export * from './photo';

0 commit comments

Comments
 (0)