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); }
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))); }
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)); }
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)); }