From 139300faf5d356abb0c7a840784a895547bddece Mon Sep 17 00:00:00 2001 From: Anu Viswan Date: Mon, 23 Jun 2025 05:53:38 +0530 Subject: [PATCH 1/7] cleanup --- .../services/MovieService/MovieService.GraphQL/Class1.cs | 7 ------- .../MovieService/MovieService.Service.Interfaces/Class1.cs | 7 ------- 2 files changed, 14 deletions(-) delete mode 100644 server/nt.microservice/services/MovieService/MovieService.GraphQL/Class1.cs delete mode 100644 server/nt.microservice/services/MovieService/MovieService.Service.Interfaces/Class1.cs diff --git a/server/nt.microservice/services/MovieService/MovieService.GraphQL/Class1.cs b/server/nt.microservice/services/MovieService/MovieService.GraphQL/Class1.cs deleted file mode 100644 index 598a5acd..00000000 --- a/server/nt.microservice/services/MovieService/MovieService.GraphQL/Class1.cs +++ /dev/null @@ -1,7 +0,0 @@ -namespace MovieService.GraphQL -{ - public class Class1 - { - - } -} diff --git a/server/nt.microservice/services/MovieService/MovieService.Service.Interfaces/Class1.cs b/server/nt.microservice/services/MovieService/MovieService.Service.Interfaces/Class1.cs deleted file mode 100644 index 62d2af81..00000000 --- a/server/nt.microservice/services/MovieService/MovieService.Service.Interfaces/Class1.cs +++ /dev/null @@ -1,7 +0,0 @@ -namespace MovieService.Service.Interfaces -{ - public class Class1 - { - - } -} From c8bc225f8570c2a0ca74b4ac24b387b20a306d10 Mon Sep 17 00:00:00 2001 From: Anu Viswan Date: Thu, 26 Jun 2025 20:46:23 +0530 Subject: [PATCH 2/7] moved away for Code first approach --- .../MovieService.Api/Helpers/GraphQL.cs | 3 +- .../MovieService.GraphQL.csproj | 1 + .../Queries/MovieQuery.cs | 31 ++++++++++ .../MovieService.GraphQL/Queries/Query.cs | 26 -------- .../MovieService.GraphQL/Types/MovieType.cs | 60 +++++++++---------- .../Reviews/Review.cs | 10 +--- 6 files changed, 63 insertions(+), 68 deletions(-) create mode 100644 server/nt.microservice/services/MovieService/MovieService.GraphQL/Queries/MovieQuery.cs delete mode 100644 server/nt.microservice/services/MovieService/MovieService.GraphQL/Queries/Query.cs diff --git a/server/nt.microservice/services/MovieService/MovieService.Api/Helpers/GraphQL.cs b/server/nt.microservice/services/MovieService/MovieService.Api/Helpers/GraphQL.cs index 60b99d0f..c0c5d7b2 100644 --- a/server/nt.microservice/services/MovieService/MovieService.Api/Helpers/GraphQL.cs +++ b/server/nt.microservice/services/MovieService/MovieService.Api/Helpers/GraphQL.cs @@ -1,5 +1,4 @@ using MovieService.GraphQL.Queries; -using MovieService.GraphQL.Types; namespace MovieService.Api.Helpers; @@ -8,7 +7,7 @@ public static class GraphQL public static void Register(IServiceCollection serviceCollection) { serviceCollection.AddGraphQLServer() - .AddQueryType() + .AddQueryType() .AddFiltering(); } } diff --git a/server/nt.microservice/services/MovieService/MovieService.GraphQL/MovieService.GraphQL.csproj b/server/nt.microservice/services/MovieService/MovieService.GraphQL/MovieService.GraphQL.csproj index 29151e29..86761107 100644 --- a/server/nt.microservice/services/MovieService/MovieService.GraphQL/MovieService.GraphQL.csproj +++ b/server/nt.microservice/services/MovieService/MovieService.GraphQL/MovieService.GraphQL.csproj @@ -9,6 +9,7 @@ + diff --git a/server/nt.microservice/services/MovieService/MovieService.GraphQL/Queries/MovieQuery.cs b/server/nt.microservice/services/MovieService/MovieService.GraphQL/Queries/MovieQuery.cs new file mode 100644 index 00000000..dd59f91e --- /dev/null +++ b/server/nt.microservice/services/MovieService/MovieService.GraphQL/Queries/MovieQuery.cs @@ -0,0 +1,31 @@ +using HotChocolate; +using MovieService.GraphQL.Types; +using MovieService.Service.Interfaces.Services; +using Omu.ValueInjecter; + +namespace MovieService.GraphQL.Queries; + +public class MovieQuery([Service]IMovieService movieService) +{ + [GraphQLDescription("Find Movie by partial name")] + public async IAsyncEnumerable FindMovie([GraphQLName("searchTerm")]string searchTerm) + { + var movieResult = movieService.Search(searchTerm); + + await foreach (var movie in movieResult) + { + yield return Mapper.Map(movieResult); + } + } +} + +//public class QueryType : ObjectType +//{ +// protected override void Configure(IObjectTypeDescriptor descriptor) +// { +// descriptor.Field(x => x.FindMovie(default!)) +// .Type>() +// .Argument("searchTerm", x=> x.Type()) +// .Description("Find Movie by partial name"); +// } +//} diff --git a/server/nt.microservice/services/MovieService/MovieService.GraphQL/Queries/Query.cs b/server/nt.microservice/services/MovieService/MovieService.GraphQL/Queries/Query.cs deleted file mode 100644 index f8e550ec..00000000 --- a/server/nt.microservice/services/MovieService/MovieService.GraphQL/Queries/Query.cs +++ /dev/null @@ -1,26 +0,0 @@ -using HotChocolate; -using HotChocolate.Types; -using MovieService.GraphQL.Types; -using MovieService.Service.Interfaces.Dtos; -using MovieService.Service.Interfaces.Services; - -namespace MovieService.GraphQL.Queries; - -public class Query -{ - public IAsyncEnumerable FindMovie([Service]IMovieService movieService, string searchTerm) - { - return movieService.Search(searchTerm); - } -} - -public class QueryType : ObjectType -{ - protected override void Configure(IObjectTypeDescriptor descriptor) - { - descriptor.Field(x => x.FindMovie(default!, default!)) - .Type>() - .Argument("searchTerm", x=> x.Type()) - .Description("Find Movie by partial name"); - } -} diff --git a/server/nt.microservice/services/MovieService/MovieService.GraphQL/Types/MovieType.cs b/server/nt.microservice/services/MovieService/MovieService.GraphQL/Types/MovieType.cs index 90cf68d8..a2593851 100644 --- a/server/nt.microservice/services/MovieService/MovieService.GraphQL/Types/MovieType.cs +++ b/server/nt.microservice/services/MovieService/MovieService.GraphQL/Types/MovieType.cs @@ -1,41 +1,37 @@ -using HotChocolate.Types; +using HotChocolate; +using HotChocolate.Types; using MovieService.Service.Interfaces.Dtos; namespace MovieService.GraphQL.Types; -public class MovieType : ObjectType +public class MovieType //: ObjectType { - protected override void Configure(IObjectTypeDescriptor descriptor) - { - descriptor.Description("Defines a movie"); - - descriptor.Field(x=>x.Title) - .Type() - .Description("Title of Movie"); - descriptor.Field(x=>x.MovieLanguage) - .Type() - .Description("Language of movie"); - descriptor.Field(x=>x.ReleaseDate) - .Type() - .Description("Release date of movie"); - descriptor.Field(x => x.Cast) - .Type>() - .UsePaging() - .Description("Cast of the movie"); - //descriptor.Field(x => x.Crew) - // .Type() - // .Description("Crew of the movie"); - } + [GraphQLName("title")] + [GraphQLDescription("Title of movie.")] + public string Title { get; set; } = null!; + + [GraphQLName("description")] + [GraphQLDescription("Synopsis of the movie")] + public string Synopsis { get; set; } = null!; + + [GraphQLName("movieLanguage")] + [GraphQLDescription("Language")] + public string MovieLanguage { get; set; } = null!; + + + [GraphQLName("releaseDate")] + [GraphQLDescription("Release Date")] + public DateTime ReleaseDate { get; set; } + + + [GraphQLName("cast")] + [GraphQLDescription("Cast of the movie")] + public List Cast { get; set; } = new List(); } -public class PersonType : ObjectType +public class PersonType //: ObjectType { - protected override void Configure(IObjectTypeDescriptor descriptor) - { - descriptor.Description("Defines a Person"); - - descriptor.Field(x => x.Name) - .Type>() - .Description("Name of the person"); - } + [GraphQLName("name")] + [GraphQLDescription("Name")] + public string Name { get; set; } = null!; } diff --git a/server/nt.microservice/services/ReviewService/ReviewService.Application.DTO/Reviews/Review.cs b/server/nt.microservice/services/ReviewService/ReviewService.Application.DTO/Reviews/Review.cs index b3cf4b5f..0aff9e2d 100644 --- a/server/nt.microservice/services/ReviewService/ReviewService.Application.DTO/Reviews/Review.cs +++ b/server/nt.microservice/services/ReviewService/ReviewService.Application.DTO/Reviews/Review.cs @@ -1,13 +1,7 @@ -using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; -using System.Threading.Tasks; - -namespace ReviewService.Application.DTO.Reviews; +namespace ReviewService.Application.DTO.Reviews; public class Review { public Guid ReviewId { get; set; } - public string MovieTitle { get; set; } + public string MovieTitle { get; set; } = null!; } From 2001714d3e26b72ffd5f772197e0db9309463f64 Mon Sep 17 00:00:00 2001 From: Anu Viswan Date: Thu, 26 Jun 2025 20:56:19 +0530 Subject: [PATCH 3/7] fixed movie query --- .../Queries/MovieQuery.cs | 24 +++++++++---------- .../Dtos/MovieDto.cs | 2 ++ 2 files changed, 13 insertions(+), 13 deletions(-) diff --git a/server/nt.microservice/services/MovieService/MovieService.GraphQL/Queries/MovieQuery.cs b/server/nt.microservice/services/MovieService/MovieService.GraphQL/Queries/MovieQuery.cs index dd59f91e..c3d6f9be 100644 --- a/server/nt.microservice/services/MovieService/MovieService.GraphQL/Queries/MovieQuery.cs +++ b/server/nt.microservice/services/MovieService/MovieService.GraphQL/Queries/MovieQuery.cs @@ -1,7 +1,6 @@ using HotChocolate; using MovieService.GraphQL.Types; using MovieService.Service.Interfaces.Services; -using Omu.ValueInjecter; namespace MovieService.GraphQL.Queries; @@ -12,20 +11,19 @@ public async IAsyncEnumerable FindMovie([GraphQLName("searchTerm")]st { var movieResult = movieService.Search(searchTerm); - await foreach (var movie in movieResult) + await foreach (var dto in movieResult) { - yield return Mapper.Map(movieResult); + yield return new MovieType + { + Title = dto.Title, + MovieLanguage = dto.MovieLanguage ?? "Unknown", + ReleaseDate = dto.ReleaseDate ?? DateTime.MinValue, + Synopsis = "Synopsis not provided", // Assuming no synopsis in DTO + Cast = dto.Cast?.Select(x=>new PersonType { Name = x.Name}).ToList() ?? new List() + }; } } } -//public class QueryType : ObjectType -//{ -// protected override void Configure(IObjectTypeDescriptor descriptor) -// { -// descriptor.Field(x => x.FindMovie(default!)) -// .Type>() -// .Argument("searchTerm", x=> x.Type()) -// .Description("Find Movie by partial name"); -// } -//} + + diff --git a/server/nt.microservice/services/MovieService/MovieService.Service.Interfaces/Dtos/MovieDto.cs b/server/nt.microservice/services/MovieService/MovieService.Service.Interfaces/Dtos/MovieDto.cs index 90c71021..0e15f7d5 100644 --- a/server/nt.microservice/services/MovieService/MovieService.Service.Interfaces/Dtos/MovieDto.cs +++ b/server/nt.microservice/services/MovieService/MovieService.Service.Interfaces/Dtos/MovieDto.cs @@ -4,6 +4,8 @@ public record MovieDto { public string Title { get; set; } = null!; + public string Synopsis { get; set; } = string.Empty; + public string? MovieLanguage { get; set; } public DateTime? ReleaseDate { get; set; } From fc2f08373c489332f466c79a72d10226f6226421 Mon Sep 17 00:00:00 2001 From: Anu Viswan Date: Fri, 27 Jun 2025 07:12:30 +0530 Subject: [PATCH 4/7] fetched movie results --- .../nt/src/apiService/MovieApiService.ts | 11 ----------- .../Entities/MovieEntity.cs | 3 +++ .../MovieService.Data/Seed/MalayalamMoviesSeed.cs | 1 + 3 files changed, 4 insertions(+), 11 deletions(-) diff --git a/client/nt.webclient/vue3withtypescript/nt/src/apiService/MovieApiService.ts b/client/nt.webclient/vue3withtypescript/nt/src/apiService/MovieApiService.ts index 3fe0965a..9c2f6d97 100644 --- a/client/nt.webclient/vue3withtypescript/nt/src/apiService/MovieApiService.ts +++ b/client/nt.webclient/vue3withtypescript/nt/src/apiService/MovieApiService.ts @@ -2,7 +2,6 @@ import { ApiServiceBase } from './ApiServiceBase'; import { ISearchMoviesResponse,MovieResponse } from '@/types/apirequestresponsetypes/Movie'; import { Movie } from "@/types/MovieTypes" import { DocumentNode, gql } from '@apollo/client/core'; -import { plainToClass } from 'class-transformer'; class MovieApiService extends ApiServiceBase { public async SearchMovies( @@ -17,19 +16,9 @@ class MovieApiService extends ApiServiceBase { releaseDate title cast{ - edges{ - node{ - name - } - } - } - crew{ - key - value{ name } } - } } ` diff --git a/server/nt.microservice/services/MovieService/MovieService.Data.Interfaces/Entities/MovieEntity.cs b/server/nt.microservice/services/MovieService/MovieService.Data.Interfaces/Entities/MovieEntity.cs index cf268184..a5a37c26 100644 --- a/server/nt.microservice/services/MovieService/MovieService.Data.Interfaces/Entities/MovieEntity.cs +++ b/server/nt.microservice/services/MovieService/MovieService.Data.Interfaces/Entities/MovieEntity.cs @@ -11,6 +11,9 @@ public class MovieEntity : Entity [Field("title")] public string Title { get; set; } = null!; + [Field("synopsis")] + public string Synopsis { get; set; } = string.Empty; + [Field("movie-language")] public string? MovieLanguage { get; set; } diff --git a/server/nt.microservice/services/MovieService/MovieService.Data/Seed/MalayalamMoviesSeed.cs b/server/nt.microservice/services/MovieService/MovieService.Data/Seed/MalayalamMoviesSeed.cs index 573da96e..ffb44eca 100644 --- a/server/nt.microservice/services/MovieService/MovieService.Data/Seed/MalayalamMoviesSeed.cs +++ b/server/nt.microservice/services/MovieService/MovieService.Data/Seed/MalayalamMoviesSeed.cs @@ -20,6 +20,7 @@ internal class MalayalamMoviesSeed { new("Dulquer Salmaan"), new("Thilakan"), new("Nithya Menen") } + }, new() { From 11d3c700b9626a275a6e2919ca78033b54a38270 Mon Sep 17 00:00:00 2001 From: Anu Viswan Date: Fri, 27 Jun 2025 07:31:27 +0530 Subject: [PATCH 5/7] Fixed Cast --- .../nt/src/apiService/MovieApiService.ts | 4 +++- .../nt/src/types/apirequestresponsetypes/Movie.ts | 7 ++----- 2 files changed, 5 insertions(+), 6 deletions(-) diff --git a/client/nt.webclient/vue3withtypescript/nt/src/apiService/MovieApiService.ts b/client/nt.webclient/vue3withtypescript/nt/src/apiService/MovieApiService.ts index 9c2f6d97..840e2179 100644 --- a/client/nt.webclient/vue3withtypescript/nt/src/apiService/MovieApiService.ts +++ b/client/nt.webclient/vue3withtypescript/nt/src/apiService/MovieApiService.ts @@ -32,7 +32,9 @@ class MovieApiService extends ApiServiceBase { function ConvertToMovieDto(movieResponse:MovieResponse):Movie{ const movie = { ...movieResponse, - cast: movieResponse.cast?.edges?.map(edge=>({name:edge?.node?.name})) ?? [], + cast: movieResponse.cast?.map(m=> ({ + name : m.name + })), crew: movieResponse.crew?.map(kvp=>({ key : kvp.key, value: kvp.value?.map((p)=>({ name: p.name})) diff --git a/client/nt.webclient/vue3withtypescript/nt/src/types/apirequestresponsetypes/Movie.ts b/client/nt.webclient/vue3withtypescript/nt/src/types/apirequestresponsetypes/Movie.ts index 8bcd59d9..55e722e1 100644 --- a/client/nt.webclient/vue3withtypescript/nt/src/types/apirequestresponsetypes/Movie.ts +++ b/client/nt.webclient/vue3withtypescript/nt/src/types/apirequestresponsetypes/Movie.ts @@ -9,15 +9,12 @@ export interface MovieResponse { title: string; movieLanguage: string; releaseDate: Date; - cast: CastResponse; + cast: PersonResponse[]; crew: KeyValuePair[]; } export interface CastResponse{ - edges : PersonEdgeResponse[] -} -export interface PersonEdgeResponse{ - node: PersonResponse + Person : PersonResponse[] } export interface KeyValuePair { From c70494f5405b06f99fc3b976f9ad5ddf77383c59 Mon Sep 17 00:00:00 2001 From: Anu Viswan Date: Fri, 27 Jun 2025 07:44:17 +0530 Subject: [PATCH 6/7] fixed crew response --- .../nt/src/apiService/MovieApiService.ts | 8 +++++++- .../MovieService.GraphQL/Queries/MovieQuery.cs | 5 ++++- .../MovieService.GraphQL/Types/MovieType.cs | 12 +++++++----- 3 files changed, 18 insertions(+), 7 deletions(-) diff --git a/client/nt.webclient/vue3withtypescript/nt/src/apiService/MovieApiService.ts b/client/nt.webclient/vue3withtypescript/nt/src/apiService/MovieApiService.ts index 840e2179..0ebb74e8 100644 --- a/client/nt.webclient/vue3withtypescript/nt/src/apiService/MovieApiService.ts +++ b/client/nt.webclient/vue3withtypescript/nt/src/apiService/MovieApiService.ts @@ -17,7 +17,13 @@ class MovieApiService extends ApiServiceBase { title cast{ name - } + }, + crew{ + key, + value{ + name + } + } } } ` diff --git a/server/nt.microservice/services/MovieService/MovieService.GraphQL/Queries/MovieQuery.cs b/server/nt.microservice/services/MovieService/MovieService.GraphQL/Queries/MovieQuery.cs index c3d6f9be..004e7704 100644 --- a/server/nt.microservice/services/MovieService/MovieService.GraphQL/Queries/MovieQuery.cs +++ b/server/nt.microservice/services/MovieService/MovieService.GraphQL/Queries/MovieQuery.cs @@ -19,7 +19,10 @@ public async IAsyncEnumerable FindMovie([GraphQLName("searchTerm")]st MovieLanguage = dto.MovieLanguage ?? "Unknown", ReleaseDate = dto.ReleaseDate ?? DateTime.MinValue, Synopsis = "Synopsis not provided", // Assuming no synopsis in DTO - Cast = dto.Cast?.Select(x=>new PersonType { Name = x.Name}).ToList() ?? new List() + Cast = dto.Cast?.Select(x=>new PersonType { Name = x.Name}).ToList() ?? [], + Crew = dto.Crew?.ToDictionary( + kvp => kvp.Key, + kvp => kvp.Value.Select(p => new PersonType { Name = p.Name }).ToList()) ?? [] }; } } diff --git a/server/nt.microservice/services/MovieService/MovieService.GraphQL/Types/MovieType.cs b/server/nt.microservice/services/MovieService/MovieService.GraphQL/Types/MovieType.cs index a2593851..ef15843a 100644 --- a/server/nt.microservice/services/MovieService/MovieService.GraphQL/Types/MovieType.cs +++ b/server/nt.microservice/services/MovieService/MovieService.GraphQL/Types/MovieType.cs @@ -1,10 +1,8 @@ using HotChocolate; -using HotChocolate.Types; -using MovieService.Service.Interfaces.Dtos; namespace MovieService.GraphQL.Types; -public class MovieType //: ObjectType +public class MovieType { [GraphQLName("title")] [GraphQLDescription("Title of movie.")] @@ -26,10 +24,14 @@ public class MovieType //: ObjectType [GraphQLName("cast")] [GraphQLDescription("Cast of the movie")] - public List Cast { get; set; } = new List(); + public List Cast { get; set; } = []; + + [GraphQLName("crew")] + [GraphQLDescription("Crew of the movie")] + public Dictionary>? Crew { get; set; } = []; } -public class PersonType //: ObjectType +public class PersonType { [GraphQLName("name")] [GraphQLDescription("Name")] From e995484c8f4575d3833f4d6e8421f0f427694ced Mon Sep 17 00:00:00 2001 From: Anu Viswan Date: Fri, 27 Jun 2025 21:43:38 +0530 Subject: [PATCH 7/7] Added Get Recent movies --- .../Services/IMovieCrudService.cs | 5 ++--- .../Services/MovieCrudService.cs | 19 ++++++++++++++++-- .../Queries/MovieQuery.cs | 20 +++++++++++++++++++ .../Services/IMovieService.cs | 1 + .../Services/MovieService.cs | 13 ++++++++++++ 5 files changed, 53 insertions(+), 5 deletions(-) diff --git a/server/nt.microservice/services/MovieService/MovieService.Data.Interfaces/Services/IMovieCrudService.cs b/server/nt.microservice/services/MovieService/MovieService.Data.Interfaces/Services/IMovieCrudService.cs index b6bf37d6..0e687b01 100644 --- a/server/nt.microservice/services/MovieService/MovieService.Data.Interfaces/Services/IMovieCrudService.cs +++ b/server/nt.microservice/services/MovieService/MovieService.Data.Interfaces/Services/IMovieCrudService.cs @@ -1,9 +1,8 @@ -using MovieService.Data.Interfaces.Entities; - -namespace MovieService.Data.Interfaces.Services; +namespace MovieService.Data.Interfaces.Services; public interface IMovieCrudService { Task CreateAsync(MovieEntity newBook); IAsyncEnumerable SearchAsync(string searchTerm); + IAsyncEnumerable GetRecentMovies(int count = 10); } diff --git a/server/nt.microservice/services/MovieService/MovieService.Data/Services/MovieCrudService.cs b/server/nt.microservice/services/MovieService/MovieService.Data/Services/MovieCrudService.cs index 9921ab0a..d74753f0 100644 --- a/server/nt.microservice/services/MovieService/MovieService.Data/Services/MovieCrudService.cs +++ b/server/nt.microservice/services/MovieService/MovieService.Data/Services/MovieCrudService.cs @@ -1,6 +1,4 @@ using Microsoft.Extensions.Options; -using MongoDB.Bson; -using MongoDB.Driver; using MongoDB.Entities; using MovieService.Data.Interfaces.Entities; using MovieService.Data.Interfaces.Services; @@ -32,4 +30,21 @@ public async IAsyncEnumerable SearchAsync(string searchTerm) } } } + + public async IAsyncEnumerable GetRecentMovies(int count = 10) + { + if (count <= 0) + yield break; + var cursor = await DB.Find() + .Sort(x=>x.Descending(x => x.ReleaseDate)) + .Limit(count) + .ExecuteCursorAsync(); + while (await cursor.MoveNextAsync()) + { + foreach (var movie in cursor.Current) + { + yield return movie; + } + } + } } diff --git a/server/nt.microservice/services/MovieService/MovieService.GraphQL/Queries/MovieQuery.cs b/server/nt.microservice/services/MovieService/MovieService.GraphQL/Queries/MovieQuery.cs index 004e7704..0765b241 100644 --- a/server/nt.microservice/services/MovieService/MovieService.GraphQL/Queries/MovieQuery.cs +++ b/server/nt.microservice/services/MovieService/MovieService.GraphQL/Queries/MovieQuery.cs @@ -26,6 +26,26 @@ public async IAsyncEnumerable FindMovie([GraphQLName("searchTerm")]st }; } } + + [GraphQLDescription("Find recently released movies")] + public async IAsyncEnumerable GetRecentMovies([GraphQLName("count")]int count = 10) + { + var movieResult = movieService.GetRecentMovies(count); + await foreach (var dto in movieResult) + { + yield return new MovieType + { + Title = dto.Title, + MovieLanguage = dto.MovieLanguage ?? "Unknown", + ReleaseDate = dto.ReleaseDate ?? DateTime.MinValue, + Synopsis = "Synopsis not provided", // Assuming no synopsis in DTO + Cast = dto.Cast?.Select(x=>new PersonType { Name = x.Name}).ToList() ?? [], + Crew = dto.Crew?.ToDictionary( + kvp => kvp.Key, + kvp => kvp.Value.Select(p => new PersonType { Name = p.Name }).ToList()) ?? [] + }; + } + } } diff --git a/server/nt.microservice/services/MovieService/MovieService.Service.Interfaces/Services/IMovieService.cs b/server/nt.microservice/services/MovieService/MovieService.Service.Interfaces/Services/IMovieService.cs index f0a450a2..f7d4f2ba 100644 --- a/server/nt.microservice/services/MovieService/MovieService.Service.Interfaces/Services/IMovieService.cs +++ b/server/nt.microservice/services/MovieService/MovieService.Service.Interfaces/Services/IMovieService.cs @@ -6,4 +6,5 @@ public interface IMovieService { Task CreateMovie(MovieDto movie); IAsyncEnumerable Search(string searchTerm); + IAsyncEnumerable GetRecentMovies(int count = 10); } diff --git a/server/nt.microservice/services/MovieService/MovieService.Service/Services/MovieService.cs b/server/nt.microservice/services/MovieService/MovieService.Service/Services/MovieService.cs index d8586e28..7cbf48b7 100644 --- a/server/nt.microservice/services/MovieService/MovieService.Service/Services/MovieService.cs +++ b/server/nt.microservice/services/MovieService/MovieService.Service/Services/MovieService.cs @@ -5,6 +5,7 @@ using MovieService.Service.Interfaces.Services; using Omu.ValueInjecter; using System.Linq; +using System.Threading.Tasks; namespace MovieService.Service.Services; @@ -41,6 +42,18 @@ public async Task CreateMovie(MovieDto movie) } + public async IAsyncEnumerable GetRecentMovies(int count = 10) + { + if (count <= 0) + yield break; + + await foreach(var movie in _movieCrudService.GetRecentMovies(count)) + { + yield return Mapper.Map(movie); + } + + } + public async IAsyncEnumerable Search(string searchTerm) { if(string.IsNullOrEmpty(searchTerm))