예제 #1
0
        /// <summary>
        /// Updates minute slot
        /// </summary>
        /// <param name="slot"></param>
        /// <param name="newOnly"></param>
        /// <returns></returns>
        public virtual async Task <bool> SetMinuteSlot(Slot5Min slot, bool newOnly)
        {
            if (slot is null)
            {
                throw new ArgumentNullException(nameof(slot));
            }

            try
            {
                var ret = await redisCacheClient.Db0.HashSetAsync($"{configuration["db-prefix"]}{REDIS_KEY_SLOT_OBJECTS_M}", $"{slot.PlaceId}_{slot.Time.Ticks}", slot, newOnly);

                if (newOnly && !ret)
                {
                    throw new Exception(localizer[Repository_RedisRepository_SlotRepository.Error_creating_minute_slot].Value);
                }
                await redisCacheClient.Db0.SetAddAsync($"{configuration["db-prefix"]}{REDIS_KEY_SLOT_OBJECTS_M_BY_PLACE_AND_HOUR}_{slot.PlaceId}_{slot.HourSlotId}", $"{slot.PlaceId}_{slot.Time.Ticks}");

                return(true);
            }
            catch (Exception exc)
            {
                logger.LogError(exc, exc.Message);
                return(false);
            }
        }
예제 #2
0
        /// <summary>
        /// Decrement registrations for minute slot
        /// </summary>
        /// <param name="slotM"></param>
        /// <returns></returns>
        public async Task DecrementRegistration5MinSlot(Slot5Min slotM)
        {
            if (slotM is null)
            {
                throw new ArgumentNullException(nameof(slotM));
            }

            var update = await Get5MinSlot(slotM.PlaceId, slotM.Time.Ticks);

            update.Registrations--;
            await SetMinuteSlot(update, false);
        }
예제 #3
0
        /// <summary>
        /// Decrement registrations for minute slot
        /// </summary>
        /// <param name="slotM"></param>
        /// <returns></returns>
        public async Task <long> DecrementRegistration5MinSlot(Slot5Min slotM)
        {
            if (slotM is null)
            {
                throw new ArgumentNullException(nameof(slotM));
            }

            var update = await Get5MinSlot(slotM.PlaceId, slotM.Time.UtcTicks);

            update.Registrations = await DecrementStats(StatsType.Enum.RegisteredTo, SlotType.Enum.Min, slotM.PlaceId, slotM.Time);
            await SetMinuteSlot(update, false);

            return(update.Registrations);
        }
예제 #4
0
        /// <summary>
        /// Deletes single minute slot
        /// </summary>
        /// <param name="slot"></param>
        /// <returns></returns>
        public async override Task <bool> DeleteMinuteSlot(Slot5Min slot)
        {
            if (slot is null)
            {
                throw new ArgumentNullException(nameof(slot));
            }

            string key = $"{slot.PlaceId}_{slot.Time.UtcTicks}";

            if (dataM.ContainsKey(key))
            {
                dataM.TryRemove(key, out var _);
                return(true);
            }
            return(false);
        }
예제 #5
0
        /// <summary>
        /// Set minute slot
        /// </summary>
        /// <param name="slot"></param>
        /// <param name="newOnly"></param>
        /// <returns></returns>
        public override async Task <bool> SetMinuteSlot(Slot5Min slot, bool newOnly)
        {
            if (slot is null)
            {
                throw new ArgumentNullException(nameof(slot));
            }
            string key = $"{slot.PlaceId}_{slot.Time.Ticks}";

            if (newOnly)
            {
                if (dataM.ContainsKey(key))
                {
                    throw new Exception("Item already exists");
                }
            }
            dataM[key] = slot;
            return(true);
        }
예제 #6
0
        /// <summary>
        /// Updates minute slot
        /// </summary>
        /// <param name="slot"></param>
        /// <returns></returns>
        public virtual async Task <bool> DeleteMinuteSlot(Slot5Min slot)
        {
            if (slot is null)
            {
                throw new ArgumentNullException(nameof(slot));
            }

            try
            {
                var ret = await redisCacheClient.Db0.HashDeleteAsync($"{configuration["db-prefix"]}{REDIS_KEY_SLOT_OBJECTS_M}", $"{slot.PlaceId}_{slot.Time.Ticks}");

                return(true);
            }
            catch (Exception exc)
            {
                logger.LogError(exc, exc.Message);
                return(false);
            }
        }
예제 #7
0
 /// <summary>
 /// Create minute slot
 /// </summary>
 /// <param name="slot"></param>
 /// <returns></returns>
 public Task <bool> Add(Slot5Min slot)
 {
     return(SetMinuteSlot(slot, true));
 }