Badgerati/NotifyMeCI

View on GitHub
NotifyMeCI.Engine/Repositories/BuildStatusRepository.cs

Summary

Maintainability
A
3 hrs
Test Coverage
/*
Notify Me CI is designed to be an awesome CI desktop notifier.

Copyright (c) 2016, Matthew Kelly (Badgerati)
Company: Cadaeic Studios
License: MIT (see LICENSE for details)
 */

using NotifyMeCI.Engine.Repositories.Interfaces;
using NotifyMeCI.Injector;
using System;
using System.Linq;
using System.Collections.Generic;
using NotifyMeCI.Engine.Enums;
using NotifyMeCI.Engine.Objects;

namespace NotifyMeCI.Engine.Repositories
{
    [InjectionInterface(typeof(IBuildStatusRepository))]
    public class BuildStatusRepository : Repository<BuildStatus>, IBuildStatusRepository
    {

        #region Public Methods

        public void Insert(BuildStatus buildStatus)
        {
            buildStatus.LastUpdated = DateTime.Now;
            Collection.Insert(buildStatus);
        }

        public BuildStatus Update(BuildStatus buildStatus)
        {
            return UpdateMany(new List<BuildStatus>(1) { buildStatus }).FirstOrDefault();
        }

        public IList<BuildStatus> UpdateMany(IList<BuildStatus> buildStatuses)
        {
            var now = DateTime.Now;
            buildStatuses.ToList().ForEach(x => x.LastUpdated = now);

            var newBuildStatuses = buildStatuses.Where(x => x._id == 0).ToArray();
            var oldBuildStatuses = buildStatuses.Where(x => x._id > 0).ToArray();

            var oldUpdatedBuildStatuses = Collection.UpdateMany(oldBuildStatuses) ?? new List<BuildStatus>();
            var newUpdatedBuildStatuses = Collection.InsertMany(newBuildStatuses) ?? new List<BuildStatus>();

            oldUpdatedBuildStatuses.ToList().AddRange(newUpdatedBuildStatuses);
            return oldUpdatedBuildStatuses;
        }

        public BuildStatus FindByType(BuildStatusType type)
        {
            return Collection.Find("$[?(@.BuildStatusType == '" + type + "')]");
        }

        #endregion

    }
}