Пример #1
0
        //--------------------------------Inserimento corso-----------------------------------------

        public async Task <CourseDetailViewModel> CreateCourseAsync(CourseCreateInputModel inputModel)
        {
            //uso il servizio infrastrutturare per rivolgergli la query
            string title  = inputModel.Title;   //cio che l'utente inserisce
            string author = "Mario Rossi";


            try{
                //definisce alcuni valori predefiniti per evitare di inserire un campo vuoto
                int courseId = await db.ExecuteQueryScalarAsync <int>($@"INSERT INTO Courses (Title, Author, ImagePath, CurrentPrice_Currency, CurrentPrice_Amount, FullPrice_Currency, FullPrice_Amount) VALUES ({title}, {author}, 'Courses/default.png', 'EUR', 0, 'EUR', 0);
                                                    SELECT last_insert_rowid();");

                //int courseId = Convert.ToInt32(dataSet.Tables[0].Rows[0][0]); //entra nella prima tabella e di tutte le sue righe e colonne siamo entrati nella prima (il risultato da una sola riga come risultato)

                //fornisco l'id a una chiamata GetCourseAsync per ottenere tutto l'oggetto CourseDetailViewModel(Author, description, ecc...)
                CourseDetailViewModel course = await GetCourseAsync(courseId);

                return(course);

                //catturo solamnte la sqlitexception con codice 19 (i corsi sono unique)
            } catch (SqliteException ex) when(ex.SqliteErrorCode == 19)
            {
                //eccezione personalizzata: creazione del corso fallita perché il titolo é già in utilizzo da un altro corso
                throw new CourseTitleUnavailableException(title, ex);
            }
        }