Exemplo n.º 1
0
        public async Task <IActionResult> SubscribeToChannel(int channelId)
        {
            try
            {
                NotificationChannel channel = await _Db.NotificationChannels.FindAsync(channelId);

                if (channel == null)
                {
                    return(NotFound("Notification channel not found"));
                }

                _Db.Add(new ChannelMembership
                {
                    AccountId             = User.AccountId(),
                    NotificationChannelId = channelId
                });

                await _Db.SaveChangesAsync();

                _Logger.LogDebug("User {0} subscribed to {1} notification channel", User.AccountName(), channel.Name);

                return(Ok($"Subscribed to: {channel.Name}"));
            }
            catch (Exception ex)
            {
                _Logger.LogError("Error subscribing {0} to notification channel ID {1}", User.AccountName(), channelId);
                _Logger.LogError(ex.StackTrace);
                return(BadRequest(new ResponseHelper("Something went wrong, please try again later", ex.Message)));
            }
        }
        public static void Seed(WebsiteDataContext context)
        {
            // Check whether database has already got data in it.
            Config cfg = context.Config.Find(1);

            if (cfg != null)
            {
                return;
            }

            //------------------------------------------------------------------

            StreamReader       mediaJson = new StreamReader(Path.Combine(basePath, "media.json"));
            List <MediaSeeder> media     = JsonConvert.DeserializeObject <List <MediaSeeder> >(mediaJson.ReadToEnd());

            mediaJson.Close();

            List <ImageMedia> images = media.Where(m => m.MediaType.Category == MediaCategory.Image).Select(m => (ImageMedia)m.ToBaseMedia()).ToList();
            List <AudioMedia> audios = media.Where(m => m.MediaType.Category == MediaCategory.Audio).Select(m => (AudioMedia)m.ToBaseMedia()).ToList();

            context.AddRangeWithIdentityInsert(images, "Media");
            context.AddRangeWithIdentityInsert(audios, "Media");

            //------------------------------------------------------------------

            StreamReader            categoriesJson = new StreamReader(Path.Combine(basePath, "categories.json"));
            List <FactFileCategory> categories     = JsonConvert.DeserializeObject <List <FactFileCategory> >(categoriesJson.ReadToEnd());

            categoriesJson.Close();

            context.AddRangeWithIdentityInsert(categories, "FactFileCategories");

            //-----------------------------------------------------------------

            StreamReader       entriesJson = new StreamReader(Path.Combine(basePath, "entries.json"));
            List <EntrySeeder> entries     = JsonConvert.DeserializeObject <List <EntrySeeder> >(entriesJson.ReadToEnd());

            entriesJson.Close();

            context.AddRangeWithIdentityInsert(entries.Select(e => e.ToFactFileEntry()), "FactFileEntries");
            context.AddRange(entries.Select(e => e.GetFactFileEntryImages())?.Aggregate((l1, l2) => l2 != null ? l1.Concat(l2).ToList() : l1));
            context.AddRange(entries.Select(e => e.GetFactFileNuggets())?.Aggregate((l1, l2) => l2 != null ? l1.Concat(l2).ToList() : l1));

            //------------------------------------------------------------------

            StreamReader       tracksJson = new StreamReader(Path.Combine(basePath, "tracks.json"));
            List <TrackSeeder> tracks     = JsonConvert.DeserializeObject <List <TrackSeeder> >(tracksJson.ReadToEnd());

            tracksJson.Close();


            context.AddRangeWithIdentityInsert(tracks.Select(t => t.ToTrack()), "Tracks");
            context.AddRangeWithIdentityInsert(tracks.Select(t => t.GetActivities())?.Aggregate((l1, l2) => l2 != null ? l1.Concat(l2).ToList() : l1), "Activities");
            context.AddRange(tracks.Select(t => t.GetActivityImages())?.Aggregate((l1, l2) => l2 != null ? l1.Concat(l2).ToList() : l1));


            //-------------------------------------------------------------------

            StreamReader      quizzesJson = new StreamReader(Path.Combine(basePath, "quizzes.json"));
            List <QuizSeeder> quizzes     = JsonConvert.DeserializeObject <List <QuizSeeder> >(quizzesJson.ReadToEnd());

            quizzesJson.Close();

            context.AddRangeWithIdentityInsert(quizzes.Select(q => q.ToQuiz()), "Quizzes");
            // Intially we cannot save correct answer IDs due to foreign key constraint. Will save without and add later.
            context.AddRangeWithIdentityInsert(quizzes.Select(q => q.GetQuestions(includeCorrectAnswers: false))?.Aggregate((l1, l2) => l2 != null ? l1.Concat(l2).ToList() : l1), "QuizQuestions");
            context.AddRangeWithIdentityInsert(quizzes.Select(q => q.GetAnswers())?.Aggregate((l1, l2) => l2 != null ? l1.Concat(l2).ToList() : l1), "QuizAnswers");

            //--------------------------------------------------------------------

            context.Add(new Config {
                MasterUnlockCode = "quizmaster"
            });

            context.SaveChanges();

            // Detach all entries from the tracker so that we can update questions with their correct answer IDs.
            List <EntityEntry> entityEntries = context.ChangeTracker.Entries().ToList();

            foreach (var entry in entityEntries)
            {
                entry.State = EntityState.Detached;
            }

            context.UpdateRange(quizzes.Select(q => q.GetQuestions(includeCorrectAnswers: true))?.Aggregate((l1, l2) => l2 != null ? l1.Concat(l2).ToList() : l1));

            // Save the database with the added correct answer IDs.
            context.SaveChanges();
        }