public async Task <int> Add(string connectionString, GiftCodeCampaign campaign)
        {
            var data = await WithConnection(connectionString, async (connection) =>
            {
                DynamicParameters parameters = new DynamicParameters();
                parameters.Add("@Id", campaign.Id, DbType.String);
                parameters.Add("@ParentId", string.Empty, DbType.String);
                parameters.Add("@NAME", campaign.Name, DbType.String);
                parameters.Add("@Notes", campaign.Notes, DbType.String);
                parameters.Add("@BeginDate", campaign.BeginDate, DbType.String);
                parameters.Add("@EndDate", campaign.EndDate, DbType.String);
                parameters.Add("@GiftCodeCalendar", campaign.GiftCodeCalendarsSerialize, DbType.String);
                parameters.Add("@MESSAGE", campaign.Message, DbType.String);
                parameters.Add("@STATUS", campaign.Status, DbType.Int64);
                parameters.Add("@AllowPaymentOnCheckout", campaign.AllowPaymentOnCheckout, DbType.Boolean);
                parameters.Add("@Conditions", campaign.GiftCodeConditionsSerialize, DbType.String);
                parameters.Add("@CreatedDateUtc", campaign.CreatedDateUtc, DbType.DateTime);
                parameters.Add("@UpdatedDateUtc", campaign.UpdatedDateUtc, DbType.DateTime);
                parameters.Add("@CreatedUid", campaign.CreatedUid, DbType.String);
                parameters.Add("@UpdatedUid", campaign.UpdatedUid, DbType.String);
                parameters.Add("@ShardId", campaign.ShardId, DbType.Int32);
                parameters.Add("@VERSION", campaign.Version, DbType.Int32);
                var result = await connection.ExecuteAsync(ProcName.GiftCodeCampaign_Add, parameters, commandType: CommandType.StoredProcedure);
                return(result);
            });

            return(data);
        }
        public async Task <ICommandResult> Handle(GiftCodeCampaignChangeCommand mesage)
        {
            try
            {
                var shard = await _shardingService.Get(mesage.ShardId);

                if (shard == null)
                {
                    throw new MessageException(ResourceKey.ShardingConfig_NotFound);
                }
                GiftCodeCampaign campaign = new GiftCodeCampaign();
                campaign.Change(mesage);
                int rowCount = await _giftcodeService.Change(shard.ConnectionString, campaign);

                if (rowCount <= 0)
                {
                    throw new MessageException(ResourceKey.GiftCodeCampaignCart_NotFound);
                }
                await _eventSender.Notify();

                ICommandResult result = new CommandResult()
                {
                    Message  = "",
                    ObjectId = string.Empty,
                    Status   = CommandResult.StatusEnum.Sucess
                };
                return(result);
            }
            catch (MessageException e)
            {
                e.Data["Param"] = mesage;
                ICommandResult result = new CommandResult()
                {
                    Message      = e.Message,
                    Status       = CommandResult.StatusEnum.Fail,
                    ResourceName = e.ResourceName
                };
                return(result);
            }
            catch (Exception e)
            {
                e.Data["Param"] = mesage;
                ICommandResult result = new CommandResult()
                {
                    Message = e.Message,
                    Status  = CommandResult.StatusEnum.Fail
                };
                return(result);
            }
        }
        public async Task <ICommandResult> Handle(GiftCodeCampaignAddCommand mesage)
        {
            try
            {
                var shard = await _shardingService.GetCurrentWriteShardByRoundRobin(ShardGroup);

                GiftCodeCampaign campaign = new GiftCodeCampaign();
                campaign.Add(mesage, shard.Id);
                int rowCount = await _giftcodeService.Add(shard.ConnectionString, campaign);

                if (rowCount <= 0)
                {
                    throw new MessageException(ResourceKey.GiftCodeCampaign_AddFail);
                }
                await _eventSender.Notify();

                ICommandResult result = new CommandResult()
                {
                    Message  = "",
                    ObjectId = string.Empty,
                    Status   = CommandResult.StatusEnum.Sucess
                };
                return(result);
            }
            catch (MessageException e)
            {
                e.Data["Param"] = mesage;
                ICommandResult result = new CommandResult()
                {
                    Message      = e.Message,
                    Status       = CommandResult.StatusEnum.Fail,
                    ResourceName = e.ResourceName
                };
                return(result);
            }
            catch (Exception e)
            {
                e.Data["Param"] = mesage;
                ICommandResult result = new CommandResult()
                {
                    Message = e.Message,
                    Status  = CommandResult.StatusEnum.Fail
                };
                return(result);
            }
        }
        public async Task <int> ChangeStatus(string connectionString, GiftCodeCampaign campaign, bool isApproved)
        {
            var data = await WithConnection(connectionString, async (connection) =>
            {
                DynamicParameters parameters = new DynamicParameters();
                parameters.Add("@Id", campaign.Id, DbType.String);
                parameters.Add("@STATUS", campaign.Name, DbType.String);
                parameters.Add("@UpdatedDateUtc", campaign.UpdatedDateUtc, DbType.DateTime);
                parameters.Add("@UpdatedUid", campaign.UpdatedUid, DbType.String);
                parameters.Add("@VERSION", campaign.Version, DbType.Int32);
                parameters.Add("@IsApproved", isApproved, DbType.Boolean);
                var result = await connection.ExecuteAsync(ProcName.GiftCodeCampaign_Change, parameters, commandType: CommandType.StoredProcedure);
                return(result);
            });

            return(data);
        }
 public async Task <int> ChangeStatus(string connectionString, GiftCodeCampaign campaign, bool isApproved)
 {
     return(await _giftcodeCampaignRepository.ChangeStatus(connectionString, campaign, isApproved));
 }
 public async Task <int> Change(string connectionString, GiftCodeCampaign campaign)
 {
     return(await _giftcodeCampaignRepository.Change(connectionString, campaign));
 }