示例#1
0
        public User(IEventStream stream, IEventPublisher publisher, IDeezerApi deezerApi,
                    ISongRepository songRepository, IPlaylistRepository playlistRepository, int songByPlaylist)
        {
            _publisher          = publisher;
            _decision           = new Decision(stream);
            _deezerApi          = deezerApi;
            _songRepository     = songRepository;
            _playlistRepository = playlistRepository;
            _songByPlaylist     = songByPlaylist;

            Playlist = Playlist.Empty;

            Restore(stream);
        }
示例#2
0
        public static User Create(IEventStream stream, IEventPublisher publisher,
                                  IDeezerApi deezerApi, ISongRepository songRepository, IPlaylistRepository playlistRepository,
                                  string email, string nickname, string userId, string accessToken,
                                  int songSize = 1)
        {
            var identity = Identity.Parse(email, nickname, userId, accessToken);

            var user = new User(stream, publisher, deezerApi, songRepository, playlistRepository, songSize)
            {
                Identity = identity
            };

            publisher.Publish(new UserCreated(identity));

            return(user);
        }
示例#3
0
 public DatabaseSong(IProvider provider, IDeezerApi deezerApi)
 {
     _provider  = provider;
     _deezerApi = deezerApi;
 }
示例#4
0
        public HomeModule(IDeezerApi deezerApi, ISongRepository songRepository,
                          IPlaylistRepository playlistRepository, Environment environment,
                          IMetric metric)
        {
            _deezerApi          = deezerApi;
            _songRepository     = songRepository;
            _playlistRepository = playlistRepository;
            _environment        = environment;
            _metric             = metric;
            var eventStream    = new MemoryEventStream();
            var eventPublisher = new EventBus(eventStream);

            eventPublisher.Subscribe(new PlaylistHandler(playlistRepository));

            Get["/"] = _ =>
            {
                using (var timer = _metric.Timer("home"))
                {
                    var model = new
                    {
                        appid   = _environment.AppId,
                        channel = _environment.Channel
                    };

                    return(View["index", model]);
                }
            };

            Get["/channel"] = _ =>
            {
                using (var timer = _metric.Timer("channel"))
                {
                    var cacheExpire = 60 * 60 * 24 * 365;

                    return(View["channel"]
                           .WithHeader("Pragma", "public")
                           .WithHeader("Cache-Control", $"maxage={cacheExpire}")
                           .WithHeader("Expires", DateTime.Now.AddMinutes(cacheExpire).ToString("F")));
                }
            };

            Post["/login"] = _ =>
            {
                using (var timer = _metric.Timer("createplaylist"))
                {
                    var model = this.Bind <LoginViewModel>();

                    var user = User.Create(eventStream, eventPublisher, _deezerApi, _songRepository,
                                           _playlistRepository, model.Email, model.Nickname, model.UserId, model.AccessToken,
                                           _environment.Size);

                    user.AddPlaylist(model.PlaylistName);
                    Console.WriteLine(user.Playlist.PlaylistId.Value);
                    return(Response.AsJson(new { playlistCreated = !user.Playlist.PlaylistId.IsEmpty }));
                }
            };

            Get["/canCreatePlaylist/{userId}"] = parameters =>
            {
                using (var timer = _metric.Timer("hasplaylist"))
                {
                    var userId            = UserId.Parse((string)parameters.userId);
                    var canCreatePlaylist = _playlistRepository
                                            .CanCreatePlaylist(userId, DateTime.UtcNow.AddDays(-1));

                    return(Response.AsJson(new { canCreatePlaylist }));
                }
            };
        }
示例#5
0
        public AdminModule(IAdminRepository adminRepository,
                           IHmacProvider hmacProvider, IRequest request,
                           DatabaseSong dbsong, DatabaseDomain dbDomain,
                           IDeezerApi deezerApi, IRadioSongRepository radioSongRepository) : base("admin")
        {
            this.RequiresAuthentication();

            Get["/"] = _ => View["index"];

            Get["/AddUser"] = _ => View["addUser"];

            Post["/addUser"] = parameter =>
            {
                var model = this.Bind <AddUserViewModel>();

                if (!adminRepository.Exists(model.Login))
                {
                    adminRepository
                    .Add(
                        model.Login,
                        hmacProvider.GenerateHmac(model.Password));
                }

                return(Response.AsRedirect("/admin"));
            };

            Get["/GetCoordinate"] = _ =>
            {
                var hackManager = new HackManager(request);

                var flattenAsDateIp = File.ReadAllLines("/var/log/auth.log").Select(x =>
                {
                    var dateIp = DateIpParsor.Line(x);
                    return(dateIp);
                })
                                      .Where(x => !x.IsEmpty)
                                      .GroupBy(x => new { x.Date, x.Ip })
                                      .Select(x => DateIp.Create(x.Key.Date, x.Key.Ip))
                                      .ToList();

                var localizations = hackManager.GetLocalization(flattenAsDateIp);

                return(Response.AsJson(localizations));
            };

            Get["GenerateSong"] = _ =>
            {
                dbsong.Create();
                var playlistIds = deezerApi
                                  .GetPlaylistIdsByUserId(
                    "frKtbRGI9G18kljXooH4oQ0XbmntBD7oXeKBVBcVKIyjMMSDle0",
                    UserId.Parse("4934039"), s => s.ToLower().Contains("djam"));


                foreach (var playlistId in playlistIds)
                {
                    var songs = deezerApi.GetSongsByPlaylistId("frKtbRGI9G18kljXooH4oQ0XbmntBD7oXeKBVBcVKIyjMMSDle0", playlistId);

                    foreach (var deezerSong in songs)
                    {
                        if (!radioSongRepository.SongExists(deezerSong.Id))
                        {
                            Console.WriteLine(deezerSong.Id);
                            radioSongRepository.Add(deezerSong.Id, "NUSED", deezerSong.Title, deezerSong.Artist);
                        }
                    }
                }

                return("ok");
            };

            Get["GenerateDomain"] = _ =>
            {
                dbDomain.Create();

                dbsong.Create();
                return("ok");
            };
        }
示例#6
0
 public RadioSongHandler(IRadioSongRepository radioSongRepository, IDeezerApi deezerApi)
 {
     _radioSongRepository = radioSongRepository;
     _deezerApi           = deezerApi;
 }