using _0_Framework.Application; using AccountManagement.Application.Contracts.SubAccountPermissionSubtitle; using AccountManagement.Domain.SubAccountPermissionSubtitle1Agg; using AccountManagement.Domain.SubAccountPermissionSubtitle2Agg; using AccountManagement.Domain.SubAccountPermissionSubtitle3Agg; using AccountManagement.Domain.SubAccountPermissionSubtitle4Agg; using System.Collections.Generic; namespace AccountManagement.Application { public class SubAccountPermissionSubtitleApplication : ISubAccountPermissionSubtitleApplication { private readonly ISubAccountPermissionSubtitle1Repository _subAccountPermissionSubtitle1Repository; private readonly ISubAccountPermissionSubtitle2Repository _subAccountPermissionSubtitle2Repository; private readonly ISubAccountPermissionSubtitle3Repository _subAccountPermissionSubtitle3Repository; private readonly ISubAccountPermissionSubtitle4Repository _subAccountPermissionSubtitle4Repository; public SubAccountPermissionSubtitleApplication(ISubAccountPermissionSubtitle4Repository subAccountPermissionSubtitle4Repository, ISubAccountPermissionSubtitle3Repository subAccountPermissionSubtitle3Repository, ISubAccountPermissionSubtitle2Repository subAccountPermissionSubtitle2Repository, ISubAccountPermissionSubtitle1Repository subAccountPermissionSubtitle1Repository) { _subAccountPermissionSubtitle4Repository = subAccountPermissionSubtitle4Repository; _subAccountPermissionSubtitle3Repository = subAccountPermissionSubtitle3Repository; _subAccountPermissionSubtitle2Repository = subAccountPermissionSubtitle2Repository; _subAccountPermissionSubtitle1Repository = subAccountPermissionSubtitle1Repository; } public OperationResult Create(CreateSubAccountPermissionSubtitle1 command) { OperationResult op = new(); command.Title = command.Title.Trim(); if (_subAccountPermissionSubtitle1Repository.Exists(x => x.Title == command.Title)) return op.Failed(ApplicationMessages.DuplicatedRecord); if (string.IsNullOrWhiteSpace(command.Title)) return op.Failed("عنوان نقش نمی تواند خالی باشند"); var entity = new SubAccountPermissionSubtitle1(command.Title, command.Code); _subAccountPermissionSubtitle1Repository.Create(entity); _subAccountPermissionSubtitle1Repository.SaveChanges(); return op.Succcedded(entity.id); } public OperationResult Create(CreateSubAccountPermissionSubtitle2 command) { OperationResult op = new(); command.Title = command.Title.Trim(); if (!_subAccountPermissionSubtitle1Repository.Exists(x => x.id == command.ParentId)) return op.Failed("خطای سیستمی"); if (_subAccountPermissionSubtitle2Repository.Exists(x => x.Title == command.Title)) return op.Failed(ApplicationMessages.DuplicatedRecord); if (string.IsNullOrWhiteSpace(command.Title)) return op.Failed("عنوان نقش نمی تواند خالی باشند"); var entity = new SubAccountPermissionSubtitle2(command.Title, command.Code, command.ParentId); _subAccountPermissionSubtitle2Repository.Create(entity); _subAccountPermissionSubtitle2Repository.SaveChanges(); return op.Succcedded(entity.id); } public OperationResult Create(CreateSubAccountPermissionSubtitle3 command) { OperationResult op = new(); command.Title = command.Title.Trim(); if (!_subAccountPermissionSubtitle2Repository.Exists(x => x.id == command.ParentId)) return op.Failed("خطای سیستمی"); if (_subAccountPermissionSubtitle3Repository.Exists(x => x.Title == command.Title)) return op.Failed(ApplicationMessages.DuplicatedRecord); if (string.IsNullOrWhiteSpace(command.Title)) return op.Failed("عنوان نقش نمی تواند خالی باشند"); var entity = new SubAccountPermissionSubtitle3(command.Title, command.Code, command.ParentId); _subAccountPermissionSubtitle3Repository.Create(entity); _subAccountPermissionSubtitle3Repository.SaveChanges(); return op.Succcedded(entity.id); } public OperationResult Create(CreateSubAccountPermissionSubtitle4 command) { OperationResult op = new(); command.Title = command.Title.Trim(); if (!_subAccountPermissionSubtitle3Repository.Exists(x => x.id == command.ParentId)) return op.Failed("خطای سیستمی"); if (_subAccountPermissionSubtitle4Repository.Exists(x => x.Title == command.Title)) return op.Failed(ApplicationMessages.DuplicatedRecord); if (string.IsNullOrWhiteSpace(command.Title)) return op.Failed("عنوان نقش نمی تواند خالی باشند"); var entity = new SubAccountPermissionSubtitle4(command.Title, command.Code, command.ParentId); _subAccountPermissionSubtitle4Repository.Create(entity); _subAccountPermissionSubtitle4Repository.SaveChanges(); return op.Succcedded(entity.id); } public OperationResult DeleteSubtitle1(long id) { OperationResult op = new(); var entity = _subAccountPermissionSubtitle1Repository.Get(id); if (entity == null) return op.Failed(ApplicationMessages.RecordNotFound); if (_subAccountPermissionSubtitle2Repository.Exists(x => x.ParentId == entity.id)) return op.Failed("برای حذف کردن این نقش اول باید نقش های فرزند را حذف کنید"); _subAccountPermissionSubtitle1Repository.Remove(entity); _subAccountPermissionSubtitle1Repository.SaveChanges(); return op.Succcedded(id); } public OperationResult DeleteSubtitle2(long id) { OperationResult op = new(); var entity = _subAccountPermissionSubtitle2Repository.Get(id); if (entity == null) return op.Failed(ApplicationMessages.RecordNotFound); if (_subAccountPermissionSubtitle3Repository.Exists(x => x.ParentId == entity.id)) return op.Failed("برای حذف کردن این نقش اول باید نقش های فرزند را حذف کنید"); _subAccountPermissionSubtitle2Repository.Remove(entity); _subAccountPermissionSubtitle2Repository.SaveChanges(); return op.Succcedded(id); } public OperationResult DeleteSubtitle3(long id) { OperationResult op = new(); var entity = _subAccountPermissionSubtitle3Repository.Get(id); if (entity == null) return op.Failed(ApplicationMessages.RecordNotFound); if (_subAccountPermissionSubtitle4Repository.Exists(x => x.ParentId == entity.id)) return op.Failed("برای حذف کردن این نقش اول باید نقش های فرزند را حذف کنید"); _subAccountPermissionSubtitle3Repository.Remove(entity); _subAccountPermissionSubtitle3Repository.SaveChanges(); return op.Succcedded(id); } public OperationResult DeleteSubtitle4(long id) { OperationResult op = new(); var entity = _subAccountPermissionSubtitle4Repository.Get(id); if (entity == null) return op.Failed(ApplicationMessages.RecordNotFound); _subAccountPermissionSubtitle4Repository.Remove(entity); _subAccountPermissionSubtitle4Repository.SaveChanges(); return op.Succcedded(id); } public OperationResult Edit(EditSubAccountPermissionSubtitle1 command) { OperationResult op = new(); command.Title = command.Title.Trim(); var entity = _subAccountPermissionSubtitle1Repository.Get(command.Id); if (entity == null) return op.Failed(ApplicationMessages.RecordNotFound); if (_subAccountPermissionSubtitle1Repository.Exists(x => x.Title == command.Title && x.id != command.Id)) return op.Failed(ApplicationMessages.DuplicatedRecord); if (string.IsNullOrWhiteSpace(command.Title)) return op.Failed("عنوان نقش نمی تواند خالی باشند"); entity.Edit(command.Title, command.Code); _subAccountPermissionSubtitle1Repository.SaveChanges(); return op.Succcedded(); } public OperationResult Edit(EditSubAccountPermissionSubtitle2 command) { OperationResult op = new(); command.Title = command.Title.Trim(); var entity = _subAccountPermissionSubtitle2Repository.Get(command.Id); if (entity == null) return op.Failed(ApplicationMessages.RecordNotFound); if (!_subAccountPermissionSubtitle1Repository.Exists(x => x.id == command.ParentId)) return op.Failed("خطای سیستمی"); if (_subAccountPermissionSubtitle2Repository.Exists(x => x.Title == command.Title && x.id != command.Id)) return op.Failed(ApplicationMessages.DuplicatedRecord); if (string.IsNullOrWhiteSpace(command.Title)) return op.Failed("عنوان نقش نمی تواند خالی باشند"); entity.Edit(command.Title, command.Code, command.ParentId); _subAccountPermissionSubtitle2Repository.SaveChanges(); return op.Succcedded(); } public OperationResult Edit(EditSubAccountPermissionSubtitle3 command) { OperationResult op = new(); command.Title = command.Title.Trim(); var entity = _subAccountPermissionSubtitle3Repository.Get(command.Id); if (entity == null) return op.Failed(ApplicationMessages.RecordNotFound); if (!_subAccountPermissionSubtitle2Repository.Exists(x => x.id == command.ParentId)) return op.Failed("خطای سیستمی"); if (_subAccountPermissionSubtitle3Repository.Exists(x => x.Title == command.Title && x.id != command.Id)) return op.Failed(ApplicationMessages.DuplicatedRecord); if (string.IsNullOrWhiteSpace(command.Title)) return op.Failed("عنوان نقش نمی تواند خالی باشند"); entity.Edit(command.Title, command.Code, command.ParentId); _subAccountPermissionSubtitle3Repository.SaveChanges(); return op.Succcedded(); } public OperationResult Edit(EditSubAccountPermissionSubtitle4 command) { OperationResult op = new(); command.Title = command.Title.Trim(); var entity = _subAccountPermissionSubtitle4Repository.Get(command.Id); if (entity == null) return op.Failed(ApplicationMessages.RecordNotFound); if (!_subAccountPermissionSubtitle3Repository.Exists(x => x.id == command.ParentId)) return op.Failed("خطای سیستمی"); if (_subAccountPermissionSubtitle4Repository.Exists(x => x.Title == command.Title && x.id != command.Id)) return op.Failed(ApplicationMessages.DuplicatedRecord); if (string.IsNullOrWhiteSpace(command.Title)) return op.Failed("عنوان نقش نمی تواند خالی باشند"); entity.Edit(command.Title, command.Code, command.ParentId); _subAccountPermissionSubtitle4Repository.SaveChanges(); return op.Succcedded(); } public List GetAllSubtitlesNested() { return _subAccountPermissionSubtitle1Repository.GetAllWithChildren(); } } }