Beispiel #1
0
        public bool Edit(ClanCreateView clanUpdateView, out string message, out HttpStatusCode code)
        {
            message = ErrorCode.CONNECTION_FAILED;

            Api().CreateAuthenticated($"api/clan/current", "post")
            .WithBody(clanUpdateView)
            .Execute(out HttpWebResponse response);

            if (response.TryGetStatusCode(out code) && code == HttpStatusCode.OK)
            {
                ValidatedView validatedView = response.GetReponseString()
                                              .DeserializeJsonSafe <ValidatedView>();
                if (validatedView == null)
                {
                    message = ErrorCode.ERROR_WHILE_READING_RESULT;
                }
                else
                {
                    message = validatedView.Message;
                    return(validatedView.IsValid);
                }
            }

            return(false);
        }
Beispiel #2
0
 public async Task <IActionResult> Post([FromBody] ClanCreateView clanCreateView)
 {
     if (HttpContext.TryGetCurrentSession(out AccountSessionView accountSessionView))
     {
         return(Ok(await ClanService.CreateClan(accountSessionView.AccountID, clanCreateView)));
     }
     return(Ok(ValidatedView.Invalid(ErrorCode.OPERATION_FAILED)));
 }
Beispiel #3
0
        public static async Task <ValidatedView> CreateClan(int accountId, ClanCreateView clanCreateView)
        {
            if (!clanCreateView.IsValid(out string message))
            {
                return(ValidatedView.Invalid(message));
            }

            try {
                if (await Model <ClanMemberModel> .AsQueryable().Any(x => x.AccountID == accountId))
                {
                    GameContext.Logger.LogCritical($"Player [id: '{accountId}'] tries creating a clan while being member of another!");
                    return(ValidatedView.Invalid(ErrorCode.CLAN_ALREADY_MEMBER));
                }

                if (await Model <ClanModel> .AsQueryable().Any(x => x.Name == clanCreateView.Name))
                {
                    return(ValidatedView.Invalid(ErrorCode.CLAN_NAME_ALREADY_IN_USE));
                }

                if (await Model <ClanModel> .AsQueryable().Any(x => x.Tag == clanCreateView.Tag))
                {
                    return(ValidatedView.Invalid(ErrorCode.CLAN_TAG_ALREADY_IN_USE));
                }

                ClanModel clanModel = Mapper <ClanCreateView> .Map <ClanModel>(clanCreateView);

                ClanMemberModel clanMemberModel = new ClanMemberModel {
                    ClanID = clanModel.ID, AccountID = accountId, Role = ClanRole.LEADER
                };

                await Model <ClanMemberPendingModel> .AsCollection().DeleteManyAsync(x => x.AccountID == accountId);

                await Model <ClanModel> .AsCollection().InsertOneAsync(clanModel);

                await Model <ClanMemberModel> .AsCollection().InsertOneAsync(clanMemberModel);

                if (GameManager.Get(accountId, out PlayerController controller))
                {
                    controller.Account.Clan = Mapper <ClanModel> .Map <ClanOverview>(clanModel);

                    ClanChangedCommand clanChangedCommand = PacketBuilder.ClanChangedCommand(controller);
                    controller.Send(clanChangedCommand);
                    controller.EntitesInRange(x => x.Send(clanChangedCommand));
                }

                return(ValidatedView.Valid());
            } catch (Exception e) {
                GameContext.Logger.LogError(e);
            }
            return(ValidatedView.Invalid(ErrorCode.OPERATION_FAILED));
        }
Beispiel #4
0
        public static async Task <ValidatedView> Edit(int accountId, ClanCreateView clanUpdateView)
        {
            if (!clanUpdateView.IsValid(out string message))
            {
                return(ValidatedView.Invalid(message));
            }

            try {
                ClanMemberModel clanMemberModel = await Model <ClanMemberModel>
                                                  .AsQueryable().FirstOrDefault(x => x.AccountID == accountId);

                if (clanMemberModel != null)
                {
                    ClanModel clanModel = await Model <ClanModel> .AsQueryable()
                                          .FirstOrDefault(x => x.ID == clanMemberModel.ClanID);

                    if (clanModel == null)
                    {
                        return(ValidatedView.Invalid(ErrorCode.CLAN_NOT_FOUND));
                    }
                    else
                    {
                        if (clanMemberModel.Role < ClanRole.LEADER)
                        {
                            return(ValidatedView.Invalid(ErrorCode.CLAN_MANAGE_INSUFFICIENT_RIGHTS));
                        }

                        if (clanModel.Name == clanUpdateView.Name &&
                            clanModel.Tag == clanUpdateView.Tag &&
                            clanModel.Description == clanUpdateView.Description)
                        {
                            return(ValidatedView.Valid());
                        }

                        if (clanModel.Name != clanUpdateView.Name &&
                            await Model <ClanModel> .AsQueryable().Any(x => x.Name == clanUpdateView.Name))
                        {
                            return(ValidatedView.Invalid(ErrorCode.CLAN_NAME_ALREADY_IN_USE));
                        }

                        bool clanTagChanged = clanModel.Tag != clanUpdateView.Tag;
                        if (clanTagChanged &&
                            await Model <ClanModel> .AsQueryable().Any(x => x.Tag == clanUpdateView.Tag))
                        {
                            return(ValidatedView.Invalid(ErrorCode.CLAN_TAG_ALREADY_IN_USE));
                        }

                        clanModel = Mapper <ClanCreateView> .Map(clanUpdateView, clanModel);

                        await Model <ClanModel> .AsCollection()
                        .ReplaceOneAsync(x => x.ID == clanModel.ID, clanModel);

                        foreach (ClanMemberModel member in await Model <ClanMemberModel> .AsQueryable()
                                 .Where(x => x.ClanID == clanModel.ID).ToList())
                        {
                            if (GameManager.Get(member.AccountID, out PlayerController controller))
                            {
                                controller.Account.Clan = Mapper <ClanModel> .Map <ClanOverview>(clanModel);

                                ClanChangedCommand clanChangedCommand = PacketBuilder.ClanChangedCommand(controller);
                                controller.Send(clanChangedCommand);
                                controller.EntitesInRange(x => x.Send(clanChangedCommand));
                            }
                        }

                        return(ValidatedView.Valid());
                    }
                }
                else
                {
                    return(ValidatedView.Invalid(ErrorCode.CLAN_NOT_MEMBER));
                }
            } catch (Exception e) {
                GameContext.Logger.LogError(e);
            }
            return(ValidatedView.Invalid(ErrorCode.OPERATION_FAILED));
        }