-
Урок 1.
00:05:07
Introduction
-
Урок 2.
00:01:02
A bit about me
-
Урок 3.
00:01:07
Mistakes. We all make them.
-
Урок 4.
00:01:15
How to ask for help
-
Урок 5.
00:00:52
Installing Go
-
Урок 6.
00:01:18
Installing an IDE
-
Урок 7.
00:00:28
Get a free Stripe account
-
Урок 8.
00:01:28
Installing make
-
Урок 9.
00:02:14
Installing MariaDB
-
Урок 10.
00:00:52
Getting a database client
-
Урок 11.
00:02:17
What we're going to build
-
Урок 12.
00:14:57
Setting up a (trivial) web application
-
Урок 13.
00:20:40
Setting up routes and building a render function
-
Урок 14.
00:08:57
Displaying one page
-
Урок 15.
00:03:11
A better extension for Go templates and VS Code
-
Урок 16.
00:11:33
Creating the form
-
Урок 17.
00:10:44
Connecting our form to stripe.js
-
Урок 18.
00:07:49
Client side validation
-
Урок 19.
00:15:46
Getting the paymentIntent - setting up the back end package
-
Урок 20.
00:09:34
Getting the paymentIntent - starting work on the back end api
-
Урок 21.
00:10:52
Getting the paymentIntent - setting up a route and handler, and using make
-
Урок 22.
00:08:48
Getting the paymentIntent - finishing up our handler
-
Урок 23.
00:09:02
Updating the front end JavaScript to call our paymentIntent handler
-
Урок 24.
00:17:35
Getting the payment intent, and completing the transaction
-
Урок 25.
00:11:51
Generating a receipt
-
Урок 26.
00:04:08
Cleaning up the API url and Stripe Publishable Key on our form
-
Урок 27.
00:01:36
What are we going to build?
-
Урок 28.
00:01:34
Create the database
-
Урок 29.
00:08:19
Connecting to the database
-
Урок 30.
00:05:57
Creating a product page
-
Урок 31.
00:04:20
Creating the product form
-
Урок 32.
00:04:29
Moving JavaScript to a reusable file
-
Урок 33.
00:09:25
Modifying the handler to take a struct
-
Урок 34.
00:04:56
Update the Widget page to use data passed to the template
-
Урок 35.
00:03:28
Creating a formatCurrency template function
-
Урок 36.
00:04:13
Testing the transaction functionality
-
Урок 37.
00:10:43
Creating a database table for items for sale
-
Урок 38.
00:02:57
Running database migrations
-
Урок 39.
00:10:21
Creating database models
-
Урок 40.
00:05:52
Working on database functions
-
Урок 41.
00:03:59
Inserting a new transaction
-
Урок 42.
00:02:21
Inserting a new order
-
Урок 43.
00:05:21
An aside: fixing a problem with calculating the amount
-
Урок 44.
00:13:49
Getting more information about a transaction
-
Урок 45.
00:10:20
Customers
-
Урок 46.
00:10:11
Getting started saving customer and transaction information
-
Урок 47.
00:02:19
Create the save customer database method
-
Урок 48.
00:16:29
Saving the customer, transaction, and order from the handler
-
Урок 49.
00:06:35
Running a test transaction
-
Урок 50.
00:08:22
Fixing a database error, and saving more details
-
Урок 51.
00:06:36
Redirecting after post
-
Урок 52.
00:15:59
Simplifying our PaymentSucceeded handler
-
Урок 53.
00:09:38
Revising our Virtual Terminal
-
Урок 54.
00:01:40
Fixing a mistake in the formatCurrency template function
-
Урок 55.
00:02:02
What are we going to build in this section?
-
Урок 56.
00:03:06
Creating a Plan on the Stripe Dashboard
-
Урок 57.
00:04:40
Creating stubs for the front end page and handler
-
Урок 58.
00:09:20
Setting up the form
-
Урок 59.
00:07:04
Working on the JavaScript for plans
-
Урок 60.
00:04:50
Continuing with the Javascript for subscribing to a plan
-
Урок 61.
00:06:29
Create a handler for the POST request after a user is subscribed
-
Урок 62.
00:08:52
Create methods to create a Stripe customer and subscribe to a plan
-
Урок 63.
00:06:12
Updating our handler to complete a subscription
-
Урок 64.
00:10:00
Saving transaction & customer information to the database
-
Урок 65.
00:14:30
Saving transaction & customer information II
-
Урок 66.
00:07:17
Displaying a receipt page for the Bronze Plan
-
Урок 67.
00:03:46
Introduction
-
Урок 68.
00:07:04
Creating a login page
-
Урок 69.
00:03:25
Writing the stub javascript to authenticate against the back end
-
Урок 70.
00:13:38
Create a route and handler for authentication
-
Урок 71.
00:04:14
Create a writeJSON helper function
-
Урок 72.
00:05:58
Starting the authentication process
-
Урок 73.
00:03:08
Creating an invalidCredentials helper function
-
Урок 74.
00:06:20
Creating a passwordMatches helper function
-
Урок 75.
00:01:46
Making sure that everything works
-
Урок 76.
00:07:26
Create a function to generate a token
-
Урок 77.
00:03:56
Generating and sending back a token
-
Урок 78.
00:07:32
Saving the token to the database
-
Урок 79.
00:08:05
Saving the token to local storage
-
Урок 80.
00:09:24
Changing the login link based on authentication status
-
Урок 81.
00:11:22
Checking authentication on the back end
-
Урок 82.
00:00:47
A bit of housekeeping
-
Урок 83.
00:04:51
Creating stub functions to validate a token
-
Урок 84.
00:04:29
Extracting the token from the authorization header
-
Урок 85.
00:06:17
Validating the token on the back end
-
Урок 86.
00:05:23
Testing out our token validation
-
Урок 87.
00:01:17
Challenge: Checking for expiry
-
Урок 88.
00:06:20
Solution to challenge
-
Урок 89.
00:03:35
Implementing middleware to protect specfic routes
-
Урок 90.
00:02:27
Trying out a protected route
-
Урок 91.
00:10:17
Converting the Virtual Terminal post to use the back end
-
Урок 92.
00:13:09
Changing the virtual terminal page to use fetch
-
Урок 93.
00:02:40
Verifying the saved transaction
-
Урок 94.
00:05:36
Writing middleware on the front end to check authentication
-
Урок 95.
00:09:25
Protecting routes on the front end
-
Урок 96.
00:04:23
Logging out from the front end
-
Урок 97.
00:05:31
Saving sessions in the database
-
Урок 98.
00:09:49
Password resets
-
Урок 99.
00:14:16
Sending mail Part I
-
Урок 100.
00:01:49
Mailtrap.io
-
Урок 101.
00:10:46
Sending mail Part II
-
Урок 102.
00:10:13
Creating our mail templates and sending a test email
-
Урок 103.
00:12:45
Implementing signed links for our email message
-
Урок 104.
00:06:34
Using our urlsigner package
-
Урок 105.
00:06:20
Creating the reset password route and handler
-
Урок 106.
00:06:46
Setting up the reset password page
-
Урок 107.
00:09:13
Creating a back end route to handle password resets
-
Урок 108.
00:03:22
Setting an expiry for password reset emails
-
Урок 109.
00:12:20
Adding an encryption package
-
Урок 110.
00:05:28
Using our encryption package to lock down password resets
-
Урок 111.
00:07:31
Improving our front end and setting up an Admin menu
-
Урок 112.
00:06:23
Setting up stub pages for sales and subscriptions
-
Урок 113.
00:03:32
Updating migrations and resetting the database
-
Урок 114.
00:04:58
Listing all sales: database query
-
Урок 115.
00:05:59
Listing all sales: database function
-
Урок 116.
00:02:03
Listing all sales: writing the API handler and route
-
Урок 117.
00:06:27
Listing all sales: front end javascript
-
Урок 118.
00:05:26
Displaying our results in a table
-
Урок 119.
00:04:53
Making our table prettier, and adding some checks in JavaScript
-
Урок 120.
00:02:09
Solution to challenge
-
Урок 121.
00:11:25
Displaying a sale: part 1
-
Урок 122.
00:05:01
Displaying a sale: part 2
-
Урок 123.
00:04:45
Displaying a subscription
-
Урок 124.
00:01:02
Refunds from the Stripe Dashboard
-
Урок 125.
00:03:23
Adding a refund function to our cards package
-
Урок 126.
00:06:56
Creating an API handler to process refunds
-
Урок 127.
00:14:11
Update the front end for refunds
-
Урок 128.
00:03:20
Improving the front end
-
Урок 129.
00:09:06
Adding UI components to the sales page
-
Урок 130.
00:04:02
Updating status to refunded in the database
-
Урок 131.
00:04:01
Capturing the subscription id
-
Урок 132.
00:03:04
Adding a CancelSubscription function to our cards package
-
Урок 133.
00:05:34
Creating a handler to cancel a subscription
-
Урок 134.
00:05:42
Modifying the front end
-
Урок 135.
00:03:22
Finishing up the front end
-
Урок 136.
00:06:47
Creating a database method to paginate all orders
-
Урок 137.
00:04:02
Modifying the AllSales handler to use paginated data
-
Урок 138.
00:05:38
Updating the all-sales.page.gohtml template
-
Урок 139.
00:09:33
Improving pagination on the front end
-
Урок 140.
00:04:20
Adding listeners to page navigation buttons
-
Урок 141.
00:03:18
Taking user to correct page of data on click
-
Урок 142.
00:02:15
How I implemented pagination on the all subscriptions page
-
Урок 143.
00:06:00
Setting up templates to manage users
-
Урок 144.
00:02:30
Adding routes and handlers on the front end
-
Урок 145.
00:10:29
Writing the database functions to manage users
-
Урок 146.
00:01:59
Creating a handler and route for all users on the back end
-
Урок 147.
00:02:32
Updating the front end to call AllUsers
-
Урок 148.
00:04:03
Displaying the list of users
-
Урок 149.
00:07:04
Creating a user add/edit form
-
Урок 150.
00:05:53
Call the api back end to get one user
-
Урок 151.
00:06:44
Populating the user form, and a challenge
-
Урок 152.
00:02:56
Solution to challenge
-
Урок 153.
00:05:45
Saving an edited user - part one
-
Урок 154.
00:08:43
Saving an edited user - part two
-
Урок 155.
00:07:43
Deleting a user
-
Урок 156.
00:03:29
Removing the deleted users token from the database
-
Урок 157.
00:18:50
Setting up websockets
-
Урок 158.
00:06:25
Connecting to WebSockets from the browser
-
Урок 159.
00:06:00
Logging the deleted user out over websockets
-
Урок 160.
00:01:37
What are microservices?
-
Урок 161.
00:14:08
Setting up a simple microservice
-
Урок 162.
00:06:44
Receiving data with our micrsoservice
-
Урок 163.
00:20:22
Generating an invoice as a PDF
-
Урок 164.
00:05:30
Testing our PDF
-
Урок 165.
00:08:15
Mailing the invoice
-
Урок 166.
00:09:41
Call the microservice when a Widget is sold
-
Урок 167.
00:01:35
Challenge
-
Урок 168.
00:02:36
Solution
-
Урок 169.
00:06:50
Setting up a validation package
-
Урок 170.
00:03:31
Adding validation on the API back end
-
Урок 171.
00:09:21
Modifying the front end javascript
-
Урок 172.
00:02:25
gRPC, SOA, and more