diff --git a/RMuseum/RMuseum.xml b/RMuseum/RMuseum.xml index 20e90d52..d447f83a 100644 --- a/RMuseum/RMuseum.xml +++ b/RMuseum/RMuseum.xml @@ -9866,6 +9866,68 @@ + + + numbering service + + + + + add numbering + + + + + + + update an existing numbering (only name) + + + + + + + delete numbering + + + + + + + get numbering by id + + + + + + + get all numberings + + + + + + get numberings for a cat + + + + + + get numberings for direct subcats of parent cat + + + + + + Database Context + + + + + constructor + + + IGanjoorService implementation diff --git a/RMuseum/Services/Implementation/GanjoorNumberingService.cs b/RMuseum/Services/Implementation/GanjoorNumberingService.cs new file mode 100644 index 00000000..4469bd3a --- /dev/null +++ b/RMuseum/Services/Implementation/GanjoorNumberingService.cs @@ -0,0 +1,170 @@ +using Microsoft.EntityFrameworkCore; +using RMuseum.DbContext; +using RMuseum.Models.Ganjoor; +using RSecurityBackend.Models.Generic; +using System; +using System.Linq; +using System.Threading.Tasks; + +namespace RMuseum.Services.Implementation +{ + /// + /// numbering service + /// + public class GanjoorNumberingService + { + /// + /// add numbering + /// + /// + /// + public async Task> AddNumberingAsync(GanjoorNumbering numbering) + { + numbering.Name = numbering.Name == null ? numbering.Name : numbering.Name.Trim(); + if (string.IsNullOrEmpty(numbering.Name)) + return new RServiceResult(null, "ورود نام طرح شماره‌گذاری اجباری است."); + var existing = await _context.GanjoorNumberings.Where(l => l.Name == numbering.Name).FirstOrDefaultAsync(); + if (existing != null) + return new RServiceResult(null, "اطلاعات تکراری است."); + try + { + _context.GanjoorNumberings.Add(numbering); + await _context.SaveChangesAsync(); + return new RServiceResult(numbering); + } + catch (Exception exp) + { + return new RServiceResult(null, exp.ToString()); + } + } + + /// + /// update an existing numbering (only name) + /// + /// + /// + public async Task> UpdateNumberingAsync(GanjoorNumbering updated) + { + try + { + var numbering = await _context.GanjoorNumberings.Where(l => l.Id == updated.Id).SingleOrDefaultAsync(); + if (numbering == null) + return new RServiceResult(false, "اطلاعات طرح شماره گذاری یافت نشد."); + + numbering.Name = updated.Name; + _context.Update(numbering); + + await _context.SaveChangesAsync(); + return new RServiceResult(true); + } + catch (Exception exp) + { + return new RServiceResult(false, exp.ToString()); + } + } + + /// + /// delete numbering + /// + /// + /// + public async Task> DeleteNumberingAsync(int id) + { + try + { + var numbering = await _context.GanjoorNumberings.Where(l => l.Id == id).SingleOrDefaultAsync(); + if (numbering == null) + return new RServiceResult(false, "اطلاعات طرح شماره گذاری یافت نشد."); + + _context.Remove(numbering); + + await _context.SaveChangesAsync(); + return new RServiceResult(true); + } + catch (Exception exp) + { + return new RServiceResult(false, exp.ToString()); + } + } + + /// + /// get numbering by id + /// + /// + /// + public async Task> GetNumberingAsync(int id) + { + try + { + return new RServiceResult(await _context.GanjoorNumberings.Where(l => l.Id == id).SingleOrDefaultAsync()); + } + catch (Exception exp) + { + return new RServiceResult(null, exp.ToString()); + } + } + + /// + /// get all numberings + /// + /// + public async Task> GetNumberingsAsync() + { + try + { + return new RServiceResult(await _context.GanjoorNumberings.OrderBy(l => l.Id).ToArrayAsync()); + } + catch (Exception exp) + { + return new RServiceResult(null, exp.ToString()); + } + } + + /// + /// get numberings for a cat + /// + /// + public async Task> GetNumberingsForCatAsync(int catId) + { + try + { + return new RServiceResult(await _context.GanjoorNumberings.Where(n => n.StartCatId == catId).OrderBy(l => l.Id).ToArrayAsync()); + } + catch (Exception exp) + { + return new RServiceResult(null, exp.ToString()); + } + } + + /// + /// get numberings for direct subcats of parent cat + /// + /// + public async Task> GetNumberingsForDirectSubCatsAsync(int parentCatId) + { + try + { + var subcatIds = await _context.GanjoorCategories.Where(c => c.ParentId == parentCatId).Select(c => c.Id).ToListAsync(); + return new RServiceResult(await _context.GanjoorNumberings.Where(n => subcatIds.Contains(n.StartCatId)).OrderBy(l => l.Id).ToArrayAsync()); + } + catch (Exception exp) + { + return new RServiceResult(null, exp.ToString()); + } + } + + /// + /// Database Context + /// + protected readonly RMuseumDbContext _context; + + /// + /// constructor + /// + /// + public GanjoorNumberingService(RMuseumDbContext context) + { + _context = context; + } + } +}