4
4
using CoinyProject . Infrastructure . Data ;
5
5
using CoinyProject . Infrastructure . Data . Migrations ;
6
6
using CoinyProject . Infrastructure . Data . Repositories ;
7
+ using Microsoft . AspNetCore . Hosting ;
7
8
using Microsoft . AspNetCore . Mvc ;
8
9
using Microsoft . EntityFrameworkCore ;
9
10
using System ;
@@ -18,10 +19,12 @@ namespace CoinyProject.Application.AlbumServices.Services
18
19
public class AlbumService : IAlbumService
19
20
{
20
21
private readonly UnitOfWork _unitOfWork ;
22
+ private readonly IWebHostEnvironment _webHostEnvironment ;
21
23
22
- public AlbumService ( ApplicationDBContext dBContext )
24
+ public AlbumService ( ApplicationDBContext dBContext , IWebHostEnvironment webHostEnvironment )
23
25
{
24
26
_unitOfWork = new UnitOfWork ( dBContext ) ;
27
+ _webHostEnvironment = webHostEnvironment ;
25
28
}
26
29
27
30
public async Task AddAlbum ( AlbumCreating album )
@@ -35,26 +38,41 @@ public async Task AddAlbum(AlbumCreating album)
35
38
await _unitOfWork . AlbumRepository . Add ( _album ) ;
36
39
_unitOfWork . Commit ( ) ;
37
40
}
38
- public Task AddAlbumElement ( AlbumElementCreating element )
41
+ public async Task AddAlbumElement ( AlbumElementCreating element )
39
42
{
43
+ string imageURL = null ;
40
44
var album = _unitOfWork . AlbumRepository . Include ( x => x . Elements )
41
45
. Where ( x => x . Elements . Count == 0 )
42
46
. OrderByDescending ( x => x . Id )
43
47
. FirstOrDefault ( ) ;
44
48
49
+ if ( element . Image != null )
50
+ {
51
+ string folder = "albums/elements/" ;
52
+ folder += Guid . NewGuid ( ) . ToString ( ) + "_" + element . Image . FileName ;
53
+
54
+ imageURL = "/" + folder ;
55
+
56
+ string serverFolder = Path . Combine ( _webHostEnvironment . WebRootPath , folder ) ;
57
+
58
+ await element . Image . CopyToAsync ( new FileStream ( serverFolder , FileMode . Create ) ) ;
59
+ }
60
+
45
61
if ( album != null )
46
62
{
47
63
AlbumElement _albumElement = new AlbumElement ( )
48
64
{
49
- Name = album . Name ,
50
- Description = album . Description ,
65
+ Name = element . Name ,
66
+ Description = element . Description ,
67
+ ImageURL = imageURL
51
68
} ;
52
69
53
70
album . Elements . Add ( _albumElement ) ;
54
71
_unitOfWork . Commit ( ) ;
55
72
}
56
73
57
- return Task . CompletedTask ;
74
+
75
+
58
76
}
59
77
60
78
public Task < ( string , string ) > CommitAlbumCreation ( )
@@ -69,5 +87,54 @@ public Task AddAlbumElement(AlbumElementCreating element)
69
87
else
70
88
return Task . FromResult ( ( "success" , "Album successfule created" ) ) ;
71
89
}
90
+
91
+ public async Task < IEnumerable < AlbumGetDTO > > GetAllAlbumsDTO ( )
92
+ {
93
+ var alums = await _unitOfWork . AlbumRepository
94
+ . Include ( x => x . Elements )
95
+ . AsNoTracking ( )
96
+ . ToListAsync ( ) ;
97
+
98
+ var albumsGetDTOList = new List < AlbumGetDTO > ( ) ;
99
+
100
+ foreach ( Album album in alums )
101
+ {
102
+ albumsGetDTOList . Add ( new AlbumGetDTO ( )
103
+ {
104
+ Id = album . Id ,
105
+ Name = album . Name ,
106
+ Description = album . Description ,
107
+ Rate = album . Rate ,
108
+ TitleImageURL = album . Elements . FirstOrDefault ( ) . ImageURL
109
+ } ) ;
110
+ }
111
+ return albumsGetDTOList ;
112
+ }
113
+
114
+ public async Task < AlbumGetByIdDTO > GetAlbumById ( int id )
115
+ {
116
+ var album = await _unitOfWork . AlbumRepository
117
+ . Where ( x => x . Id == id )
118
+ . Include ( x => x . Elements )
119
+ . AsNoTracking ( )
120
+ . FirstOrDefaultAsync ( ) ;
121
+
122
+ var AlbumGetByIdDTO = new AlbumGetByIdDTO ( )
123
+ {
124
+ Id = album . Id ,
125
+ Name = album . Name ,
126
+ Rate = album . Rate ,
127
+ Description = album . Description ,
128
+ Elements = album . Elements . Select ( x => new AlbumElementGetDTO ( )
129
+ {
130
+ Id = x . Id ,
131
+ Name = x . Name ,
132
+ Description = x . Description ,
133
+ ImageURL = x . ImageURL
134
+ } ) . ToList ( )
135
+ } ;
136
+
137
+ return AlbumGetByIdDTO ;
138
+ }
72
139
}
73
140
}
0 commit comments