public async Task <IDomainResult <BacklogItemReference> > AssignToUser(string backlogItemId, string?userShortenId) { var backlogItem = await DbSession.LoadAsync <BacklogItem>(GetFullId(backlogItemId)); if (backlogItem == null) { return(DomainResult.NotFound <BacklogItemReference>("The Backlog Item not found")); } if (userShortenId == null) { backlogItem.Assignee = null; } else { var userRef = await _userResolver.GetReferenceById(userShortenId); if (userRef == null) { return(DomainResult.NotFound <BacklogItemReference>("The user not found")); } backlogItem.Assignee = userRef; } backlogItem.AddHistoryRecord(await _userResolver.GetCurrentUserReference(), "Assigned a user"); return(DomainResult.Success( backlogItem.ToReference().RemoveEntityPrefixFromId() )); }
public async Task <IDomainResult> AssignToUser(string backlogItemId, string?userShortenId) { var fullId = GetFullId(backlogItemId); if (!await DbSession.Advanced.ExistsAsync(fullId)) { return(IDomainResult.NotFound("The Backlog Item not found")); } UserReference?userRef = null; if (userShortenId != null) { userRef = await _userResolver.GetReferenceById(userShortenId); if (userRef == null) { return(DomainResult.NotFound("The user not found")); } userRef = userRef.RemoveEntityPrefixFromId(); } DbSession.Advanced.Patch <BacklogItem, UserReference?>(fullId, x => x.Assignee, userRef); await AddHistoryRecordPatch(backlogItemId, userRef == null? "Removed assigned user" : $"Assigned user '{userRef.MentionedName}'"); return(IDomainResult.Success()); }
public async Task <IDomainResult <BacklogItem> > ConvertToEntity <TModel, TDto>(TDto dto, TModel?entity = null) where TModel : BacklogItem, new() where TDto : BacklogItemAddUpdRequestBase { entity ??= new TModel(); entity.Title = dto.Title; entity.State = dto.State; entity.EstimatedSize = dto.EstimatedSize; entity.Assignee = dto.AssigneeId != null ? await _userResolver.GetReferenceById(dto.AssigneeId) : null; if (dto.Tags?.Any(t => t.Length > 11) == true) { return(DomainResult <BacklogItem> .Failed("Each tag can't exceed 10 symbols")); } entity.Tags = dto.Tags?.Distinct().ToArray(); entity.AddHistoryRecord( await _userResolver.GetCurrentUserReference(), entity.ModifiedBy.Any() ? "Modified" : "Created" // TODO: Provide more informative description in case of modifications ); if (dto.ChangedCustomFields != null) { entity.CustomFields ??= new Dictionary <string, object>(); await ResolveChangedCustomFields(entity.CustomFields, dto.ChangedCustomFields); } await ResolveChangedRelatedItems(entity.RelatedItems, dto.ChangedRelatedItems); if (dto is BugAddUpdRequest bugDto && entity is BacklogItemBug bugEntity) { bugEntity.Severity = bugDto.Severity; bugEntity.Priority = bugDto.Priority; bugEntity.StepsToReproduce = bugDto.StepsToReproduce; bugEntity.AcceptanceCriteria = bugDto.AcceptanceCriteria; }