예제 #1
0
        /// <summary>
        /// Saves a room object.
        /// </summary>
        /// <param name="room">
        /// Room object to save.
        /// </param>
        /// <returns>
        /// Id of room saved.
        /// </returns>
        /// Saves only room data.
        public async Task <int> Save(RoomModel room)
        {
            //save operation is perforemd in transaction
            _gameDataAccess.StartTransaction();

            var model = new Room
            {
                Level    = room.Level,
                RoomID   = room.Id,
                Seen     = room.Seen ? 1 : 0,
                RoomType = room.Type,
                TTL      = room.TTL
            };

            //saves type of effect of enchantement available to buy in room
            if (room.ShopEvent?.BuyableEnchantement != null)
            {
                model.EffectType = room.ShopEvent.BuyableEnchantement.Type;
            }

            //check if room already exists
            var exists = await _gameDataAccess.Get(model);

            if (exists == null)
            {
                //if not add it and fetch it's id
                int id = await _gameDataAccess.Add(model);

                _gameDataAccess.Save();
                return(id);
            }
            else
            {
                await _gameDataAccess.Update(model);

                _gameDataAccess.Save();
                return(model.RoomID.Value);
            }
        }