//--------------------------------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); } }