Promact/slack-erp-custom-integration-mvc

View on GitHub
Slack.Automation/Promact.Core.Repository/SlackChannelRepository/SlackChannelRepository.cs

Summary

Maintainability
A
0 mins
Test Coverage
using System.Threading.Tasks;
using Promact.Erp.DomainModel.ApplicationClass.SlackRequestAndResponse;
using Promact.Erp.DomainModel.DataRepository;
using System.Collections.Generic;


namespace Promact.Core.Repository.SlackChannelRepository
{
    public class SlackChannelRepository : ISlackChannelRepository
    {

        #region Private Variable

        private readonly IRepository<SlackChannelDetails> _slackChannelDetailsRepository;

        #endregion


        #region Constructor

        public SlackChannelRepository(IRepository<SlackChannelDetails> slackChannelDetailsRepository)
        {
            _slackChannelDetailsRepository = slackChannelDetailsRepository;
        }

        #endregion


        #region Public Methods


        /// <summary>
        /// Method to add slack channel. - JJ
        /// </summary>
        /// <param name="slackChannelDetails">object of SlackChannelDetails</param>
        public async Task AddSlackChannelAsync(SlackChannelDetails slackChannelDetails)
        {
            _slackChannelDetailsRepository.Insert(slackChannelDetails);
            await _slackChannelDetailsRepository.SaveChangesAsync();
        }


        /// <summary>
        /// Method to get slack channel information by their slack channel id - JJ
        /// </summary>
        /// <param name="slackChannelId">Id of slack channel</param>
        /// <returns>object of SlackChannelDetails</returns>
        public async Task<SlackChannelDetails> GetByIdAsync(string slackChannelId)
        {
            SlackChannelDetails channel = await _slackChannelDetailsRepository.FirstOrDefaultAsync(x => x.ChannelId == slackChannelId);
            return channel;
        }


        /// <summary>
        /// Method to update slack channel details - JJ
        /// </summary>
        /// <param name="slackChannelDetails">object of SlackChannelDetails</param>
        public async Task UpdateSlackChannelAsync(SlackChannelDetails slackChannelDetails)
        {
            _slackChannelDetailsRepository.Update(slackChannelDetails);
            await _slackChannelDetailsRepository.SaveChangesAsync();
        }


        /// <summary>
        /// Method to delete slack channel by their slack channel id - JJ
        /// </summary>
        /// <param name="slackChannelId">Id of slack channel</param>
        public async Task DeleteChannelAsync(string slackChannelId)
        {
            SlackChannelDetails channel = await GetByIdAsync(slackChannelId);
            if (channel != null)
            {
                _slackChannelDetailsRepository.Delete(channel.Id);
                await _slackChannelDetailsRepository.SaveChangesAsync();
            }
        }


        /// <summary>
        /// Method to fetch active slack channels - JJ
        /// </summary>
        ///<returns>list of object of SlackChannelDetails</returns>
        public async Task<IEnumerable<SlackChannelDetails>> FetchChannelAsync()
        {
            return await _slackChannelDetailsRepository.FetchAsync(x => !x.Deleted);
        }


        /// <summary>
        /// Method to fetch active slack channels - JJ
        /// </summary>
        /// <param name="projectId">Id of the OAuth Project</param>
        ///<returns>object of SlackChannelDetails</returns>
        public async Task<SlackChannelDetails> FetchChannelByProjectIdAsync(int projectId)
        {
            return await _slackChannelDetailsRepository.FirstOrDefaultAsync(x => x.ProjectId == projectId);
        }

            
        #endregion
    }
}