use crate::msg::{AddressResponse, ConfigResponse, PortidResponse, SignatureResponse};
use crate::state::{PassportContract, PassportMetadata, ACTIVE, CONFIG, NICKNAMES, PORTID};
use cosmwasm_std::{Deps, StdResult};
use cw721_base::state::TokenInfo;

pub fn query_config(deps: Deps) -> StdResult<ConfigResponse> {
    let cfg = CONFIG.load(deps.storage)?;
    Ok(ConfigResponse {
        owner: cfg.owner.into(),
        name_subgraph: cfg.name_subgraph.into(),
        avatar_subgraph: cfg.avatar_subgraph.into(),
        proof_subgraph: cfg.proof_subgraph.into(),
    })
}

pub fn query_metadata_by_nickname(deps: Deps, nickname: String) -> StdResult<PassportMetadata> {
    let address_portid = NICKNAMES.load(deps.storage, &nickname)?;
    let cw721_contract = PassportContract::default();
    let token_info = cw721_contract
        .tokens
        .load(deps.storage, address_portid.portid.as_str())?;
    Ok(token_info.extension)
}

pub fn query_portid_by_nickname(deps: Deps, nickname: String) -> StdResult<PortidResponse> {
    let address_portid = NICKNAMES.load(deps.storage, &nickname)?;
    let portid = address_portid
        .portid
        .parse::<u64>()
        .map_err(|_| cosmwasm_std::StdError::generic_err("invalid portid format"))?;
    Ok(PortidResponse { portid })
}

pub fn query_passport_by_nickname(
    deps: Deps,
    nickname: String,
) -> StdResult<TokenInfo<PassportMetadata>> {
    let address_portid = NICKNAMES.load(deps.storage, &nickname)?;
    let cw721_contract = PassportContract::default();
    let token_info = cw721_contract
        .tokens
        .load(deps.storage, address_portid.portid.as_str())?;
    Ok(token_info)
}

pub fn query_address_by_nickname(deps: Deps, nickname: String) -> StdResult<AddressResponse> {
    let address_portid = NICKNAMES.load(deps.storage, &nickname)?;
    Ok(AddressResponse {
        address: address_portid.address.into(),
    })
}

pub fn query_last_portid(deps: Deps) -> StdResult<PortidResponse> {
    let portid = PORTID.load(deps.storage)?;
    Ok(PortidResponse {
        portid: portid.into(),
    })
}

pub fn query_active_passport(
    deps: Deps,
    address: String,
) -> StdResult<TokenInfo<PassportMetadata>> {
    let active = ACTIVE.load(deps.storage, &deps.api.addr_validate(&address)?)?;
    let cw721_contract = PassportContract::default();
    let token_info = cw721_contract.tokens.load(deps.storage, &active)?;
    Ok(token_info)
}

pub fn query_passport_signed(
    deps: Deps,
    nickname: String,
    address: String,
) -> StdResult<SignatureResponse> {
    let address_portid = NICKNAMES.load(deps.storage, &nickname)?;
    let cw721_contract = PassportContract::default();
    let token_info = cw721_contract
        .tokens
        .load(deps.storage, address_portid.portid.as_str())?;
    let result = token_info
        .extension
        .addresses
        .as_ref()
        .map_or(false, |addrs| addrs.iter().any(|i| i.address == address));
    Ok(SignatureResponse { signed: result })
}

Dimensions

cw-cyber/contracts/hub-channels/src/query.rs
cw-cyber/packages/cyber-std/src/query.rs
cw-cyber/contracts/hub-tokens/src/query.rs
cw-cyber/packages/hub-base/src/query.rs
cw-cyber/contracts/hub-skills/src/query.rs
cw-cyber/contracts/hub-networks/src/query.rs
cw-cyber/contracts/cw-cyber-subgraph/src/query.rs
cw-cyber/contracts/graph-filter/src/query.rs
cw-cyber/contracts/hub-libs/src/query.rs
cw-cyber/contracts/hub-protocols/src/query.rs
cw-cyber/contracts/cw-cyber-gift/src/query.rs
cw-cyber/packages/cyber-std/src/tokenfactory/query.rs

Local Graph