End-To-End Type Safety with React, GraphQL & Prisma

Rate this content
Bookmark

In this workshop, you will get a first-hand look at what end-to-end type safety is and why it is important. To accomplish this, you’ll be building a GraphQL API using modern, relevant tools which will be consumed by a React client.


Prerequisites: 

- Node.js installed on your machine (12.2.X / 14.X)

- It is recommended (but not required) to use VS Code for the practical tasks

- An IDE installed (VSCode recommended)

- (Good to have)*A basic understanding of Node.js, React, and TypeScript

This workshop has been presented at React Advanced Conference 2022, check out the latest edition of this React Conference.

FAQ

GraphQL Codegen is a tool that analyzes GraphQL queries and generates corresponding TypeScript types and query objects. It ensures type safety by validating queries against the GraphQL schema, ensuring that the queries are correct and the expected data types are returned. This bridges the gap between frontend and backend, ensuring consistency and reducing errors.

To configure GraphQL Codegen, create a 'codegen.yml' file in your project's root directory. Specify the GraphQL API's schema URL, the directory of GraphQL documents, and the output location for generated files. Include plugins like 'typescript' and 'typescript-operations' to generate TypeScript definitions and operations.

The workshop utilizes Prisma for database management, GraphQL for API queries, and GraphQL Codegen to generate TypeScript types from GraphQL queries. Together, these tools ensure that types are consistent across the database, server, and client, enhancing reliability and developer experience.

The useQuery hook from URQL is used to execute GraphQL queries in a React application. It requires a GraphQL query and returns an object with properties like 'data' and 'error' to manage the query's results and state. It leverages the React context provided by the URQL Provider to access the GraphQL client configuration.

Prisma provides a powerful ORM for handling database operations with support for strong typing and model relations. It simplifies data access and manipulation, integrates seamlessly with GraphQL, and automatically handles migrations. Prisma enhances developer productivity and application reliability by ensuring type safety and simplifying database workflows.

The workshop materials, including the Notion document and relevant code, are openly available for reuse. You can use these resources to host your own workshop, teach others, or integrate the knowledge into your projects. The materials are designed to be accessible and adaptable for various educational and development purposes.

Sabin Adams
Sabin Adams
95 min
12 Oct, 2022

Comments

Sign in or register to post your comment.

Video Summary and Transcription

This Workshop is about building a full-stack application with end-to-end type safety. It covers setting up a SQLite database, creating a GraphQL server, and connecting the client. The focus is on using Prisma, Pathos, and GraphQL Codegen to ensure type safety and improve the developer experience. The Workshop provides step-by-step instructions and resources for participants to follow along and ask questions. It emphasizes the importance of type safety in both the backend and frontend development process.

1. Full-Stack Application Workshop Introduction

Short description:

Thank you for joining me for this full-stack application workshop. We'll be building an application with end-to-end type safety. I'll provide you with all the information and resources you need. Make sure you have Node.js installed and consider using VS Code as your IDE. Basic knowledge of Node.js, React, and TypeScript is recommended. Today's agenda includes building a SQLite database, setting up a GraphQL server, and connecting the client. There will be a repository available. Let's get started!

♪ Thank you guys for joining me here. I see that there's a couple participants and people are still filtering in. So that's super cool to see. I'm glad you could all join me this morning. It's morning here. I'm in California. But I know this is a remote global conference, so you never know where people are from. So good morning, good afternoon, good night to everybody. I hope you're ready to jump into some coding.

We're going to be looking at a full-stack application, and we're going to be building, basically, an application that has full end-to-end type safety, and we're going to do it from the ground up and just sort of talk about all the different pieces that you need to worry about and that you need to think about when you're implementing end-to-end type safety, and we're going to look at how a couple of these tools make it pretty easy for us to do and make it actually quite a joy to do. Once you set up an application like this, if you're anything like me, you're going to end up nerding out about it afterwards and just have a whole lot of fun setting all of this stuff up.

I see there's a question already, what's the link to the Discord server? The one on the email doesn't work. Let me see if I can get you a link there as more people are filtering in. Let's see. Not like people. There is the link there. I've posted it. So if anyone else needs the Discord link, I have posted it in the answered questions, so it should be there. But, OK, moving on a little bit more on the agenda for today, I'm going to post a link in the chat, and this is just going to be a link to a Notion document. And what this is going to be is sort of the source of truth for this whole workshop that we've got going here. And this is going to be where we have all the information about what we're going to be doing. And I've actually split up this workshop into different lessons, so we'll take them one at a time. We'll start off with this databases section and we'll slowly move on to the bottom. But just some information about this, about the workshop. Here's the resources up here. This is the link just to this notion doc that I just posted. If you have any issues opening it, please let me know in the chat or in the questions and I can help you out with that. And this is going to be the GitHub repository that we're going to be working with. So we can, if you pop that open, just be able to get that ready once we get going. You can't see my screen. That's probably an issue. Let's see. How's that? Is that better? I see chats disabled for some people, let's see. Here's the link to that Notion documentation and themes for how you can get around your GitHub repository. Here's the link to that Notion document in the public channel. Cool, great. I see that people are chatting on the Discord about the screen. So, that's perfect. You can all see me now. Yeah, I'll send the link there. We could just default to the Discord chat if that other chat isn't working. There you go. Sweet. Looks like people are thumbs upping that, so the link's working. So, I'll just continue to talk through this first page as people get that open and get going.

There are some prerequisites to this. The prerequisites are just that you need to have Node.js installed on your machine. Everything that we're going to be doing is going to use Node. So, we'll just want to make sure we have that installed. And I'll give you time to install that if you don't have it already as we move forward. And then, it is recommended that you use VS Code for this. There are a couple plugins that just make life a little bit easier with working with Prisma, specifically. So, VS Code is sort of my suggested IDE. But if you have another one that you like to use, that you prefer, feel free to go ahead and use that. And then, just the basic understanding of Node.js, React, and TypeScript is good to have. It's not necessary, because I will be walking you through everything, but it would be good to know at least a little bit and have some experience with Node.js, React, and TypeScript.

And then, moving on through this What Will You Do section, if you want to read through this in more detail, feel free to take a minute just to read it. But essentially, this just goes over sort of the agenda we have for today. This goes over all of the different pieces of the workshop that we're going to do, so it sort of breaks it down into little descriptions. So for example, we're going to be starting off by building out our SQLite database. And then we're going to be setting up GraphQL Yoga, which is a GraphQL server, and then building out that server, and then finally building out the client and connecting all of those different pieces. I see more hands being raised, so let me see what's going on here. So I see a question, will there be a repo after? Yes, there will be a repo. And then it looks like chat's disabled for people. Yeah, so we'll just default to the Discord chat. Where's the link exactly? Okay. So for everybody looking for the link, I'm going to go into the chat again. Or actually, I think the... Let's see. Let's see.

2. Workshop Introduction and First Lesson

Short description:

We'll get everybody in the Discord chat. We'll set up Prisma and the GraphQL server. We'll build the React client and bridge the type gap between the backend and the front-end. I'll walk you through the different lessons and provide tips and tricks. After each lesson, you'll have time to work on your own and ask questions via chat. I'm Steven Adams, a Developer Advocate at Prisma. Feel free to contact me in any of the provided formats. You can also host this workshop yourself using the provided link. Let's jump into the first lesson, where we'll set up the database using Prisma to manage the schema and interact with it in a type safe manner.

We'll get everybody in the Discord chat. I posted a link to the Discord in our chat. Join that and then go to the RADV workshops channel, and then if you go into the channel for this workshop, you should see the link to The Notion. You'll see the link to The Notion. I'll give just a couple minutes for people to get into there. I clicked the link. It looks like it's working there, that's good. Okay, cool.

So then down here to the actual timeline agenda. So we are just gonna be kicking this off like we're doing right now. And then we're going to be setting up Prisma. We're gonna set up the GraphQL server after that. We're gonna actually build out the GraphQL resolvers and all the different pieces there. And then we're going to build the React client and sort of bridge the type gap between the backend and the front-end. And then I am gonna be splitting up these lessons into two different parts. There's gonna be the first part where I'm just going to walk you through everything here. So I'll be walking you through the different lessons. I'll walk through each little step that we're gonna do, and I'll try to explain the process as we go. And for this part, I encourage you not to code along with me. I encourage you to just sort of listen and sort of take in the information I'm giving you as I will have some little tips and tricks in there as I go. And then afterwards, I'll provide you about 20 minutes after each little lesson to work through all the pieces on your own and then get some feedback from me via the chat if you have any questions. So that's gonna be the time where I encourage you to do your coding then. That way you get the information and you get some time to code afterwards. It's sort of a win-win situation.

And then before I get started, just a little bit about me. My name is Steven Adams. I'm a Developer Advocate at Prisma. And I've spent the last roughly eight years working as a Full-Stack Developer. And I've just recently sort of jumped into Developer Advocacy. And it's been awesome because I get to do cool workshops like this and get to hang out with people like you every day and just teach you how to code and do different random coding things. And it's been great. I'm loving it. And I'm super excited to be giving this workshop. I have all of my contact information here. So if you wanna message me about anything, after this conference or just after maybe an individual section and you need to reach out to me, feel free to reach out to me in any of these formats here and I will try to respond as soon as possible. And then lastly, if you wanna host this workshop yourself, this document, I've provided the link that way everyone can just sort of have access to it. This is something that I'll just be keeping up. And if you ever wanna just steal this and give this workshop, maybe at a local meetup or if you are just interested in maybe getting into some speaking and you wanna use what you learned today to sort of teach your friends, feel free to steal this workshop from me. I definitely believe that all of these resources should be open and available for everybody. So this isn't mine explicitly, this is for everybody to use if you would like, so please feel free to do so. So with that, all out of the way, I think we'll go ahead and jump into the first lesson. But before we do, I'm just gonna double-check some chats and make sure everything is looking good here. So I see a question from Ben about joining the Discord. In case you haven't already, I posted a link in the live chat. So that should be good. A link to the repository that's gonna be in the Notion document, and that's all the way up at the top in the resources section. And the link to the Notion document is in Discord. So I'll actually go in there and pin it. I see Alex added a good link that looks like it's working for people. So yeah, go ahead and get it there. Some of you can't join Discord. Let's see. I will post the good link to this chat and go ahead and try to access that one. So that should be in the chat now, Ben. And while you're doing that, I'll go ahead and just start talking through the very first lesson. So jumping in here, the way this is gonna work is we're just gonna go over the different goals. We're gonna go over the setup for this project. And then we're gonna go through each of the tasks. And once I get through all of these tasks, I will give you some time to do this on your own. So come on over here. I'm gonna bump the size up for you guys a little bit. And right up at the top. So the goal of this first lesson is just to set up your database. We're gonna be modeling out our schema. We're going to be seeding our database, which will be a SQLite database. And we're setting it up using Prisma. So that way we can actually manage our database schema and our applications database client all through one tool, and that is Prisma. So by the end of this, what you're gonna have is a backend. We're gonna start off our backend servers project. We're gonna know the shape of our database and how to interact with it in a type safe manner, because Prisma will give you a nice type safe client to do all this with.