1. Урок 1.00:07:51
    1.1. Introduction to the course
  2. Урок 2.00:05:00
    1.2. Setting up the developer environment
  3. Урок 3.00:06:10
    1.3. Setting up VS Code for C# development
  4. Урок 4.00:03:21
    1.4. Course assets and source code location
  5. Урок 5.00:05:15
    2.1. Introduction
  6. Урок 6.00:08:44
    2.2. Creating the .Net projects
  7. Урок 7.00:13:47
    2.3. Reviewing the projects in VS Code
  8. Урок 8.00:09:17
    2.4. Creating the Product Entity
  9. Урок 9.00:06:28
    2.5. Setting up entity framework
  10. Урок 10.00:09:25
    2.6. Setting up Sql Server
  11. Урок 11.00:08:24
    2.7. Connecting to the Sql Server from the app
  12. Урок 12.00:10:16
    2.8. Configuring the entities for the migration
  13. Урок 13.00:10:00
    2.9. Creating a products controller
  14. Урок 14.00:06:31
    2.10. Using postman to test our new API Endpoints
  15. Урок 15.00:07:33
    2.11. Adding the update and delete endpoints
  16. Урок 16.00:08:02
    2.12. Saving our code into source control
  17. Урок 17.00:07:04
    2.13. Summary
  18. Урок 18.00:03:49
    3.1. Introduction
  19. Урок 19.00:04:18
    3.2. Introduction to the repository pattern
  20. Урок 20.00:08:36
    3.3. Creating the repository interface and implementation class
  21. Урок 21.00:03:33
    3.4. Implementing the repository methods
  22. Урок 22.00:09:07
    3.5. Using the repository in the controller
  23. Урок 23.00:11:46
    3.6. Seeding data
  24. Урок 24.00:05:04
    3.7. Getting the brands and types
  25. Урок 25.00:05:12
    3.8. Filtering the products by brand
  26. Урок 26.00:05:49
    3.9. Sorting the products
  27. Урок 27.00:02:02
    3.10. Summary
  28. Урок 28.00:07:24
    4.1. Introduction
  29. Урок 29.00:06:26
    4.2. Creating a generic repository
  30. Урок 30.00:03:47
    4.3. Implementing the generic repository methods
  31. Урок 31.00:05:24
    4.4. Using the generic repository in the controller
  32. Урок 32.00:07:47
    4.5. Introduction to the specification pattern
  33. Урок 33.00:08:00
    4.6. Setting up the specification classes
  34. Урок 34.00:05:16
    4.7. Updating the repository to use the specification
  35. Урок 35.00:08:51
    4.8. Using the specification pattern
  36. Урок 36.00:09:16
    4.9. Adding sorting to the specification
  37. Урок 37.00:12:30
    4.10. Using the debugger
  38. Урок 38.00:08:40
    4.11. Adding projection to the spec part 1
  39. Урок 39.00:05:39
    4.12. Adding projection to the spec part 2
  40. Урок 40.00:09:24
    4.13. Adding projection to the spec part 3
  41. Урок 41.00:02:26
    4.14. Summary
  42. Урок 42.00:04:11
    5.1. Introduction
  43. Урок 43.00:10:10
    5.2. Creating product spec parameters
  44. Урок 44.00:04:19
    5.3. Adding pagination part 1
  45. Урок 45.00:07:16
    5.4. Adding pagination part 2
  46. Урок 46.00:06:41
    5.5. Adding pagination part 3
  47. Урок 47.00:05:46
    5.6. Creating a Base API controller
  48. Урок 48.00:04:36
    5.7. Adding the search functionality
  49. Урок 49.00:00:45
    5.8. Summary
  50. Урок 50.00:05:47
    6.1. Introduction
  51. Урок 51.00:06:14
    6.2. Adding a test controller for error handling
  52. Урок 52.00:11:28
    6.3. Exception handling middleware
  53. Урок 53.00:07:59
    6.4. Validation error responses
  54. Урок 54.00:07:01
    6.5. Adding CORS support on the API
  55. Урок 55.00:00:39
    6.6. Summary
  56. Урок 56.00:06:30
    7.1. Introduction
  57. Урок 57.00:10:25
    7.2. Creating the angular project
  58. Урок 58.00:08:42
    7.3. Reviewing the Angular project files
  59. Урок 59.00:07:11
    7.4. Using HTTPS with the Angular project
  60. Урок 60.00:09:53
    7.5. Adding Angular Material and Tailwind CSS
  61. Урок 61.00:05:45
    7.6. Adding VS Code extensions for Angular and Tailwind
  62. Урок 62.00:02:17
    7.7. Summary
  63. Урок 63.00:02:31
    8.1. Introduction
  64. Урок 64.00:10:35
    8.2. Setting up the folder structure and creating components
  65. Урок 65.00:10:19
    8.3. Adding a Header component
  66. Урок 66.00:11:17
    8.4. Improving the header component
  67. Урок 67.00:13:59
    8.5. Making http requests in Angular
  68. Урок 68.00:05:45
    8.6. Introduction to observables
  69. Урок 69.00:05:39
    8.7. Introduction to TypeScript
  70. Урок 70.00:13:15
    8.8. Typescript demo
  71. Урок 71.00:06:41
    8.9. Using Types in our Project
  72. Урок 72.00:03:10
    8.10. Summary
  73. Урок 73.00:02:38
    9.1. Introduction
  74. Урок 74.00:06:43
    9.2. Introduction to Angular services
  75. Урок 75.00:07:27
    9.3. Designing the shop page
  76. Урок 76.00:08:52
    9.4. Adding a product item component
  77. Урок 77.00:04:35
    9.5. Getting the types and brands lists
  78. Урок 78.00:07:23
    9.6. Adding the filtering functionality using Material Dialog
  79. Урок 79.00:10:05
    9.7. Adding the filtering functionality using Material Dialog part 2
  80. Урок 80.00:10:19
    9.8. Hooking up the filters to the service
  81. Урок 81.00:09:06
    9.9. Adding the sorting functionality
  82. Урок 82.00:07:42
    9.10. Using a class to supply the parameters for the API request
  83. Урок 83.00:09:46
    9.11. Adding pagination to the client using Material
  84. Урок 84.00:11:56
    9.12. Adding the search functionality to the client
  85. Урок 85.00:01:47
    9.13. Summary
  86. Урок 86.00:01:29
    10.1. Introduction
  87. Урок 87.00:05:40
    10.2. Creating components and routes
  88. Урок 88.00:07:00
    10.3. Setting up the links in the app
  89. Урок 89.00:08:03
    10.4. Getting an individual product using Route params
  90. Урок 90.00:09:32
    10.5. Designing the product details page
  91. Урок 91.00:02:06
    10.6. Summary
  92. Урок 92.00:01:36
    11.1. Introduction
  93. Урок 93.00:09:34
    11.2. Creating a test error component
  94. Урок 94.00:03:02
    11.3. Creating a NotFound and Server Error component
  95. Урок 95.00:09:56
    11.4. Creating an HTTP Interceptor for handling API errors
  96. Урок 96.00:07:31
    11.5. Adding toast (snackbar) notifications
  97. Урок 97.00:06:11
    11.6. Handling validation errors from the API
  98. Урок 98.00:10:04
    11.7. Configuring the server error page
  99. Урок 99.00:04:54
    11.8. Configuring the Not found page
  100. Урок 100.00:05:19
    11.9. Adding an HTTP Interceptor for loading
  101. Урок 101.00:02:31
    11.10. Adding a progress bar to indicate loading
  102. Урок 102.00:02:55
    11.11. Making the header fixed to the top
  103. Урок 103.00:01:55
    11.12. Summary
  104. Урок 104.00:07:22
    12.1. Introduction
  105. Урок 105.00:06:23
    12.2. Creating a Redis instance to use in our app
  106. Урок 106.00:05:09
    12.3. Using Redis with .Net
  107. Урок 107.00:04:12
    12.4. Creating the Cart classes
  108. Урок 108.00:08:20
    12.5. Creating a Cart service
  109. Урок 109.00:05:14
    12.6. Creating the Cart controller
  110. Урок 110.00:06:15
    12.7. Testing the Cart in Postman
  111. Урок 111.00:00:58
    12.8. Summary
  112. Урок 112.00:01:51
    13.1. Introduction
  113. Урок 113.00:06:45
    13.2. Creating the cart components
  114. Урок 114.00:05:50
    13.3. Introduction to Angular Signals
  115. Урок 115.00:07:24
    13.4. Adding the Cart service methods
  116. Урок 116.00:09:59
    13.5. Adding an item to the cart
  117. Урок 117.00:05:53
    13.6. Using the add item functionality in the product item
  118. Урок 118.00:13:13
    13.7. Persisting the cart
  119. Урок 119.00:04:40
    13.8. Updating the nav bar with the cart item count
  120. Урок 120.00:13:27
    13.9. Styling the cart
  121. Урок 121.00:06:38
    13.10. Creating the order summary component
  122. Урок 122.00:05:13
    13.11. Creating the order summary component part 2
  123. Урок 123.00:06:01
    13.12. Creating the order totals
  124. Урок 124.00:05:25
    13.13. Adding additional functions to the service
  125. Урок 125.00:06:12
    13.14. Adding these functions to the cart
  126. Урок 126.00:11:11
    13.15. Adding the update cart functionality to the product details
  127. Урок 127.00:03:20
    13.16. Creating the checkout components
  128. Урок 128.00:00:36
    13.17. Summary
  129. Урок 129.00:07:21
    14.1. Introduction
  130. Урок 130.00:08:45
    14.2. Setting up identity
  131. Урок 131.00:06:35
    14.3. Updating the DB and testing the endpoints
  132. Урок 132.00:09:49
    14.4. Adding a custom register endpoint
  133. Урок 133.00:05:16
    14.5. Testing the authentication
  134. Урок 134.00:10:16
    14.6. Creating additional user endpoints
  135. Урок 135.00:08:16
    14.7. Creating extension methods
  136. Урок 136.00:04:47
    14.8. Validation errors
  137. Урок 137.00:05:14
    14.9. Adding a user address class
  138. Урок 138.00:11:35
    14.10. Adding an endpoint to update the user address
  139. Урок 139.00:04:45
    14.11. Updating the user address part 2
  140. Урок 140.00:01:33
    14.12. Summary
  141. Урок 141.00:01:20
    15.1. Introduction
  142. Урок 142.00:07:23
    15.2. Creating the account components
  143. Урок 143.00:03:49
    15.3. Introduction to Angular forms
  144. Урок 144.00:10:45
    15.4. Creating the login form
  145. Урок 145.00:04:06
    15.5. Updating the header component
  146. Урок 146.00:05:02
    15.6. Persisting the login
  147. Урок 147.00:03:50
    15.7. Adding an auth interceptor
  148. Урок 148.00:05:13
    15.8. Adding an Angular Material Menu
  149. Урок 149.00:07:28
    15.9. Adding the register form
  150. Урок 150.00:03:37
    15.10. Form validation part 1
  151. Урок 151.00:05:14
    15.11. Form validation part 2
  152. Урок 152.00:11:05
    15.12. Creating a re-usable text input
  153. Урок 153.00:09:44
    15.13. Creating an auth guard
  154. Урок 154.00:07:40
    15.14. Updating the auth guard to use observables
  155. Урок 155.00:01:53
    15.15. Challenge - empty cart guard
  156. Урок 156.00:01:53
    15.16. Challenge solution
  157. Урок 157.00:07:03
    15.17. Adding an empty state component
  158. Урок 158.00:02:27
    15.18. Summary
  159. Урок 159.00:08:33
    16.1. Introduction
  160. Урок 160.00:06:52
    16.2. Creating the delivery methods in the API
  161. Урок 161.00:08:37
    16.3. Setting up Stripe
  162. Урок 162.00:12:15
    16.4. Implementing the payment intent
  163. Урок 163.00:10:49
    16.5. Creating a payment controller
  164. Урок 164.00:07:56
    16.6. Checkout page layout
  165. Урок 165.00:15:31
    16.7. Adding client side Stripe
  166. Урок 166.00:09:15
    16.8. Creating the address element
  167. Урок 167.00:09:22
    16.9. Populating the address in the address form
  168. Урок 168.00:14:41
    16.10. Save the address as default address
  169. Урок 169.00:06:31
    16.11. Creating the delivery component part 1
  170. Урок 170.00:05:25
    16.12. Creating the delivery component part 2
  171. Урок 171.00:09:47
    16.13. Creating the delivery component part 3
  172. Урок 172.00:10:49
    16.14. Creating the payment element
  173. Урок 173.00:07:58
    16.15. Creating the review component
  174. Урок 174.00:05:30
    16.16. Stripe address auto complete functionality
  175. Урок 175.00:11:19
    16.17. Validating step completion part 1
  176. Урок 176.00:05:17
    16.18. Validating step completion part 2
  177. Урок 177.00:08:15
    16.19. Creating a Stripe confirmation token
  178. Урок 178.00:09:01
    16.20. Updating the review component with the token information
  179. Урок 179.00:11:06
    16.21. Confirming the payment
  180. Урок 180.00:08:50
    16.22. Loading and error notifications
  181. Урок 181.00:07:06
    16.23. Checkout success page
  182. Урок 182.00:01:47
    16.24. Summary
  183. Урок 183.00:02:02
    17.1. Introduction
  184. Урок 184.00:07:31
    17.2. Creating the order aggregate part 1
  185. Урок 185.00:04:08
    17.3. Creating the order aggregate part 2
  186. Урок 186.00:09:40
    17.4. Configuring the order entities
  187. Урок 187.00:05:28
    17.5. Introducing the Unit of work
  188. Урок 188.00:08:29
    17.6. Implementing the unit of work
  189. Урок 189.00:06:34
    17.7. Using the unit of work
  190. Урок 190.00:11:07
    17.8. Creating the order controller
  191. Урок 191.00:10:55
    17.9. Debugging the order creation
  192. Урок 192.00:07:11
    17.10. Adding the get order methods
  193. Урок 193.00:07:25
    17.11. Updating the spec for eager loading
  194. Урок 194.00:06:08
    17.12. Updating the controller to eagerly load in the get methods
  195. Урок 195.00:13:03
    17.13. Shaping the data to return
  196. Урок 196.00:01:05
    17.14. Summary
  197. Урок 197.00:04:20
    18.1. Introduction
  198. Урок 198.00:08:06
    18.2. Creating the order components
  199. Урок 199.00:13:09
    18.3. Submitting the order
  200. Урок 200.00:07:08
    18.4. Designing the order component to display orders
  201. Урок 201.00:12:43
    18.5. Creating the order detailed page
  202. Урок 202.00:10:24
    18.6. Updating the address pipe with type guards
  203. Урок 203.00:14:06
    18.7. Adding a webhook endpoint in the payments controller
  204. Урок 204.00:09:40
    18.8. Testing the WebHook using the Stripe CLI
  205. Урок 205.00:11:03
    18.9. Adding SignalR to the API
  206. Урок 206.00:11:48
    18.10. Adding SignalR to the client
  207. Урок 207.00:11:11
    18.11. Updating the checkout success page
  208. Урок 208.00:06:46
    18.12. Adding a guard to the checkout success
  209. Урок 209.00:05:42
    18.13. Adding the home page component style
  210. Урок 210.00:01:32
    18.14. Summary
  211. Урок 211.00:05:18
    19.1. Introduction
  212. Урок 212.00:09:28
    19.2. Preparing the client app for publishing
  213. Урок 213.00:11:43
    19.3. Preparing the .Net app for publishing
  214. Урок 214.00:06:42
    19.4. Setting up a cloud Redis server
  215. Урок 215.00:08:49
    19.5. Setting up an azure account
  216. Урок 216.00:07:45
    19.6. Configuring the web app on Azure
  217. Урок 217.00:08:32
    19.7. Creating a Azure DB
  218. Урок 218.00:07:22
    19.8. Publishing the app to Azure
  219. Урок 219.00:14:19
    19.9. Adding Continuous integration
  220. Урок 220.00:08:56
    19.10. Troubleshooting Azure issues
  221. Урок 221.00:11:38
    19.11. Making the empty state component reusable
  222. Урок 222.00:08:59
    19.12. Updating CI to also build the angular app
  223. Урок 223.00:02:03
    19.13. Summary
  224. Урок 224.00:13:14
    20.1. Challenge - coupon challenge
  225. Урок 225.00:01:22
    21.1. Introduction
  226. Урок 226.00:10:34
    21.2. Adding roles to the app
  227. Урок 227.00:05:29
    21.3. Using the roles
  228. Урок 228.00:11:13
    21.4. Using the roles
  229. Урок 229.00:06:33
    21.5. Updating the Base controller CreatePagedResult method
  230. Урок 230.00:08:07
    21.6. Adding refund functionality
  231. Урок 231.00:05:39
    21.7. Creating the admin components
  232. Урок 232.00:08:15
    21.8. Creating an angular directive
  233. Урок 233.00:03:55
    21.9. Creating an admin route guard
  234. Урок 234.00:05:29
    21.10. Adding the admin service methods
  235. Урок 235.00:07:37
    21.11. Adding the admin component code
  236. Урок 236.00:08:30
    21.12. Designing the admin component template
  237. Урок 237.00:12:09
    21.13. Populating the orders table
  238. Урок 238.00:08:14
    21.14. Adding the order table action button functionality
  239. Урок 239.00:08:53
    21.15. Adding a confirmation prompt
  240. Урок 240.00:01:32
    21.16. Summary
  241. Урок 241.00:04:24
    22.1. Introduction
  242. Урок 242.00:08:42
    22.2. Setting up caching on the API
  243. Урок 243.00:10:40
    22.3. Creating an attribute
  244. Урок 244.00:05:28
    22.4. Testing the caching
  245. Урок 245.00:09:48
    22.5. Invalidating the cache
  246. Урок 246.00:11:00
    22.6. Lazy loading in angular
  247. Урок 247.00:06:04
    22.7. End of course summary
  248. Урок 248.00:07:36
    23.1. Updating the .Net project to .Net 9
  249. Урок 249.00:18:08
    23.2. Updating the Angular project to Angular 20
  250. Урок 250.00:20:00
    23.3. Updating to Tailwind 4 and Angular Material 20