public static async Task <ValidatedView> AcceptDiplomacy(int accountId, int targetId) { 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.DIPLOMAT) { return(ValidatedView.Invalid(ErrorCode.CLAN_MANAGE_DIPLOMACIES_INSUFFICIENT_RIGHTS)); } if (await Model <ClanRelationModel> .AsQueryable() .Any(x => (x.InitiatorID == clanModel.ID || x.InitiatorID == targetId) && (x.TargetID == clanModel.ID || x.TargetID == targetId))) { return(ValidatedView.Invalid(ErrorCode.CLAN_RELATION_ALREADY_EXISTS)); } ClanRelationPendingModel clanRelationPendingModel = await Model <ClanRelationPendingModel> .AsQueryable() .FirstOrDefault(x => (x.InitiatorID == clanModel.ID || x.InitiatorID == targetId) && (x.TargetID == clanModel.ID || x.TargetID == targetId)); if (clanRelationPendingModel == null) { return(ValidatedView.Invalid(ErrorCode.CLAN_PENDING_RELATION_NOT_FOUND)); } await Model <ClanRelationPendingModel> .AsCollection() .DeleteManyAsync(x => (x.InitiatorID == clanModel.ID || x.InitiatorID == targetId) && (x.TargetID == clanModel.ID || x.TargetID == targetId)); if (clanRelationPendingModel.Type == ClanRelationType.WAR) { } else { } return(ValidatedView.Valid()); } } else { return(ValidatedView.Invalid(ErrorCode.CLAN_NOT_MEMBER)); } } catch (Exception e) { GameContext.Logger.LogError(e); } return(ValidatedView.Invalid(ErrorCode.OPERATION_FAILED)); }
public static async Task <ValidatedView> CreateDiplomacy(int accountId, ClanDiplomacyCreateView clanDiplomacyCreateView) { if (!clanDiplomacyCreateView.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.DIPLOMAT) { return(ValidatedView.Invalid(ErrorCode.CLAN_MANAGE_DIPLOMACIES_INSUFFICIENT_RIGHTS)); } if (await Model <ClanRelationModel> .AsQueryable() .Any(x => (x.InitiatorID == clanModel.ID || x.InitiatorID == clanDiplomacyCreateView.TargetID) && (x.TargetID == clanModel.ID || x.TargetID == clanDiplomacyCreateView.TargetID))) { return(ValidatedView.Invalid(ErrorCode.CLAN_RELATION_ALREADY_EXISTS)); } await Model <ClanRelationPendingModel> .AsCollection() .DeleteManyAsync(x => (x.InitiatorID == clanModel.ID || x.InitiatorID == clanDiplomacyCreateView.TargetID) && (x.TargetID == clanModel.ID || x.TargetID == clanDiplomacyCreateView.TargetID)); if (clanDiplomacyCreateView.Type == ClanRelationType.WAR) // sofortige Wirkung { ClanRelationModel clanRelationModel = Mapper <ClanDiplomacyCreateView> .Map <ClanRelationModel>(clanDiplomacyCreateView); clanRelationModel.InitiatorID = clanModel.ID; await Model <ClanRelationModel> .AsCollection() .InsertOneAsync(clanRelationModel); } else { ClanRelationPendingModel clanRelationPendingModel = Mapper <ClanDiplomacyCreateView> .Map <ClanRelationPendingModel>(clanDiplomacyCreateView); clanRelationPendingModel.InitiatorID = clanModel.ID; await Model <ClanRelationPendingModel> .AsCollection() .InsertOneAsync(clanRelationPendingModel); } return(ValidatedView.Valid()); } } else { return(ValidatedView.Invalid(ErrorCode.CLAN_NOT_MEMBER)); } } catch (Exception e) { GameContext.Logger.LogError(e); } return(ValidatedView.Invalid(ErrorCode.OPERATION_FAILED)); }