using Microsoft.EntityFrameworkCore; using RSecurityBackend.Models.Generic; using System; using System.Data; using System.Linq; using System.Threading.Tasks; namespace RMuseum.Services.Implementation { /// /// IDivanService implementation /// public partial class DivanService : IDivanService { /// /// transfer poems and sections from a meter to another one /// /// /// /// public async Task> TransferMeterAsync(int srcMeterId, int destMeterId) { try { if (srcMeterId == destMeterId) return new RServiceResult(false, "srcMeterId == destMeterId"); var src = await _context.DivanMetres.Where(m => m.Id == srcMeterId).SingleAsync(); var dest = await _context.DivanMetres.Where(m => m.Id == destMeterId).SingleAsync(); var poems = await _context.DivanPoems.Where(p => p.DivanMetreId == srcMeterId).ToListAsync(); foreach (var poem in poems) { poem.DivanMetreId = destMeterId; } _context.UpdateRange(poems); var sections = await _context.DivanPoemSections.Where(s => s.DivanMetreId == srcMeterId).ToListAsync(); foreach (var section in sections) { section.DivanMetreId = destMeterId; } _context.UpdateRange(sections); await _context.SaveChangesAsync(); dest.VerseCount += src.VerseCount; _context.Update(dest); await _context.SaveChangesAsync(); _context.Remove(src); await _context.SaveChangesAsync(); foreach (var section in sections) { if (!string.IsNullOrEmpty(section.RhymeLetters)) { UpdateRelatedSections(destMeterId, section.RhymeLetters); } } return new RServiceResult(true); } catch (Exception exp) { return new RServiceResult(false, exp.ToString()); } } } }