33using Films . DTOs ;
44using Kirel . Repositories . Interfaces ;
55using Kirel . Repositories . Sorts ;
6+ using Microsoft . Extensions . DependencyInjection ;
67
78namespace Films . Core
89{
@@ -13,16 +14,19 @@ public class FilmService
1314 {
1415 private readonly IKirelGenericEntityRepository < int , Film > _filmRepository ;
1516 private readonly IMapper _mapper ;
17+ private readonly IKirelGenericEntityRepository < int , Genre > _genreRepository ;
1618
1719 /// <summary>
1820 /// Initializes a new instance of the <see cref="FilmService"/> class.
1921 /// </summary>
2022 /// <param name="filmRepository">The repository for accessing film data.</param>
2123 /// <param name="mapper">AutoMapper instance</param>
22- public FilmService ( IKirelGenericEntityRepository < int , Film > filmRepository , IMapper mapper )
24+ /// <param name="genreRepository"></param>
25+ public FilmService ( IKirelGenericEntityRepository < int , Film > filmRepository , IMapper mapper , IKirelGenericEntityRepository < int , Genre > genreRepository )
2326 {
24- this . _filmRepository = filmRepository ;
27+ _filmRepository = filmRepository ;
2528 _mapper = mapper ;
29+ _genreRepository = genreRepository ;
2630 }
2731 /// <summary>
2832 /// Searches for films in the database by name.
@@ -32,39 +36,60 @@ public FilmService(IKirelGenericEntityRepository<int, Film> filmRepository, IMap
3236 public async Task < List < FilmDto > > SearchFilm ( string filmName )
3337 {
3438 // Search for films in the database based on the provided film name.
35- var existingFilm = await _filmRepository . GetList ( m => m . Name != null && m . Name . Contains ( filmName ) ) ;
39+ var existingFilms = await _filmRepository . GetList ( m => m . Name != null && m . Name . Contains ( filmName ) ) ;
3640
37- var enumerable = existingFilm . ToList ( ) ;
38- if ( existingFilm == null || ! enumerable . Any ( ) )
41+ if ( existingFilms == null || ! existingFilms . Any ( ) )
3942 {
4043 throw new FilmNotFoundException ( $ "Film with the title '{ filmName } ' was not found in the database.") ;
4144 }
4245
4346 // Map the retrieved films to DTOs for presentation.
44- var filmsList = enumerable . Select ( film => new FilmDto
47+ var filmsList = existingFilms . Select ( film => new FilmDto
4548 {
4649 Id = film . Id ,
4750 Name = film . Name ,
4851 Rating = film . Rating ,
4952 Description = film . Description ,
5053 PosterURL = film . PosterUrl ,
51- Genres = film . Genres
54+ Genres = _mapper . Map < List < GenreDto > > ( film . Genres )
5255 } ) . ToList ( ) ;
5356
5457 return filmsList ;
5558 }
59+
5660 /// <summary>
5761 /// Creates a new film.
5862 /// </summary>
59- /// <param name="filmDto ">The DTO containing the film information to create.</param>
63+ /// <param name="filmCreateDto ">The DTO containing the film information to create.</param>
6064 /// <returns>The ID of the created film.</returns>
61- public async Task < int > CreateFilm ( FilmCreateDto filmDto )
62- {
63- // Map the DTO to an entity and insert it into the repository.
64- var film = _mapper . Map < Film > ( filmDto ) ;
65- var createdFilm = await _filmRepository . Insert ( film ) ;
66- return createdFilm . Id ;
67- }
65+ public async Task < int > CreateFilm ( FilmCreateDto filmCreateDto )
66+ {
67+ Film film = _mapper . Map < Film > ( filmCreateDto ) ;
68+
69+ // Добавьте жанры в фильм, если они указаны в filmCreateDto.GenreNames
70+ if ( filmCreateDto . GenreNames != null )
71+ {
72+ foreach ( string genreName in filmCreateDto . GenreNames )
73+ {
74+ var genre = await _genreRepository . GetList ( m => m . Name != null && m . Name . Contains ( genreName ) ) ;
75+ if ( genre . Any ( ) )
76+ {
77+ film . Genres . Add ( genre . First ( ) ) ; // Выберите первый подходящий жанр
78+ }
79+ else
80+ {
81+ // Жанр с указанным названием не найден, создание нового жанра
82+ var newGenre = new Genre { Name = genreName } ;
83+ film . Genres . Add ( newGenre ) ;
84+ }
85+ }
86+ }
87+
88+ var createdFilm = await _filmRepository . Insert ( film ) ;
89+ return createdFilm . Id ;
90+ }
91+
92+
6893
6994 /// <summary>
7095 /// Updates an existing film.
0 commit comments