Using Scalars on Hypi's low code platform

In this tutorial, we will explore more about using Scalars on Hypi’s low code platform.

So, here is the first question: What are scalars?

Scalar types represent primitive leaf values in a GraphQL type system. GraphQL responses take the form of a hierarchical tree. The leaves of this tree are typically GraphQL Scalar types. (May also be Enum types or null values). The Scalar fields don’t have any sub-fields – they are the leaves of the query.

The second question is, How to use Scalars in a schema design?

We are building a Social Media Platform, and we want to determine the fields of a Post object. Here is our sample Schema.

type Post {
   postedby: Account @computed(query: "hypi.id = '${self.hypi.createdBy}'")
   date: DateTime
   text: String
   likecount: Int @computedCount(field: "likedby") 
   likedby: [Account!]
   comments: [Post!]
   rating: Float
   share: Json
   postuuid: UUID
   gppost: Boolean
   tagFriends: [String]
 }

The above Post object has used certain built-in scalar types from GraphQL like String, Int, Float, Boolean, etc. It supports custom scalar types like DateTime, UUID, JSON as well.

One to Many Scalars

Third question is, “Can we store multiple values in a Scalar field?”

Multiple values can be stored in a Scalar Array. In the Post data type, tagFriends represent String Array. In Hypi, tagFriends: [String] is a one-to-many relationship but with scalars. Note that Scalar Array cannot contain duplicates. If you add the same item multiple times, it’ll just be stored/return once.

Scalar Specifications

Fourth question is, “How to use Scalars to store data?

Here is a quick look into the specifications of Scalars.

Int: signed 32 bit numeric non-fractional value

Float: signed double-precision finite floating-point value

String: UTF-8 character sequence

Boolean: true or false

ID: unique identifier

UUID (universally unique identifier): a scalar serialized as a string conforming to RFC 4122.

JSON (JavaScript Object Notation): lightweight format for storing and transporting data.

DateTime: valid ISO 8601 date time value

Any: any possible value without any specific format. (Use this only when the data value doesn’t belong to any of the above types)

You may further check out these scalar types here.

Let’s check how to insert data into these scalar fields.

mutation {
   upsert(
     values: {
       Post: [
          {
           hypi:{
             id: "01F52TZ03J426MHJYKYRB9Q8PT"
           }
           date: "2021-05-07"
           text: "The future is low code!",
           rating: 4.6,
           postuuid: "bfcf282c-b7a4-11eb-8529-0242ac130003",
           gppost: false,
           share:{
             gpname: "scalars",
             url: "[email protected]"
           },
           tagFriends: ["GraphQL","Groovy","Velocity","GraphQL"]
         }
       ]
     }
   ) {
     id
   }
 }

 #Result

 {
   "data": {
     "upsert": [
       {
         "id": "01F52TZ03J426MHJYKYRB9Q8PT"
       }
     ]
   }
 }

String, ID, DateTime, UUID values have to be specified in double-quotes. Array values are specified in square brackets separated by commas.

You may retrieve the inserted data like this.

{
   get(type: Post, id: "01F52TZ03J426MHJYKYRB9Q8PT") {
     ... on Post {
       hypi {
         id
         created
       }
       text
       likecount
       rating
       postuuid
       gppost
       share
       tagFriends
     }
   }
 }
 #Result
 {
   "data": {
     "get": {
       "hypi": {
         "id": "01F52TZ03J426MHJYKYRB9Q8PT",
         "created": "2021-05-07T07:16:40Z"
       },
       "text": "The future is low code!",
       "likecount": 2,
       "rating": 4.6,
       "postuuid": "bfcf282c-b7a4-11eb-8529-0242ac130003",
       "gppost": false,
       "share": {
         "gpname": "scalars",
         "url": "[email protected]"
       },
       "tagFriends": [
         "Groovy",
         "GraphQL",
         "Velocity"
       ]
     }
   }
 }

Delete Scalars

Fifth and last question is, “How do we delete values in Scalar Array?

deleteScalars function is used to delete items in a Scalar Array. Scalar Array fields in Hypi are not stored directly with the other scalar fields in an object. You may add a large number of items to a Scalar Array field.

Let’s use deleteScalars to delete items from tagFriends Scalar Array from the Post type. The function returns the number of records affected by the deletion. “Groovy”, “GraphQL” values are deleted. Frame arcql query to select the Post object and get an id.

mutation{
   deleteScalars(
     type: Post,
     field:"tagFriends",
     values:["Groovy","GraphQL"],
     arcql:"hypi.id ='01F52TZ03J426MHJYKYRB9Q8PT'"
   )
 }
#Result
 {
   "data": {
     "deleteScalars": 1
   }
 }

Concluding Note

Now you may use the Scalars on Hypi’s low code platform to make objects with various fields and insert/retrieve the scalars from the mutation/query.

Specify as many Scalar fields as needed to meet the functional requirements of your App. Use them with ease on Hypi’s low code platform!