1
+ using Application . Core ;
2
+ using Application . Interfaces ;
3
+ using Domain ;
4
+ using MediatR ;
5
+ using Microsoft . AspNetCore . Http ;
6
+ using Microsoft . EntityFrameworkCore ;
7
+ using Persistence ;
8
+
9
+ namespace Application . Photos
10
+ {
11
+ public class Add
12
+ {
13
+ public class Command : IRequest < Result < Photo > >
14
+ {
15
+ public IFormFile File { get ; set ; }
16
+ }
17
+
18
+ public class Handler : IRequestHandler < Command , Result < Photo > >
19
+ {
20
+ private readonly DataContext _context ;
21
+ private readonly IPhotoAccessor _photoAccessor ;
22
+ private readonly IUserAccessor _userAccessor ;
23
+
24
+ public Handler ( DataContext context , IPhotoAccessor photoAccessor , IUserAccessor userAccessor )
25
+ {
26
+ _userAccessor = userAccessor ;
27
+ _photoAccessor = photoAccessor ;
28
+ _context = context ;
29
+ }
30
+
31
+ public async Task < Result < Photo > > Handle ( Command request , CancellationToken cancellationToken )
32
+ {
33
+ var user = await _context . Users . Include ( p => p . Photos )
34
+ . FirstOrDefaultAsync ( x => x . UserName == _userAccessor . GetUserName ( ) ) ;
35
+
36
+ if ( user == null ) return null ;
37
+
38
+ var photoUploadResult = await _photoAccessor . AddPhoto ( request . File ) ;
39
+
40
+ var photo = new Photo
41
+ {
42
+ Url = photoUploadResult . Url ,
43
+ Id = photoUploadResult . PublicId ,
44
+ } ;
45
+
46
+ if ( ! user . Photos . Any ( x => x . IsMain ) ) photo . IsMain = true ;
47
+
48
+ user . Photos . Add ( photo ) ;
49
+
50
+ var result = await _context . SaveChangesAsync ( ) > 0 ;
51
+
52
+ if ( result ) return Result < Photo > . Success ( photo ) ;
53
+
54
+ return Result < Photo > . Failure ( "Problem adding photo" ) ;
55
+ }
56
+ }
57
+ }
58
+ }
0 commit comments