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
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
- Graphiql
group :test- RSpec
rspec-rails - Shoulda-Matchers
shoulda-matchers - Simplecov
simplecov
- RSpec
Configuration:
git clone git@github.com:thumbtack-turing/thumbtack_api.gitbundle installrails db:{create,migrate}
Testing:
bundle exec rspec- Manual testing can be done using http://localhost:3000/graqhiql by running
rails sfrom the command line
query {
getUser(email: "eak@example.com") {
name
email
id
baseFolder{
id
name
base
}
}
query {
getFolder (id: 1) {
id
name
base
parentId
childFolders {
id
name
base
parentId
}
childResources {
id
name
url
image
createdAt
}
}
}
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
}
}
}
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
}
}
}
}
mutation {
deleteResource(
id: 1
){
id
name
base
parentId
childResources {
id
name
url
image
createdAt
}
childFolders {
id
name
base
parentId
}
}
}
mutation {
createUser(
name: "Odell",
email: "odellthedog@test.com"
) {
name
email
baseFolder {
id
name
}
}
}
mutation {
deleteUser(
id: 2
) {
id
name
email
}
}
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 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
}
}
mutation {
deleteFolder (
id: 8
) {
id
name
base
parentId
}
}
- Rowan DeLong - rowanwinzer@gmail.com - LinkedIn
- Erika Kischuk - erika.kischuk@gmail.com - LinkedIn
- Jamie Pace - jamiejpace@gmail.com - LinkedIn
