diff --git a/RMuseum/RMuseum.xml b/RMuseum/RMuseum.xml
index 7b19a977..e717acbb 100644
--- a/RMuseum/RMuseum.xml
+++ b/RMuseum/RMuseum.xml
@@ -10155,6 +10155,27 @@
+
+
+ get song by id
+
+
+
+
+
+
+ modify a published song
+
+
+
+
+
+
+ delete poem song by id
+
+
+
+
new comment
@@ -12205,6 +12226,27 @@
+
+
+ get song by id
+
+
+
+
+
+
+ modify a published song
+
+
+
+
+
+
+ delete poem song by id
+
+
+
+
start generating gdb files
diff --git a/RMuseum/Services/IGanjoorService.cs b/RMuseum/Services/IGanjoorService.cs
index 2ad38682..ceaffe93 100644
--- a/RMuseum/Services/IGanjoorService.cs
+++ b/RMuseum/Services/IGanjoorService.cs
@@ -286,6 +286,28 @@ namespace RMuseum.Services
///
Task> DirectInsertSong(PoemMusicTrackViewModel song);
+ ///
+ /// get song by id
+ ///
+ ///
+ ///
+
+ Task> GetPoemSongById(int id);
+
+ ///
+ /// modify a published song
+ ///
+ ///
+ ///
+ Task> ModifyPublishedSong(PoemMusicTrackViewModel song);
+
+ ///
+ /// delete poem song by id
+ ///
+ ///
+ ///
+ Task> DeletePoemSongById(int id);
+
///
/// new comment
///
diff --git a/RMuseum/Services/Implementation/GanjoorService-Partials/GanjoorService-Songs.cs b/RMuseum/Services/Implementation/GanjoorService-Partials/GanjoorService-Songs.cs
index d558f303..9615adec 100644
--- a/RMuseum/Services/Implementation/GanjoorService-Partials/GanjoorService-Songs.cs
+++ b/RMuseum/Services/Implementation/GanjoorService-Partials/GanjoorService-Songs.cs
@@ -385,5 +385,103 @@ namespace RMuseum.Services.Implementation
return new RServiceResult(song);
}
+ ///
+ /// get song by id
+ ///
+ ///
+ ///
+
+ public async Task> GetPoemSongById(int id)
+ {
+ return new RServiceResult
+ (
+ await _context.GanjoorPoemMusicTracks
+ .Where
+ (
+ t => t.Id == id
+ )
+ .OrderBy(t => t.SongOrder)
+ .Select
+ (
+ t => new PoemMusicTrackViewModel()
+ {
+ Id = t.Id,
+ PoemId = t.PoemId,
+ TrackType = t.TrackType,
+ ArtistName = t.ArtistName,
+ ArtistUrl = t.ArtistUrl,
+ AlbumName = t.AlbumName,
+ AlbumUrl = t.AlbumUrl,
+ TrackName = t.TrackName,
+ TrackUrl = t.TrackUrl,
+ Description = t.Description,
+ BrokenLink = t.BrokenLink,
+ GolhaTrackId = t.GolhaTrackId == null ? 0 : (int)t.GolhaTrackId,
+ Approved = t.Approved,
+ Rejected = t.Rejected,
+ RejectionCause = t.RejectionCause
+
+ }
+ ).AsNoTracking().SingleOrDefaultAsync()
+ ) ;
+ }
+
+ ///
+ /// modify a published song
+ ///
+ ///
+ ///
+ public async Task> ModifyPublishedSong(PoemMusicTrackViewModel song)
+ {
+ if (!song.Approved )
+ return new RServiceResult(null, "!song.Approved ");
+
+
+ var track = await _context.GanjoorPoemMusicTracks.Where(t => t.Id == song.Id).SingleOrDefaultAsync();
+
+ track.TrackType = song.TrackType;
+ track.ArtistName = song.ArtistName;
+ track.ArtistUrl = song.ArtistUrl;
+ track.AlbumName = song.AlbumName;
+ track.AlbumUrl = song.AlbumUrl;
+ track.TrackName = song.TrackName;
+ track.TrackUrl = song.TrackUrl;
+ track.BrokenLink = song.BrokenLink;
+
+ GanjoorSinger singer = await _context.GanjoorSingers.AsNoTracking().Where(s => s.Url == track.ArtistUrl).FirstOrDefaultAsync();
+ if (singer != null)
+ {
+ track.SingerId = singer.Id;
+ }
+
+ _context.GanjoorPoemMusicTracks.Update(track);
+
+ await _context.SaveChangesAsync();
+
+ await CacheCleanForPageById(track.PoemId);
+
+ return new RServiceResult(song);
+ }
+
+ ///
+ /// delete poem song by id
+ ///
+ ///
+ ///
+ public async Task> DeletePoemSongById(int id)
+ {
+ try
+ {
+ var song = await _context.GanjoorPoemMusicTracks.Where(t => t.Id == id).SingleAsync();
+ _context.Remove(song);
+ await _context.SaveChangesAsync();
+ return new RServiceResult(true);
+ }
+ catch (Exception exp)
+ {
+ return new RServiceResult(false, exp.ToString());
+ }
+ }
+
}
}