public SprintFinished(Guid id, SprintStatus status, DateTime end, IReadOnlyCollection <Guid> unfinishedIssueIds)
 {
     Id                 = id;
     Status             = status;
     End                = end;
     UnfinishedIssueIds = unfinishedIssueIds;
 }
 public SprintListItem(Guid id, string name, DateTime start, DateTime end, SprintStatus status)
 {
     Id     = id;
     Name   = name;
     Start  = start;
     End    = end;
     Status = status;
 }
示例#3
0
 public Sprint(Guid id, Guid projectId, string name, DateTime startDate, DateTime endDate) : base(id)
 {
     ProjectId = projectId;
     Name      = name;
     StartDate = startDate;
     EndDate   = endDate;
     Status    = SprintStatus.Planned;
 }
示例#4
0
 public SprintCreated(Guid id, Guid projectId, string name, DateTime start, DateTime end, SprintStatus status)
 {
     Id        = id;
     ProjectId = projectId;
     Name      = name;
     Start     = start;
     End       = end;
     Status    = status;
 }
示例#5
0
 public SprintResponse(Guid id, string name, DateTime start, DateTime end, SprintStatus status, IReadOnlyCollection <UnfinishedIssue> unfinishedIssues, long version)
 {
     Id               = id;
     Name             = name;
     Start            = start;
     End              = end;
     Status           = status;
     UnfinishedIssues = unfinishedIssues;
     Version          = version;
 }
示例#6
0
        public IEnumerable <Sprint> ReadSprints(Identity projectId, SprintStatus status)
        {
            if (projectId.IsBlankIdentity())
            {
                throw CreateInvalidEntityException();
            }

            var sprints = _sprintCollection
                          .Find(x => x.ProjectId == projectId.ToPersistenceIdentity() && x.Status == status)
                          .ToEnumerable();

            return(sprints.Select(x => x.ToDomainEntity()));
        }
示例#7
0
 public Sprint(
     Identity id,
     Identity projectId,
     string name,
     Tuple <DateTime, DateTime> timeSpan,
     string goal,
     SprintStatus status,
     IEnumerable <Identity> documents) : base(id)
 {
     ProjectId = projectId;
     Name      = name;
     TimeSpan  = timeSpan;
     Goal      = goal;
     Status    = status;
     Documents = documents;
 }
示例#8
0
        public async Task FinishSprint(IIssueSearcher issueSearcher)
        {
            if (Status != SprintStatus.InProgress)
            {
                throw new CannotChangeSprintStatus(Id, Status, SprintStatus.Finished, DomainInformationProvider.Name);
            }

            var currentDate = DateTime.UtcNow.Date;

            if (EndDate.Date != currentDate)
            {
                EndDate = currentDate;
            }

            Status = SprintStatus.Finished;
            var unfinishedIssueIds = await issueSearcher.FindUnfinishedIssuesForSprint(ProjectId, Id);

            Update(new SprintFinished(Id, Status, EndDate, unfinishedIssueIds));
        }
示例#9
0
        public IEnumerable <SprintBacklog> ReadSprintBacklogs(Identity projectId, SprintStatus status)
        {
            if (projectId.IsBlankIdentity())
            {
                throw CreateInvalidEntityException();
            }

            var sprints = _sprintCollection
                          .Find(x => x.ProjectId == projectId.ToPersistenceIdentity() && x.Status == status)
                          .ToEnumerable();

            return(sprints.Select(x =>
                                  new SprintBacklog(x.Id.ToDomainIdentity(),
                                                    x.PlannedTasks.Select(t => t.ToDomainIdentity()),
                                                    x.CompletedTasks.Select(t => t.ToDomainIdentity()),
                                                    x.Backlog.Select(t => new SprintBacklog.WorkTaskWithStatus(
                                                                         t.WorkTaskId.ToDomainIdentity(),
                                                                         t.ParentTaskId.ToDomainIdentity(),
                                                                         t.Status)))));
        }
示例#10
0
        public async Task StartSprint(ISprintSearcher sprintSearcher)
        {
            if (Status != SprintStatus.Planned)
            {
                throw new CannotChangeSprintStatus(Id, Status, SprintStatus.InProgress, DomainInformationProvider.Name);
            }

            var sprints = await sprintSearcher.GetSprints(ProjectId);

            if (sprints.Any(x => x.Status == SprintStatus.InProgress))
            {
                throw new CannotStartSprintWhenAnyOtherIsNotFinished(Id);
            }

            var currentDate = DateTime.UtcNow.Date;

            if (StartDate.Date != currentDate)
            {
                StartDate = currentDate;
            }

            Status = SprintStatus.InProgress;
            Update(new SprintStarted(Id, Status, StartDate));
        }
 public CannotChangeSprintStatus(Guid sprintId, SprintStatus currentStatus, SprintStatus expectedStatus, string domainName) :
     base(domainName, $"Cannot change status of sprint with id {sprintId} to {expectedStatus.ToString()} because of current status. [ {currentStatus.ToString()} ]")
 {
 }
示例#12
0
 public SprintStarted(Guid id, SprintStatus status, DateTime start)
 {
     Id     = id;
     Status = status;
     Start  = start;
 }