예제 #1
0
        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;
            }