Skip to content

thumbtack-turing/thumbtack_api

Repository files navigation

Thumbtack API

thumbtack-turing

Thumbtack API allows a user to store internet resources within a folder structure of their own making. A user can add resources to their base folder, or they can create folders within their base folder to store resources by category/topic.

This application is deployed on Heroku and utilizes a single endpoint for all queries and mutations:

  • post thumbtack-api.herokuapp.com/graphql

Local Setup

Ruby version:

  • ruby '2.7.2'
  • 'rails', '~> 6.1.4', '>= 6.1.4.1'

System dependencies:

  • PostgresQL 'pg', '~> 1.1'
  • GraphQL 'graphql'
  • MetaInspector metainspector
  • Rack CORS rack-cors
  • group :development
    • Graphiql graphiql-rails
  • group :test

Configuration:

  • git clone git@github.com:thumbtack-turing/thumbtack_api.git
  • bundle install
  • rails db:{create,migrate}

Testing:

Database Schema

Schema

Queries:

Get User

query {
      getUser(email: "eak@example.com") {
        name
        email
        id
        baseFolder{
              id
              name
              base
      }
  }

Get Folder

query {
      getFolder (id: 1) {
        id
        name
        base
        parentId
        childFolders {
            id
            name
            base
            parentId
        }
        childResources {
            id
            name
            url
            image
            createdAt
        }
      }
    }

Mutations:

Create Resource

mutation {
  createResource(
    name: "I am a resource",
    url: "https://stackoverflow.com",
    folderId: 1) {
    id
    name
    base
    parentId
    childResources {
      id
      name
      url
      image
      createdAt
    }
    childFolders {
      id
      name
      base
      parentId
    }
  }
}

Update Resource

requires resource id, folderId, and one or both of: newFolderId (new folder destination) or name (new name of resource)

mutation {
  updateResource (id: 1, folderId: 2, newFolderId: 3, name: "New name") {
      updatedResource {
        id
        name
        url
        image
        folderId
        folder {
          id
          name
          base
          parentId
          childFolders {
            id
            name
            base
            parentId
          }
          childResources {
            id
            name
            url
            image
            createdAt
          }
        }
      }
      originalParent {
        id
        name
        base
        parentId
        childFolders {
          id
          name
          base
          parentId
        }
        childResources {
          id
          name
          url
          image
          createdAt
        }
      }
    }
  }

Delete Resource

mutation {
      deleteResource(
          id: 1
      ){
        id
        name
        base
        parentId
        childResources {
            id
            name
            url
            image
            createdAt
        }
        childFolders {
            id
            name
            base
            parentId
        }
      }
}

Create User

mutation {
    createUser(
      name: "Odell",
      email: "odellthedog@test.com"
    ) {
        name
        email
        baseFolder {
          id
          name
        }
      }
  }

Delete User

mutation {
    deleteUser(
     id: 2
    ) {
        id
        name
        email
      }
  }

Create Folder

 mutation {
      createFolder(
          userId: 1
          parentId: 1
          name: "Shallan"
        )
      {
        parentFolder {
          id
          name
          base
          parentId
          childFolders {
            id
            name
            base
            parentId
          }
          childResources {
            id
            name
            url
            image
            createdAt
          }
        }
        newFolder {
          id
          name
          base
          parentId
          childFolders {
            name
          }
        }
      }
    }

Update Folder

Update folder name

 mutation {
      folders: updateFolder (
        id: 2
        name: "Husband")
        {
        updatedFolder {
          id
          name
          base
          parentId
        }
        originalParent {
          id
          name
          base
          childFolders {
            id
            name
            base
            parentId
          }
          childResources{
            id
            name
            url
            image
            createdAt
          }
        }
      }
    }

Update parent folder

 mutation {
      folders: updateFolder (
        id: 2
        newParentId: 5
        name: "Honor is dead.")
        {
        updatedFolder {
          id
          name
          base
          parentId
        }
        originalParent {
          id
          name
          base
          childFolders {
            id
            name
            base
            parentId
          }
        }
        errors
      }
    }

Delete Folder

 mutation {
      deleteFolder (
      id: 8
    ) {
        id
        name
        base
        parentId
      }
    }

Contributors

About

No description, website, or topics provided.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors 3

  •  
  •  
  •  

Languages