Skip to content

Commit

Permalink
add to graphq
Browse files Browse the repository at this point in the history
  • Loading branch information
Larkooo committed Feb 5, 2025
1 parent 65d1c41 commit 3acb8a9
Show file tree
Hide file tree
Showing 4 changed files with 61 additions and 0 deletions.
4 changes: 4 additions & 0 deletions crates/torii/graphql/src/constants.rs
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,7 @@ pub const EVENT_MESSAGE_TABLE: &str = "event_messages";
pub const MODEL_TABLE: &str = "models";
pub const TRANSACTION_TABLE: &str = "transactions";
pub const METADATA_TABLE: &str = "metadata";
pub const CONTROLLER_TABLE: &str = "controllers";

pub const ID_COLUMN: &str = "id";
pub const EVENT_ID_COLUMN: &str = "event_id";
Expand Down Expand Up @@ -64,3 +65,6 @@ pub const TOKEN_TRANSFER_NAME: (&str, &str) = ("", "tokenTransfers");
pub const ORDER_DIR_TYPE_NAME: &str = "OrderDirection";
pub const ORDER_ASC: &str = "ASC";
pub const ORDER_DESC: &str = "DESC";

pub const CONTROLLER_TYPE_NAME: &str = "World__Controller";
pub const CONTROLLER_NAMES: (&str, &str) = ("controller", "controllers");
9 changes: 9 additions & 0 deletions crates/torii/graphql/src/mapping.rs
Original file line number Diff line number Diff line change
Expand Up @@ -177,4 +177,13 @@ lazy_static! {
(Name::new("imagePath"), TypeData::Simple(TypeRef::named_nn(TypeRef::STRING))),
]);

pub static ref CONTROLLER_MAPPING: TypeMapping = IndexMap::from([
(Name::new("id"), TypeData::Simple(TypeRef::named(TypeRef::ID))),
(Name::new("username"), TypeData::Simple(TypeRef::named_nn(TypeRef::STRING))),
(Name::new("address"), TypeData::Simple(TypeRef::named_nn(TypeRef::STRING))),
(
Name::new("deployedAt"),
TypeData::Simple(TypeRef::named_nn(GraphqlType::DateTime.to_string())),
),
]);
}
47 changes: 47 additions & 0 deletions crates/torii/graphql/src/object/controller.rs
Original file line number Diff line number Diff line change
@@ -0,0 +1,47 @@
use async_graphql::dynamic::Field;

use super::{BasicObject, ResolvableObject, TypeMapping};
use crate::constants::{
CONTROLLER_NAMES, CONTROLLER_TABLE, CONTROLLER_TYPE_NAME, ID_COLUMN,
};
use crate::mapping::CONTROLLER_MAPPING;
use crate::object::{resolve_many, resolve_one};

#[derive(Debug)]
pub struct ControllerObject;

impl BasicObject for ControllerObject {
fn name(&self) -> (&str, &str) {
CONTROLLER_NAMES
}

fn type_name(&self) -> &str {
CONTROLLER_TYPE_NAME
}

fn type_mapping(&self) -> &TypeMapping {
&CONTROLLER_MAPPING
}
}

impl ResolvableObject for ControllerObject {
fn resolvers(&self) -> Vec<Field> {
let resolve_one = resolve_one(
CONTROLLER_TABLE,
ID_COLUMN,
self.name().0,
self.type_name(),
self.type_mapping(),
);

let resolve_many = resolve_many(
CONTROLLER_TABLE,
ID_COLUMN,
self.name().1,
self.type_name(),
self.type_mapping(),
);

vec![resolve_one, resolve_many]
}
}
1 change: 1 addition & 0 deletions crates/torii/graphql/src/object/mod.rs
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,7 @@ pub mod metadata;
pub mod model;
pub mod model_data;
pub mod transaction;
pub mod controller;

use async_graphql::dynamic::{
Enum, Field, FieldFuture, FieldValue, InputObject, InputValue, Object, SubscriptionField,
Expand Down

0 comments on commit 3acb8a9

Please sign in to comment.