/// <summary> /// Communication handler method /// </summary> /// <param name = "data"> Data </param> /// <param name = "reverted"> Reverse </param> /// <param name = "work"> At work </param> /// <returns> </returns> private async Task <TResult> LinkHandler <TParent, TChild, TResult>( LinkSubmitM data, bool reverted, Func <TParent, TChild, Task <TResult> > work) where TParent : class, IStatisticalUnit where TChild : class, IStatisticalUnit => await work( await _commonSvc.GetUnitById <TParent>(reverted ? data.Source2.Id : data.Source1.Id, false), await _commonSvc.GetUnitById <TChild>(reverted ? data.Source1.Id : data.Source2.Id, false));
/// <summary> /// Communication handler method for being created /// </summary> /// <param name = "data"> Data </param> /// <param name = "reverted"> Reverse </param> /// <param name = "idGetter"> Id getter </param> /// <returns> </returns> private async Task <bool> LinkCanCreateHandler <TParent, TChild>( LinkSubmitM data, bool reverted, Func <TChild, int?> idGetter, Action <TChild, int?> idSetter, string userId) where TParent : class, IStatisticalUnit where TChild : class, IStatisticalUnit, new() => await LinkHandler <TParent, TChild, bool>(data, reverted, (unit1, unit2) => { var childUnitId = idGetter(unit2); return(Task.FromResult(childUnitId == null || childUnitId.Value == unit1.RegId)); });
public async Task<IActionResult> CanBeLinked([FromQuery] LinkSubmitM model) => Ok(await _service.LinkCanCreate(model, User.GetUserId()));
// TODO: Optimize (Use Include instead of second query + another factory) /// <summary> /// The method of checking for the possibility of being connected /// </summary> /// <param name = "data"> Data </param> /// <param name = "userId"> User Id </param> /// <returns> </returns> public async Task <bool> LinkCanCreate(LinkSubmitM data, string userId) => await LinkContext(data, LinkCanCreateMedthod, nameof(Resource.LinkTypeInvalid), userId);