using System.Linq; using System.Threading.Tasks; using AutoMapper; using Nancy; using Nancy.ModelBinding; using Sony.Filtr.AdminAPI.ViewModels; using Sony.Filtr.Applications; using Sony.Filtr.Buzz; using Sony.Filtr.Contracts.Definitions; using Sony.Filtr.Contracts.Entities.Buzz; using Sony.Filtr.Core.Buzz; namespace Sony.Filtr.AdminAPI.Modules.Buzz { public class BuzzUsersModule : BaseModule { private readonly BuzzAccountManager _buzzAccountManager; public BuzzUsersModule(BuzzManager buzzManager, ApplicationInstanceManager applicationInstanceManager, BuzzAccountManager buzzAccountManager) : base(applicationInstanceManager) { _buzzAccountManager = buzzAccountManager; Get["GetBuzzUsers", "/{countryCode}/buzz/users"] = parameters => { var buzzUsers = buzzManager.GetBuzzImportUsers(CurrentApplication); return Response.AsJson(buzzUsers.Select(Mapper.Map)); }; Post["AddBuzzUser", "/{countryCode}/buzz/users", true] = async (parameters, cx) => { var buzzImportUser = this.Bind(a=> a.ApplicationID, a=> a.ID); if (buzzImportUser == null) { return HttpStatusCode.BadRequest; } buzzImportUser.ApplicationID = CurrentApplication.ID; buzzManager.SaveBuzzImportUser(buzzImportUser); await EnsureBuzzAccountExistsAsync(buzzImportUser); await buzzManager.SetSaveTracklistForUserPlaylists(buzzImportUser.SpotifyUserName, true); return Response.AsJson(Mapper.Map(buzzImportUser)); }; Get["GetSingleBuzzUser", "/{countryCode}/buzz/users/{id}", true] = async (parameters, cx) => { int id; BuzzImportUser buzzImportUser; if (string.IsNullOrWhiteSpace(parameters.id)) return HttpStatusCode.BadRequest; if (!int.TryParse((string)parameters.id, out id)) { buzzImportUser = await buzzManager.GetBuzzImportUserByName(parameters.id); } else { buzzImportUser = (await buzzManager.GetBuzzImportUsersById(id.ToString())).FirstOrDefault(); } if (buzzImportUser == null) return HttpStatusCode.NotFound; return Response.AsJson(Mapper.Map(buzzImportUser)); }; Put["UpdateBuzzUser", "/{countryCode}/buzz/users/{id}", true] = async (parameters, cx) => { int id; BuzzImportUser existing; if (string.IsNullOrWhiteSpace(parameters.id)) return HttpStatusCode.BadRequest; if (!int.TryParse((string)parameters.id, out id)) { existing = await buzzManager.GetBuzzImportUserByName(parameters.id); } else { existing = (await buzzManager.GetBuzzImportUsersById(id.ToString())).FirstOrDefault(); } if (existing == null) return HttpStatusCode.NotFound; var buzzImportUser = this.Bind(a => a.ApplicationID, a => a.ID); if (buzzImportUser == null) return HttpStatusCode.BadRequest; buzzImportUser.ID = existing.ID; buzzImportUser.ApplicationID = CurrentApplication.ID; buzzManager.SaveBuzzImportUser(buzzImportUser); await EnsureBuzzAccountExistsAsync(buzzImportUser); return Response.AsJson(Mapper.Map(buzzImportUser)); }; Delete["DeleteBuzzUser", "/{countryCode}/buzz/users/{id}", true] = async (parameters, cx) => { int id; BuzzImportUser existing; if (string.IsNullOrWhiteSpace(parameters.id)) return HttpStatusCode.BadRequest; if (!int.TryParse((string)parameters.id, out id)) { existing = await buzzManager.GetBuzzImportUserByName(parameters.id); } else { existing = (await buzzManager.GetBuzzImportUsersById(id.ToString())).FirstOrDefault(); } if (existing == null) return HttpStatusCode.NotFound; buzzManager.DeleteBuzzImportUser(existing); return HttpStatusCode.OK; }; } private async Task EnsureBuzzAccountExistsAsync(BuzzImportUser buzzImportUser) { var existingBuzzAccount = await _buzzAccountManager.GetBuzzUserAsync(buzzImportUser.SpotifyUserName, ServiceType.Spotify); if (existingBuzzAccount == null) { await _buzzAccountManager.AddBuzzUserAsync(new BuzzUser() { BuzzCategoryId = null, //Uncategorized ServiceType = ServiceType.Spotify, Username = buzzImportUser.SpotifyUserName, }); } } } }