Exemplo n.º 1
0
 public async Task <NewClanResponseModel> AddNewClan(NewClanRequestModel model)
 {
     return(await _clanService.AddNewClan(model));
 }
        public async Task <NewClanResponseModel> AddNewClan(NewClanRequestModel model)
        {
            var response = new NewClanResponseModel()
            {
                IsSuccess      = true,
                IsNameValid    = true,
                IsAcronymValid = true,
                IsLeaderValid  = true
            };

            #region EF
            if (await CheckName(model.Name))
            {
                response.IsNameValid = false;
            }

            if (await CheckAcronym(model.Acronym))
            {
                response.IsAcronymValid = false;
            }

            if (await CheckLeader(model.PlayerId))
            {
                response.IsLeaderValid = false;
            }

            if (response.IsAcronymValid == false || response.IsNameValid == false || response.IsLeaderValid == false)
            {
                response.IsSuccess = false;
                return(response);
            }

            var newClan = new Clans
            {
                Acronym    = model.Acronym,
                Name       = model.Name,
                Experience = 0,
                AvatarId   = model.AvatarId,
                AvatarUrl  = model.AvatarUrl
            };

            var result = await _context.Clans.AddAsync(newClan);

            if (result.State != EntityState.Added)
            {
                response.IsSuccess = false;
                return(response);
            }

            await _context.SaveChangesAsync();

            var clanEntity = await _context.Clans.FirstOrDefaultAsync(t => t.Acronym == model.Acronym && t.Name == model.Name);

            bool isLeaderValid = false;

            try
            {
                isLeaderValid = await AddClanLeader(model.PlayerId, clanEntity.Id, ClanFunction.Leader);
            }
            catch (Exception e) { Logger.GetInstance().Error(e.Message); }
            finally
            {
                response.IsLeaderValid = isLeaderValid;

                if (!response.IsLeaderValid)
                {
                    _context.Clans.Remove(clanEntity);
                    await _context.SaveChangesAsync();

                    response.IsSuccess = false;
                }
            }

            if (!response.IsLeaderValid)
            {
                return(response);
            }

            var clanStatistics = new ClanStatistics()
            {
                ClanId = clanEntity.Id,
                Draws  = 0,
                Losses = 0,
                Wins   = 0
            };

            var csResult = await _context.ClanStatistics.AddAsync(clanStatistics);

            if (csResult.State != EntityState.Added)
            {
                var leaderEntity = await _context.ClanMembers.FirstOrDefaultAsync(t => t.PlayerId == model.PlayerId);

                _context.ClanMembers.Remove(leaderEntity);
                _context.Clans.Remove(clanEntity);
                response.IsSuccess = false;
            }

            await _context.SaveChangesAsync();

            #endregion
            #region SqlManager
            //var result = await _sqlManager.ExecuteDataCommand("[Common].[AddNewClan]",
            //                                                CommandType.StoredProcedure,
            //                                                null,
            //                                                new SqlParameter[]
            //                                                        {
            //                                                            model.Acronym.ToSqlParameter("Acronym"),
            //                                                            model.Name.ToSqlParameter("Name"),
            //                                                            model.AvatarId.ToSqlParameter("AvatarId"),
            //                                                            model.AvatarUrl.ToSqlParameter("AvatarUrl")
            //                                                        });


            //var resultRows = result.Elements.First().Rows.First().Elements;

            //response.IsNameValid = Convert.ToBoolean(resultRows[0]);
            //response.IsAcronymValid = Convert.ToBoolean(resultRows[1]);

            //var clanId = Convert.ToInt32(resultRows[2]);
            #endregion

            return(response);
        }