public HttpResponseMessage CreateSong([FromBody] SongModel songModel) { if (songModel.Artists.Count == 0) { return(Request.CreateResponse(HttpStatusCode.BadRequest, "Phải có ít nhất 1 nghệ sĩ")); } using (var db = new OnlineMusicEntities()) { var user = (from u in db.Users where u.Id == songModel.AuthorId select u).FirstOrDefault(); if (user == null) { return(Request.CreateErrorResponse(HttpStatusCode.NotFound, "Không tìm thấy user id=" + songModel.AuthorId)); } using (var transaction = db.Database.BeginTransaction()) { try { var song = new Song(); var query = dto.GetSongQuery(db); // Update artists of song foreach (var artist in songModel.Artists) { var art = (from a in db.Artists where a.Id == artist.Id select a).FirstOrDefault(); if (art == null) { art = new Artist() { FullName = artist.FullName, GenreId = artist.GenreId > 0 ? artist.GenreId : 1, Gender = 0, DateOfBirth = null, Photo = GoogleDriveServices.DEFAULT_ARTIST, Verified = false }; db.Artists.Add(art); db.SaveChanges(); } song.Artists.Add(art); } songModel.UpdateEntity(song); song.UploadedDate = DateTime.Now; song.Privacy = song.Verified = song.Official = false; db.Songs.Add(song); db.SaveChanges(); transaction.Commit(); db.Entry(song).Reference(s => s.Genre).Load(); db.Entry(song).Reference(s => s.User).Load(); db.Entry(song).Collection(s => s.Artists).Load(); songModel = dto.GetSongQuery(db, s => s.Id == song.Id).FirstOrDefault(); return(Request.CreateResponse(HttpStatusCode.Created, songModel)); } catch (Exception ex) { transaction.Rollback(); return(Request.CreateErrorResponse(HttpStatusCode.InternalServerError, ex.Message)); } } } }
public HttpResponseMessage UpdateSong([FromBody] SongModel songModel) { using (var db = new OnlineMusicEntities()) { var song = (from a in db.Songs where a.Id == songModel.Id select a).FirstOrDefault(); if (song == null) { return(Request.CreateErrorResponse(HttpStatusCode.NotFound, "Không tìm thấy nghệ sĩ id=" + songModel.Id)); } // Update junction data if (songModel.Artists.Count > 0) { song.Artists.Clear(); foreach (var artist in songModel.Artists) { var art = (from a in db.Artists where a.Id == artist.Id select a).FirstOrDefault(); if (art == null) { art = new Artist() { FullName = artist.FullName, GenreId = artist.GenreId > 0 ? artist.GenreId : 1, Gender = 0, DateOfBirth = null, Photo = GoogleDriveServices.DEFAULT_ARTIST, Verified = false }; } song.Artists.Add(art); } } songModel.UpdateEntity(song); db.SaveChanges(); songModel = dto.GetSongQuery(db, s => s.Id == song.Id).FirstOrDefault(); return(Request.CreateResponse(HttpStatusCode.OK, songModel)); } }