using System.Collections.Generic; using AutoMapper; using Nancy; using Nancy.ModelBinding; using Sony.Filtr.AdminAPI.BusinessLogic; using System.Linq; using Sony.Filtr.Applications; namespace Sony.Filtr.AdminAPI.Modules { public class ApplicationModule : BaseModule { private readonly ApplicationInstanceManager _applicationInstanceManager; public ApplicationModule(ApplicationsLogic applicationsLogic, ApplicationInstanceManager applicationInstanceManager) : base(applicationInstanceManager) { _applicationInstanceManager = applicationInstanceManager; Get["GetMarkets", "/Markets"] = parameters => { var applications = applicationInstanceManager.GetApplications(); var applicationViewModels = applications.Select(Mapper.Map).ToList(); return Response.AsJson(applicationViewModels); }; //Get["/MyMarkets"] = parameters => //TODO: Remove if user management is removed. //{ // var membershipUser = Membership.GetUser(Context.CurrentUser.UserName); // if (membershipUser == null) // return HttpStatusCode.BadRequest; // var applications = applicationInstanceManager.GetApplications(membershipUser); // var applicationViewModels = applications.Select(Mapper.Map).ToList(); // return Response.AsJson(applicationViewModels); //}; Get["GetSingleMarket", "/Markets/{applicationId}"] = parameters => { int? applicationId = (int?)parameters.applicationId; if (!applicationId.HasValue) return HttpStatusCode.BadRequest; var application = this.Bind(); if (application == null) return HttpStatusCode.BadRequest; var existingApplication = _applicationInstanceManager.GetApplication(applicationId.Value); if (existingApplication == null) return HttpStatusCode.NotFound; return Response.AsJson(Mapper.Map(existingApplication)); }; Post["AddMarket", "/Markets/"] = parameters => { var application = this.Bind(); if (application == null) return HttpStatusCode.BadRequest; application.Id = null; var addedApplication = applicationsLogic.SaveApplication(application); var viewModel = Mapper.Map(addedApplication); return Response.AsJson(viewModel); }; Put["UpdateMarket", "/Markets/{applicationId}"] = parameters => { int? applicationId = (int?)parameters.applicationId; if (!applicationId.HasValue) return HttpStatusCode.BadRequest; var application = this.Bind(); if (application == null) return HttpStatusCode.BadRequest; var existingApplication = _applicationInstanceManager.GetApplication(applicationId.Value); if (existingApplication == null) return HttpStatusCode.NotFound; application.Id = applicationId.Value; var updatedApplication = applicationsLogic.SaveApplication(application); var viewModel = Mapper.Map(updatedApplication); return Response.AsJson(viewModel); }; Delete["DeleteMarket", "/Markets/{applicationId}"] = parameters => { int? applicationId = (int?)parameters.applicationId; if (!applicationId.HasValue) return HttpStatusCode.BadRequest; var existingApplication = _applicationInstanceManager.GetApplication(applicationId.Value); applicationInstanceManager.DeleteApplication(existingApplication); return HttpStatusCode.NoContent; }; } } public class ApplicationViewModel { public int? Id { get; set; } public string Name { get; set; } public string CultureInfo { get; set; } public string SpotifyRegionCode { get; set; } public bool Active { get; set; } public string GACountryName { get; set; } public bool WorkoutMarket { get; set; } public bool IncludeOtherPlaylists { get; set; } public string DefaultService { get; set; } public List Services { get; set; } } }