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