Web application for sharing films and cinemas
ASP.NET Core MVC Web application for sharing, rating and reviewing films, adding projections in registered cinemas and reserving tickets
Made as an exam project for IT Career Module 7 “Software Development” by Tsvetilin Tsvetilov, Stoyan Zlatev and Pavlin Marinov
Three-tier architecture
Web APIs
Template model converting
public async Task<FilmData> GetAsync(string id)
{
return await context.FilmDatas.FindAsync(id);
}
public async Task<TModel> GetAsync<TModel>(string id, Func<FilmData, TModel> mapToModelFunc)
{
var film = await GetAsync(id);
return mapToModelFunc(film);
}
private TToModel MapSimilarProperties<TFromModel, TToModel>(TFromModel fromObject)
where TFromModel : class
where TToModel : class, new()
{
TToModel model = new TToModel();
if (fromObject != null)
{
PropertyInfo[] props = fromObject.GetType().GetProperties();
var modelType = model?.GetType();
foreach (var prop in props)
{
var modelProperty = modelType?.GetProperty(prop.Name);
if (modelProperty?.PropertyType?.Equals(prop.PropertyType) ?? false)
{
modelProperty.SetValue(model, prop.GetValue(fromObject));
}
}
}
return model;
}
public ExtendedFilmCardViewModel MapToExtendedFilmCardViewModel(FilmData filmData)
{
var viewModel = MapSimilarProperties<FilmData, ExtendedFilmCardViewModel>(filmData);
if (filmData != null)
{
viewModel.Id = filmData.FilmId;
viewModel.Genres = string.Join(", ", filmData.Genre.Select(a => a.Genre.ToString()));
viewModel.Rating = Math.Round(filmData.Film.Rating, 1).ToString();
}
return viewModel;
}