PROFESSIONAL Full Stack Developer
Are you ready to level up your coding skills and become a full stack professional? Our new 50+ hours course is designed to equip you with the latest tools and techniques to build impressive, full stack applications that will impress the users and your team.
More
Over the next three months you will learn how to craft stunning, responsive front-end interfaces that flawlessly communicate with robust, scalable back-end servers, all with the use of industry-standard technologies such as:
- Spring Boot 3
- HTTP & API development
- Developer tools for maximum productivity
- Robust error handling techniques
- Databases & PostgreSQL
- Spring Data JPA
- Flyway for seamless database migrations
- JDBC for efficient database communication
- Testing strategies for robust, reliable code
- Docker for containerization and deployment
- AWS for cloud-based hosting and scaling
- DevOps best practices for agile, collaborative development
- JavaScript and React for front-end development
- Spring Security 6 for secure, authenticated applications
- Login/Registration systems for user management
- TypeScript for type-safe, scalable code
- Angular for powerful, responsive front-end interfaces
Who is the course for?
Learning full-stack development can be challenging, especially for beginners and professionals new to the service-oriented architecture.
Hence, the Full-Stack Professional course was designed to provide a comprehensive step-by-step learning package, suitable for anyone with basic programming knowledge and experience in at least one programming language.
Whether you're a professional programmer looking to expand your skill set or a beginner looking to get started in the world of programming, our course will teach everything you need to building complex web applications from start to finish.
Watch Online PROFESSIONAL Full Stack Developer
# | Title | Duration |
---|---|---|
1 | Java Master Class | 02:16 |
2 | The Next Steps | 00:59 |
3 | Practise as I teach (TODO's) | 01:55 |
4 | Discord | 01:10 |
5 | 00:38 | |
6 | Textbook | 02:33 |
7 | Exercises and Textbook | 01:36 |
8 | Exercise Solutions | 01:06 |
9 | Commit Your Changes | 02:10 |
10 | Linux and Terminal | 02:36 |
11 | IntelliJ 6 Months | 01:36 |
12 | Intellij New Theme | 00:59 |
13 | What we are about to cook (Project and Environment Setup) | 01:38 |
14 | Spring Initiliazer | 02:57 |
15 | Open the project with IntelliJ | 02:05 |
16 | pom.xml | 02:28 |
17 | Lets clean up few things | 02:18 |
18 | JDK | 02:48 |
19 | Your first Spring Boot Application (Getting Started with Spring Boot 3) | 04:11 |
20 | Embedded Web Server | 03:09 |
21 | Configuring Embedded Web Server | 04:48 |
22 | Your first API | 02:55 |
23 | @SpringBootApplication @RestController and @GetMapping | 06:07 |
24 | Spring Web MVC | 05:46 |
25 | JSON For Java | 07:18 |
26 | Java Objects to JSON Objects | 05:26 |
27 | Introduction to HTTP (HTTP, REST and APIs) | 04:12 |
28 | The Evolution of HTTP | 03:15 |
29 | HTTP Request and Response Messages | 03:49 |
30 | HTTP Methods | 04:44 |
31 | HTTP Status Codes | 06:33 |
32 | URL | 09:01 |
33 | API and REST API | 03:38 |
34 | Public APIs and Other Types | 06:38 |
35 | Why build APIs | 02:56 |
36 | Chrome Developer Tools (Developer Tools) | 07:07 |
37 | Exploring XHR for our API | 04:35 |
38 | Inspecting Instagram Network Activity | 09:29 |
39 | Postman | 03:50 |
40 | IntelliJ REST Client | 05:09 |
41 | CRUD and Section Overview (CRUD - Read) | 02:05 |
42 | Customer Model | 02:30 |
43 | Fake Database | 03:27 |
44 | API Endpoint | 05:55 |
45 | @PathVariable | 07:57 |
46 | N Tier Architecture (Structure the Backend) | 02:02 |
47 | Refactor - Controller Service and DAO | 10:40 |
48 | @RestController @Service @Repository @Component | 07:03 |
49 | Application Context (Application Context and Beans) | 04:58 |
50 | Inspecting beans | 05:09 |
51 | Bean Scopes | 02:23 |
52 | Creating Beans | 07:49 |
53 | We are not handling error the right way (Error Handling) | 01:57 |
54 | Custom Exception | 05:02 |
55 | @ResponseStatus | 02:28 |
56 | Include error Message to Responses | 02:04 |
57 | Section Intro (Databases) | 00:51 |
58 | Postgres and Docker | 02:18 |
59 | Verifying Docker Installation | 02:27 |
60 | Postgres DB with Docker compose | 04:26 |
61 | Connecting to Database | 01:34 |
62 | Connecting to DB using IntelliJ IDEA | 03:23 |
63 | Data Source & JPA | 02:31 |
64 | Installing PostgreSQL Driver and Spring Data JPA Dependencies | 03:00 |
65 | Configuring Datasource Properties | 04:49 |
66 | Create Customer Table | 04:51 |
67 | Outro | 01:22 |
68 | Entity (Spring Data JPA) | 03:45 |
69 | Inspecting The Database | 02:29 |
70 | Column Contraints | 02:32 |
71 | CustomerRepository | 02:26 |
72 | CustomerJPADataAccessService class | 02:03 |
73 | @Qualifier | 02:48 |
74 | Saving Entities | 04:32 |
75 | Exploring JPA Methods | 03:44 |
76 | Outro | 02:04 |
77 | The Problem (Get Customer By Id Exercise) | 01:04 |
78 | Exercise Solution | 01:42 |
79 | Intro (CRUD - Create) | 01:36 |
80 | Changing CustomerDao Interface | 00:51 |
81 | Override insert customer | 01:28 |
82 | Business Logic for Adding new Customer | 08:36 |
83 | Controller @RequestMapping and @RequestBody | 02:46 |
84 | Testing POST Request | 04:07 |
85 | Exercise (CRUD - Delete (Exercise)) | 01:40 |
86 | Exercise Solution | 02:35 |
87 | Exercise (CRUD - Update (Exercise)) | 03:23 |
88 | Exercise Solution | 05:03 |
89 | Few Words (Let's Pause) | 01:18 |
90 | Intro (Datasources, JDBC & Flyway) | 01:52 |
91 | JPA and Hibernate under the hood | 03:12 |
92 | JDBC and JDBCTemplate | 04:44 |
93 | DataSource and Connection Pools | 06:37 |
94 | Flyway and Liquibase | 03:38 |
95 | Flyway (Flyway) | 06:21 |
96 | Installing Flyway | 00:49 |
97 | Applying and Understanding Flyway Migrations | 11:28 |
98 | Lets Start Again but Right | 03:45 |
99 | Create Customer Table | 04:23 |
100 | Inspecting the Customer Table | 03:19 |
101 | Working with Sequences | 06:59 |
102 | Exercise | 01:35 |
103 | Exercise Solution | 04:33 |
104 | Migrations Documentation | 02:45 |
105 | Match Entity Containts schema | 04:36 |
106 | Validating Schema With Hibernate | 05:28 |
107 | Exercise Solution | 06:39 |
108 | Intro (JDBC Template) | 01:16 |
109 | CustomerJDBC class | 03:47 |
110 | JDBC Template Documentation | 02:28 |
111 | Insert Customer | 03:53 |
112 | Test Insert Customer | 03:49 |
113 | Select All Customers | 05:31 |
114 | RowMapper and ResultSet | 04:50 |
115 | Refactor Row Mapper | 02:22 |
116 | Exercise | 00:40 |
117 | Exercise Solution | 04:04 |
118 | Exercise | 00:46 |
119 | Exercise Solution | 08:19 |
120 | Why multiple DAO implementations | 04:18 |
121 | More on databases later | 01:20 |
122 | When to use JDBC over JPA (Spring JDBC vs JPA) | 04:09 |
123 | Would you ? (Important Question) | 02:18 |
124 | Intro (Testing - Setup) | 02:44 |
125 | Testcontainers | 02:57 |
126 | H2 | 01:26 |
127 | Intalling Testcontainers | 03:37 |
128 | Let's Write a test Testcontainers | 06:52 |
129 | Inspecting DB created by Testcontainers | 08:02 |
130 | Apply migrations with Flyway | 05:59 |
131 | @DynamicPropertySource | 03:29 |
132 | Don't Use @SpringBootTest for Unit Tests | 06:26 |
133 | Abstract Testcontainres Logic | 05:22 |
134 | Intro (Testing JDBC Template) | 01:27 |
135 | JDBCTeamplate Test Class | 04:53 |
136 | Configure JDBC Template | 04:50 |
137 | selectAllCustomers Test | 06:07 |
138 | selectCustomerById Test | 05:18 |
139 | selectCustomerById Test 2 | 03:20 |
140 | Exercises | 01:17 |
141 | Test Coverage | 02:14 |
142 | Exercise Solution | 06:43 |
143 | Intro (Testing JPA Repositories) | 00:50 |
144 | What do we need to test | 05:07 |
145 | The Wrong Way | 05:07 |
146 | @DataJpaTest and @AutoConfigureTestDatabase | 04:58 |
147 | Writing Tests For CustomerRepository | 08:27 |
148 | No Need to Test DB Backed by List (DAO Mock Testing) | 01:36 |
149 | Mockito | 03:50 |
150 | @Mock | 03:12 |
151 | Test Select All Customers | 03:33 |
152 | Test selectCustomerById | 03:21 |
153 | Exercise Solution | 02:36 |
154 | Intro (Testing Business Layer) | 01:01 |
155 | Create CustomerServiceTest and MockitoExtension | 03:03 |
156 | Test GetAllCustomers | 01:17 |
157 | Test getCustomer | 05:53 |
158 | Test if getCustomer Returns Empty Optional | 04:48 |
159 | Test addCustomer | 06:23 |
160 | addCustomer Test Code Explanation | 04:09 |
161 | Test addCustomer 2 | 03:59 |
162 | Exercises | 02:16 |
163 | Exercise Solution (Part 1) | 04:36 |
164 | Exercise Solution (Part 2) | 18:51 |
165 | Exercise | 00:43 |
166 | Exercise Solution | 05:29 |
167 | Intro (Integration Testing) | 02:03 |
168 | @SpringBootTest | 03:36 |
169 | WebTestClient | 03:32 |
170 | The First Integration - canRegisterCustomer - Part 1 | 07:13 |
171 | Running canRegisterCustomer Integration Test | 04:43 |
172 | The First Integration - canRegisterCustomer - Part 2 | 08:49 |
173 | canDeleteCustomer Integration Test | 03:07 |
174 | Exercise Solution | 05:41 |
175 | Intro (The Upcoming Sections) | 02:55 |
176 | Intro (The Jar file) | 01:44 |
177 | Spring Boot Maven Plugin Jar | 07:04 |
178 | Running Jar | 03:37 |
179 | Intro (Maven & Tests) | 00:40 |
180 | Surefire Plugin | 04:59 |
181 | Configuring Surefire Plugin | 03:47 |
182 | Maven Failsafe Plugin | 12:46 |
183 | The Jar File | 02:12 |
184 | Section Outro | 01:24 |
185 | Intro (DevOps) | 00:41 |
186 | What is DevOps | 07:54 |
187 | DevOps Key Practices and Benefits | 05:04 |
188 | Outro | 01:03 |
189 | Intro (Docker) | 01:55 |
190 | What is Docker | 01:32 |
191 | Docker vs VM | 04:35 |
192 | Undestanding Containers | 05:57 |
193 | Docker Images and Containers | 08:51 |
194 | Docker Architecture | 02:41 |
195 | Docker Registries | 04:14 |
196 | Docker Login | 05:50 |
197 | Outro | 01:15 |
198 | Intro (Jib) | 00:45 |
199 | What is Jib | 02:20 |
200 | Configuring Jib Plugin | 08:49 |
201 | Building Docker Image | 04:40 |
202 | Pulling Image and Running Container | 05:49 |
203 | Container Comunication | 04:39 |
204 | Docker Network In Action | 06:47 |
205 | Docker Compose | 07:05 |
206 | Section Outro | 00:55 |
207 | Outro | 02:18 |
208 | Intro (AWS) | 01:12 |
209 | Infrastructure Components Overview | 04:50 |
210 | AWS Free Tier | 03:53 |
211 | AWS Console Overview | 06:37 |
212 | Elastic Beanstalk | 02:47 |
213 | Elastic Beanstalk Key Terms | 03:17 |
214 | Generate New Key Pair | 04:07 |
215 | Saving Private Key | 02:46 |
216 | Getting Started With Elastic Beanstalk (Elastic Beanstalk) | 02:26 |
217 | Elastic Container Service | 03:38 |
218 | Dockerrun aws json | 08:33 |
219 | Configure More Options | 09:38 |
220 | Infrastructure Provisioned By EB | 03:57 |
221 | Updating DB Host and Inspecting Logs | 07:02 |
222 | SSH MAC & LINUX & Windows | 04:18 |
223 | Bastions | 04:01 |
224 | Create Customer DB | 06:06 |
225 | Hooray we deployed the API | 02:55 |
226 | Exploring EB | 04:22 |
227 | Cloudformation | 02:42 |
228 | Infrastructure As Code | 02:50 |
229 | Multiple Environments | 02:46 |
230 | There Are Many Other Ways To Deploy | 02:21 |
231 | Intro (Git and Github) | 01:21 |
232 | What We Need To Do | 00:41 |
233 | Organizing Folders (Monorepo) | 00:52 |
234 | Create Github Repository | 01:18 |
235 | Pushing code to Github | 06:14 |
236 | Open the new Folder and Run Application | 08:05 |
237 | Intro (Github Actions) | 03:56 |
238 | Github Actions Overview | 04:55 |
239 | Intro (Continuos Integration) | 01:31 |
240 | Creating the workfow | 03:45 |
241 | Github Actions Services | 05:53 |
242 | Checkout Action | 03:30 |
243 | Setup Java Action | 03:15 |
244 | Run Shell Command | 06:08 |
245 | Commit and Push Workflow | 01:16 |
246 | New Feature Branch | 03:14 |
247 | Triggering the Workflow With Pull Request | 05:39 |
248 | Make Build Workflow Fail | 04:40 |
249 | Outro | 01:31 |
250 | Intro (Continous Delivery) | 02:44 |
251 | Create Deploy Workflow | 03:04 |
252 | Postgres Service | 04:35 |
253 | Setting Working Directory | 01:07 |
254 | Clone Java and Login to Docker Hub | 04:32 |
255 | Generate Custom Build Number | 02:41 |
256 | Build Number Step | 02:09 |
257 | Maven Verify Step | 05:55 |
258 | SED Command | 05:57 |
259 | Step to Replace tag in Dockerrun aws json | 02:19 |
260 | The Deployment Process | 02:32 |
261 | Create AWS Github Actions User with Programmatic Access | 04:51 |
262 | Github Secrets for AWS | 03:58 |
263 | AWS Elastic Beanstalk | 04:13 |
264 | Commit and Push Dockerrun.aws.json STEP | 02:11 |
265 | Continuous Delivery In Action | 05:49 |
266 | Outro | 03:36 |
267 | Intro (Slack Integration) | 01:26 |
268 | Installing Slack | 01:08 |
269 | Workspaces | 01:34 |
270 | Webhooks | 04:13 |
271 | Exercise | 05:11 |
272 | Exercise Solution | 03:57 |
273 | Deployment In Action With Slack Messaging | 06:09 |
274 | Discord Webhooks | 02:08 |
275 | Intro (Javascript) | 01:14 |
276 | Your First Javascript Code | 02:09 |
277 | What is Javacript and How it works | 04:00 |
278 | Visual Studio Code (VS Code) | 02:18 |
279 | NodeJS and NPM | 02:48 |
280 | Running JS with using Node | 03:51 |
281 | Code Runner | 07:57 |
282 | Comments | 03:05 |
283 | Quotes and Colons | 04:17 |
284 | Variables | 05:22 |
285 | Datatypes | 01:59 |
286 | Strings | 06:07 |
287 | Objects | 06:01 |
288 | Boolean | 04:17 |
289 | Arrays | 05:09 |
290 | Functions | 05:39 |
291 | Built in functions | 06:06 |
292 | Loops | 04:29 |
293 | Other types of For Loops | 04:51 |
294 | While Loop | 04:50 |
295 | Comparison Operators | 04:09 |
296 | Logical Operator | 02:16 |
297 | If Statement | 07:16 |
298 | Ternary if statement | 03:09 |
299 | Switch Statement | 03:37 |
300 | Hoisting | 04:45 |
301 | Let Keyword | 01:35 |
302 | Const Keyword | 06:10 |
303 | When to Use Const vs Let | 04:10 |
304 | Type Coercion | 04:26 |
305 | Triple Equals | 03:48 |
306 | Functions Overview | 06:04 |
307 | Arrow Functions | 06:09 |
308 | Function Default Parameter | 03:29 |
309 | Callbacks | 07:48 |
310 | Working with Objects | 06:55 |
311 | Object Destructing | 05:14 |
312 | Spread Operator on Objects | 04:23 |
313 | Working with Arrays | 05:18 |
314 | Arrays.Map | 03:31 |
315 | Array Destructuring | 03:40 |
316 | Default Exports | 07:44 |
317 | Name Exports and Imports | 07:51 |
318 | Your first Promise | 05:00 |
319 | synchronous vs asynchronous code | 05:43 |
320 | Async Await | 06:15 |
321 | Promise all | 07:25 |
322 | Promise base http client | 07:52 |
323 | Outro | 01:02 |
324 | What is React (React) | 01:37 |
325 | Vite | 01:29 |
326 | Scaffolding React App with Vite | 05:10 |
327 | Application Folder Stucture | 03:35 |
328 | SRC folder | 04:27 |
329 | Understanding Available Scripts | 03:48 |
330 | Clean up code to start fresh | 02:35 |
331 | Intro (Basics of React) | 00:41 |
332 | JSX | 05:30 |
333 | Components | 03:03 |
334 | Creating Components | 04:13 |
335 | Components and Props | 05:50 |
336 | Props Children | 03:50 |
337 | Tranformations with Map | 08:19 |
338 | UseState hook | 04:28 |
339 | UseEffect Hooks | 07:00 |
340 | Outro | 01:24 |
341 | Intro (React Building Our Web App) | 01:32 |
342 | UI Libraries | 04:09 |
343 | Installing Chakra | 03:22 |
344 | Testing ChakraUI installation | 03:29 |
345 | SideBar | 06:29 |
346 | Customize The SideBar | 05:24 |
347 | Axios and getCustomers method | 04:40 |
348 | Vite environement variables | 02:57 |
349 | Lets try to fetch data from the server | 03:32 |
350 | CORS | 03:13 |
351 | Allow CORS on the backend | 07:38 |
352 | Render Customers & Loading Spinner | 09:08 |
353 | Card Component | 03:53 |
354 | Wrap and Wrap Item | 03:13 |
355 | Customizing Card | 07:30 |
356 | Include sha and commit to CD workflow | 04:18 |
357 | Watch CD Workflow Deploy CORS changes | 03:42 |
358 | Intro (Backend and React - Gender Exercise (Challenging)) | 02:10 |
359 | Exercise | 03:16 |
360 | Add New Migration (Backend and React - Gender Exercise Solution) | 06:45 |
361 | Updating Customer Contructor to Include Gender | 05:02 |
362 | Fixing Tests | 08:11 |
363 | Fixing Integration Tests | 06:10 |
364 | Add Gender and Profile Picture to Frontend | 06:14 |
365 | Deployment | 07:56 |
366 | Pull Lastest amigoscode-api version | 03:47 |
367 | Outro | 01:43 |
368 | Intro (React - New Customer Feature) | 01:00 |
369 | Create Customer Button | 03:36 |
370 | Drawer | 05:06 |
371 | Installing Formik and YUP | 03:36 |
372 | CreateCustomerForm component | 04:42 |
373 | Customise Form (Part 1) | 08:27 |
374 | Customise Form (Part 2) | 04:46 |
375 | Disable submit button if form not valid | 04:14 |
376 | Axios Post | 02:10 |
377 | onSubmit | 05:48 |
378 | Fetch customers on save | 06:50 |
379 | Toasts and Notifications | 05:43 |
380 | Using success and error notifications | 05:13 |
381 | Exercise (React - Delete Customer Exercise) | 01:08 |
382 | Exercise Solution | 12:23 |
383 | Exercise (React - Update Customer Exercise) | 00:42 |
384 | Exercise Solution | 17:11 |
385 | Final Touches | 05:52 |
386 | Intro (Dockerise React App and Docker Compose) | 01:07 |
387 | Dockerfile react frontend | 07:34 |
388 | Building React Frontend Docker Image | 04:10 |
389 | Running React Frontend Container | 05:18 |
390 | Looking inside the container | 04:02 |
391 | Adding react service to docker compose | 04:47 |
392 | Intro (React Frontend Deployment) | 01:10 |
393 | Docker Build Args | 07:11 |
394 | React Frontend Container Definition | 07:05 |
395 | Deploying | 04:04 |
396 | AWS Security Group and Rules | 08:15 |
397 | Adding Security Group Rule | 05:24 |
398 | Outro | 02:58 |
399 | Exercise (AWS - Exercise) | 02:33 |
400 | Exercise Solution | 21:25 |
401 | Intro (Security & JWT Overview) | 01:34 |
402 | The Problem | 01:34 |
403 | Spring Security | 01:44 |
404 | Exploring Spring Security Documentation | 02:55 |
405 | Introduction to JWT | 03:52 |
406 | The Structure of JWT | 05:12 |
407 | How We Are Going to Secure Our Endpoints | 01:51 |
408 | Installing Dependencies (Implementing Security) | 05:15 |
409 | Starting the server | 03:02 |
410 | Generate JWT Token | 05:01 |
411 | Generate JWT Token - Signing | 06:31 |
412 | Important | 01:01 |
413 | Send Signed Token to Client | 04:09 |
414 | Allow Only POST Requests to Register Customers | 06:50 |
415 | Inspecting JWT Token | 02:13 |
416 | Security FIlter Chain | 06:36 |
417 | The Next Steps | 01:43 |
418 | UserDetails | 03:21 |
419 | Implement UserDetails | 06:55 |
420 | Fixing Tests | 08:34 |
421 | UserDetailsService | 07:10 |
422 | Password Encoder and BCrypt | 07:42 |
423 | Hashed Passowords In Action | 07:36 |
424 | Authentication Provider | 03:24 |
425 | DaoAuthenticationProvider | 05:58 |
426 | JWT Token Validation Overview | 02:10 |
427 | JWT Auth Filter and Extract Token | 04:50 |
428 | Extract Subject From Token | 03:08 |
429 | Validate Token and Set Authentication | 09:07 |
430 | Registering The Filter | 03:31 |
431 | Attatching JWT to Requests | 04:46 |
432 | Fixing CustomerRepositoryTest | 03:12 |
433 | Lets Pause | 01:17 |
434 | Spring Security Architecture Explained | 13:05 |
435 | Outro | 01:02 |
436 | Intro (DTO Pattern) | 01:46 |
437 | DTO Pattern | 16:01 |
438 | Fixing canRegisterCustomer Integration Test (Implementing Security PART 2) | 09:00 |
439 | We Have A Problem With Spring Security | 03:44 |
440 | Authentication Entrypoint | 05:14 |
441 | @ControllerAdvice and @ExceptionHandler | 08:17 |
442 | Handle InsufficientAuthenticationException and Exception | 04:15 |
443 | Exercise | 00:48 |
444 | Exercise Solution canDeleteCustomer | 05:02 |
445 | Exercise Solution canUpdateCustomer | 05:26 |
446 | CORS Issue Again | 02:39 |
447 | Spring Security CORS | 07:02 |
448 | Login Exercise | 01:28 |
449 | Login Exercise Solution | 14:12 |
450 | Login Integration Test | 12:17 |
451 | Test Login using Postman | 03:41 |
452 | POST Mistake | 01:59 |
453 | Deployment | 07:47 |
454 | Testing API | 03:08 |
455 | Exercise | 00:24 |
456 | Exercise Solution | 02:49 |
457 | Outro | 00:55 |
458 | Intro (React - Login & Registration) | 00:38 |
459 | Section Intro | 01:55 |
460 | Installing React Router | 03:39 |
461 | React Router Routes | 04:39 |
462 | Login Page | 03:45 |
463 | Syling Right Side of Login Page | 04:34 |
464 | Login Form P1 | 06:51 |
465 | Login Form P2 | 07:38 |
466 | Login Post Method | 02:02 |
467 | React Context | 02:55 |
468 | AuthProvider | 08:05 |
469 | Using Context | 07:39 |
470 | Performing Login | 05:35 |
471 | Local Storage | 04:07 |
472 | Adding to Local Storage | 03:19 |
473 | Redirected After Successful login | 02:54 |
474 | Attach Authorization Header to HTTP Requests | 05:23 |
475 | Add Password To Create New Customer | 05:08 |
476 | Logout | 05:59 |
477 | Add Details about Current Logged in Customer | 06:01 |
478 | Protected Route | 06:19 |
479 | Check Token Expiration with JWT Decode | 06:28 |
480 | UseEffect in AuthProvider | 08:10 |
481 | Redirect to Dashboard if logged in | 02:20 |
482 | Testing when token expires | 03:48 |
483 | Login Page Deployment | 07:31 |
484 | Exercise | 01:01 |
485 | Exercise Solution (Part 1) | 08:07 |
486 | Exercise Solution (Part 2) | 11:42 |
487 | Deployment for Registration | 04:52 |
488 | Intro (AWS Load Balancers, Route53, Certificate Manager and SSL/TLS) | 03:56 |
489 | Section Overview | 04:40 |
490 | Load Balancers Overview | 03:55 |
491 | The Need For a Brand New Environment | 02:10 |
492 | Create new EB Environment with ALB | 10:38 |
493 | Deploy new version with correct DB details | 05:05 |
494 | Understanding ALB health checks | 07:49 |
495 | Actuator and Health Endpoint | 07:48 |
496 | Update Github Secrets | 02:05 |
497 | Deploy Actuator Changes | 07:16 |
498 | Changing LB Health Endpoint | 06:49 |
499 | Route 53 - Register Domain | 02:27 |
500 | Create A Record for Load Balancer | 04:42 |
501 | SSL and TLS | 02:29 |
502 | Issuing Certificate with Certificate Manager | 03:13 |
503 | HTTPS Listener | 06:31 |
504 | HTTP to HTTPS Redirects | 03:42 |
505 | Outro | 01:44 |
506 | Managed Hosting Services for Web Apps (AWS Amplify - React Deployment) | 05:30 |
507 | Installing AWS Amplify | 04:20 |
508 | Choosing Repo and Branch | 01:55 |
509 | Build Settings (Part 1) | 04:15 |
510 | Build Settings (Part 2) | 06:34 |
511 | Deployment | 05:00 |
512 | Custom Domain | 07:14 |
513 | Protect Web App | 01:49 |
514 | Previews | 02:40 |
515 | Change React UI | 13:03 |
516 | Raise PR | 06:34 |
517 | Merge PR | 03:07 |
518 | Intro (Typescript) | 00:43 |
519 | Your first Typescript code | 01:49 |
520 | Nodejs installation | 00:44 |
521 | VS code | 00:59 |
522 | Install Typescript | 01:44 |
523 | TS-node code runner settings | 05:12 |
524 | Comments | 03:37 |
525 | Declare variables | 06:47 |
526 | String type | 04:59 |
527 | Number type | 03:04 |
528 | Boolean type | 01:54 |
529 | Array type | 05:03 |
530 | Object type | 04:16 |
531 | Any type | 03:22 |
532 | Union type | 04:15 |
533 | Alias type | 04:25 |
534 | Tuple type | 03:00 |
535 | Enum type | 05:35 |
536 | Never type | 04:06 |
537 | Unknown type | 05:10 |
538 | Literal type | 05:56 |
539 | Functions | 14:01 |
540 | Classes | 04:11 |
541 | Class Access Modifiers | 06:45 |
542 | Class read only Access Modifiers | 01:49 |
543 | Inheritance | 07:12 |
544 | Getters and setters | 07:07 |
545 | Static properties and methods | 05:52 |
546 | Abstract class | 07:03 |
547 | Interfaces I | 05:47 |
548 | Interfaces II | 03:37 |
549 | Interfaces III | 04:53 |
550 | Interface Functions | 02:37 |
551 | Interface Optionals | 01:56 |
552 | Intro to Generics | 10:14 |
553 | Generics Classes and Interfaces | 11:57 |
554 | Outro | 00:19 |
555 | Intro (Getting Started with Angular) | 00:44 |
556 | What is angular | 01:37 |
557 | What is a module | 02:09 |
558 | Components in angular | 04:35 |
559 | Install angular cli | 04:32 |
560 | Bootstrap the app with npm | 03:09 |
561 | Explain project structure (src folder) | 07:04 |
562 | Explain project structure (package json file) | 03:44 |
563 | Explain project structure (angular json file) | 08:30 |
564 | Strip sample application | 05:19 |
565 | Create a new angular component (Basics of Angular) | 04:42 |
566 | Display and use a component | 02:57 |
567 | Data binding | 05:43 |
568 | Two ways binding | 03:38 |
569 | Event binding | 03:48 |
570 | Directives - Conditions - Nglf (Part 1) | 09:09 |
571 | Directives - conditions - Ngfor (Part 2) | 06:26 |
572 | Inputs | 06:07 |
573 | Output (Part 1) | 08:04 |
574 | Output (Part 2) | 06:20 |
575 | Services (Part 1) | 08:09 |
576 | Services (Part 2) | 08:44 |
577 | Routing-bootstrapping | 03:15 |
578 | Routing - Definition | 03:54 |
579 | Routing - Declaring a new route | 07:47 |
580 | Routing - Navigating to different routes by template and by injecting | 06:51 |
581 | Walking through PrimeNG Website (Angular - Application Skeleton) | 06:21 |
582 | Cleanup the Project | 03:17 |
583 | Adding PrimeNG Dependencies | 04:16 |
584 | Import PrimeNG Styles | 03:14 |
585 | Make Sure the Imports Work | 01:35 |
586 | Explaining Login and Register Pages | 01:23 |
587 | Explaining the Future Design of the App | 04:12 |
588 | Splitting the App into Components | 03:34 |
589 | Create the Customer Component | 10:15 |
590 | Create Menu Bar Component | 09:44 |
591 | Create Menu Item Component | 06:34 |
592 | Header Bar Component | 16:42 |
593 | Add Create Customer Button | 02:06 |
594 | Add the Sidebar | 06:36 |
595 | Create Mana-Customer Component (Part 1) | 07:09 |
596 | Create Mana-Customer Component (Part 2) | 05:24 |
597 | Create Login Component (Angular - Login Page) | 00:47 |
598 | Exercise 1 - Add Routing for Login Page | 00:32 |
599 | Exercise 1 - Solution | 01:24 |
600 | Implement Login Page UI (Part 1) | 06:58 |
601 | Implement Login Page UI (Part 2) | 08:49 |
602 | Create the Authentication Service | 01:57 |
603 | Create the Authentication Model | 02:55 |
604 | Exercise 2 - Bind the Authentication Model to the Login Form | 00:28 |
605 | Exercise 2 - Solution | 02:43 |
606 | Implement the Login Method | 04:17 |
607 | Consume the Login Method and Console Log the Result | 03:16 |
608 | Import the HTTP Client Module | 01:47 |
609 | Test the Login Method and Analyse the Response | 02:15 |
610 | Create Authentication Response Object | 05:31 |
611 | Make the Login Method Returns Authentication Response | 01:29 |
612 | Catch the Authentication Error and Display the Error Message | 06:11 |
613 | Implement Success Login - Store Unauthorised Response and Redirect the User | 03:50 |
614 | Why Securing a Route | 01:02 |
615 | What is a Guard | 01:51 |
616 | Create the Access Guard Service | 01:43 |
617 | Use the Access Guard to Secure the Customers Route | 02:04 |
618 | Add the Angular-JWT Library | 02:28 |
619 | Implement the Access Guard and Secure the Customers Route | 06:29 |
620 | Create Customer Service (Angular - Fetch All Customers) | 00:54 |
621 | Exercise 1 - Find all Customers | 00:23 |
622 | Exercise 1 - Solution | 01:23 |
623 | Display all Customers (Part 1) | 04:08 |
624 | Ddd the Authorisation Header to the Request | 02:53 |
625 | Display all customers (Part 2) | 01:14 |
626 | Generate Environments Files | 03:17 |
627 | Add Application Properties | 04:15 |
628 | Update the Services to use the Values from Environment file | 04:40 |
629 | Present the Hard Coded JWT Token (problematic) | 02:40 |
630 | Create the HTTP Interceptor | 02:00 |
631 | Make Angular use the Interceptor | 03:02 |
632 | Implement the Interceptor | 03:25 |
633 | Create Customer Card Component | 01:40 |
634 | Implement Customer Card UI | 12:13 |
635 | Exercise 2 - Display Customer Information in the Card component | 00:12 |
636 | Exercise 2 - Solution | 04:08 |
637 | Add Customer Registration Object as Input (Angular - Create Customer) | 02:07 |
638 | Create the Customer Registration Request Object | 01:45 |
639 | Add Binding to the Form | 02:18 |
640 | Exercise 1 - Disable the Submit button if the customer is not valid | 00:30 |
641 | Exercise 1 Solution | 05:12 |
642 | Exercise 2 - Delegate the Submit Operation to the Parent Component | 00:34 |
643 | Exercise 2 - Solution | 02:06 |
644 | Consume the Submit Event and Console Log the Customer Information | 03:09 |
645 | Create POST Customer Service Method | 02:00 |
646 | Exercise 3 - Save and Refresh the Customers List | 00:29 |
647 | Exercise 3 - Solution | 05:20 |
648 | Add Style to the Displayed Cards | 02:13 |
649 | Add Toast Component | 02:05 |
650 | Display Succes Message after Saving New Customer | 03:38 |
651 | Add Dynamic Profile Picture to the Customer Card | 05:15 |
652 | Exercise - Implement the Delete Functionality (including the confirm dialogue) | 01:39 |
653 | Delegate the Delete Event to the Parent and Console Log the Customer DTO | 02:59 |
654 | Add the Confirmation Dialogue Component | 02:20 |
655 | Display the Confirmation Dialogue and Console Log the Confirm Delete Action | 04:31 |
656 | Create Delete Customer Method (HTTP) | 01:35 |
657 | Perform Delete Action and Refresh the Customers List | 01:54 |
658 | Explaining the Update Functionnality (Angular - Update customer) | 00:55 |
659 | Create Customer Update Request Model | 01:18 |
660 | Create Customer Update Methods (service) | 01:48 |
661 | Add Operation Input and Manage Fields Display | 04:11 |
662 | Display Title Depending on the Operation | 03:13 |
663 | Delegate the Update Event to the Parent and Display Customer Information in the Form | 05:27 |
664 | Adjust the Create Customer (button) Click Envent | 02:13 |
665 | Adjust the Disabling of the Submit Button | 03:13 |
666 | Implement Update Customer (Part 1) | 04:29 |
667 | Extend the Customer Object and Test the Update Functionality (Part 2) | 04:04 |
668 | Correctly Display the Manage Customer Title | 03:39 |
669 | Implement Cancel Button | 04:09 |
670 | Exercise 1 - Display Username and Role in the Header | 02:01 |
671 | Exercise 1 - Soluion | 03:28 |
672 | Logout | 04:43 |
673 | Exercise - Implement the Registration Functionality (Angular - Register New Customer) | 01:37 |
674 | Create Register Component | 00:59 |
675 | Add Routing to Register Page | 02:08 |
676 | Implement the Register UI (Part 1) | 03:56 |
677 | Implement the Register UI (Part 2) | 04:41 |
678 | Add Binding to the Customer Registration Request | 01:36 |
679 | Register a User and Redirect to Customers Page | 06:57 |
680 | Redirect Angular (Angular - Tidy Up) | 02:20 |
681 | Tidy Up Some Files | 02:57 |
682 | Commit Changes | 01:57 |
683 | Exercise (Angular - Deployment Exercise + Solution) | 00:49 |
684 | Product Environment Configuration | 03:46 |
685 | AWS Amplify Configuration | 04:34 |
686 | Deploying Frontend | 03:33 |
687 | Custom Domain With Free SSL Certificate | 04:16 |
688 | Access Control | 01:51 |
689 | AWS Amplify Continuos Integration | 05:34 |
690 | AWS Amplify Continuos Delivery | 05:34 |
691 | Outro (Angular Outro) | 01:22 |
692 | Intro (Limit and Pagination) | 01:47 |
693 | The Problem and Fix | 12:53 |
694 | Outro | 00:45 |
695 | The Exercise (File Upload Exercise) | 02:23 |
696 | Documentation and POM (S3 File Uploads) | 04:08 |
697 | Create User | 04:37 |
698 | Create Access and Secret Keys | 02:33 |
699 | Storing Credentials | 03:58 |
700 | Amazon S3 | 02:38 |
701 | S3Client Bean | 05:16 |
702 | Implement PutObject Method | 04:21 |
703 | Implement GetObject Method | 03:26 |
704 | Create S3 Bucket | 02:43 |
705 | Testing Uploads and Downloads | 08:46 |
706 | Bucket Name as Config | 04:46 |
707 | Upload and Download API Endpoints | 05:17 |
708 | Implement Service method to upload | 06:03 |
709 | Implement Service method to download | 05:01 |
710 | ProfileImageId New Column | 08:07 |
711 | SQL and JPQL Queries | 06:57 |
712 | Include new coloum in select statements | 02:38 |
713 | Stroring and Retrieving Profile Image Id from DBNew Lesson | 05:03 |
714 | Fixing Compilation and Tests | 06:18 |
715 | Test canPutObject | 11:56 |
716 | Test canGetObject | 05:52 |
717 | Test canGetObject Exception | 04:33 |
718 | Test uploadCustomerProfileImage Part 1 | 11:18 |
719 | Test uploadCustomerProfileImage Part 2 | 06:01 |
720 | Test uploadCustomerProfileImage Part 3 | 04:15 |
721 | Test downloadCustomerProfileImage Part 1 | 05:25 |
722 | Test downloadCustomerProfileImage Part 2 | 05:46 |
723 | Test downloadCustomerProfileImage Part 3 | 02:40 |
724 | Exception Handling Documentation | 04:30 |
725 | Test JPA Repository Query | 06:48 |
726 | Test JPA DAO Implementation | 02:24 |
727 | Test JDBC DAO Implementation | 02:49 |
728 | Adding Pictures To Test Folder | 05:07 |
729 | Picture Upload IT Part 1 | 07:46 |
730 | Increase Multipart File Size | 07:55 |
731 | Download Picture Integration Test | 06:55 |
732 | Permit All to Download Picture | 03:11 |
733 | FakeS3 | 03:44 |
734 | FakeS3 PutObject | 06:38 |
735 | FakeS3 GetObject | 02:15 |
736 | Mock S3 | 02:04 |
737 | Mock S3 In Action | 04:13 |
738 | Roles and Policies | 06:09 |
739 | IAM Policy Simulator | 07:41 |
740 | Different Profiles Per Environment (Spring Profiles) | 02:12 |
741 | Working With Profiles | 05:33 |
742 | Test Profile Configuration | 05:34 |
743 | Deployment | 02:39 |
744 | SSH Into EC2 | 03:47 |
745 | React Drop Zone (React - File Upload) | 01:20 |
746 | Syling Dropzone | 04:05 |
747 | Using Dropzone | 04:36 |
748 | Dropzone Upload FIle | 04:53 |
749 | Testing Picture upload | 03:37 |
750 | Reload Profile Picture On Upload | 02:24 |
751 | Display Profile Picture | 02:25 |
752 | MediaType IMAGE_JPEG_VALUE | 02:09 |
753 | CI_CD Backend and Frontend | 05:12 |
754 | Test Live Application | 03:20 |
755 | Outro (File Upload Outro) | 02:32 |
756 | We Built The Building Blocks and Potential Features (Few Words) | 03:03 |
757 | Improve Things as you Wish | 01:25 |
758 | Secrets Management | 02:11 |
759 | Next steps | 01:06 |
760 | Testimonial | 01:54 |