Commit Graph

117 Commits

Author SHA1 Message Date
Maxime Delporte
0262be65ef Sending background emails.
All checks were successful
Deploy Greenlight API / deploy (push) Successful in 2m54s
2025-12-04 14:12:55 +01:00
Maxime Delporte
8954318e40 Adding godotenv library to use our .env file for the smtp configuration. Updating main.go adding our logger first, load our .env file, retrieve values to initialize the mail application's struct. Updating registerUserHandler sending the user_welcome.tmpl email.
Some checks failed
Deploy Greenlight API / deploy (push) Failing after 15m11s
2025-11-30 17:22:32 +01:00
Maxime Delporte
68e606976f Adding go-mail package instead of using internal go package. Defining a mailer package to send our emails. 2025-11-30 17:02:48 +01:00
Maxime Delporte
72503a55ff Creating registerUserHandler and registering the endpoint in our routes.go
All checks were successful
Deploy Greenlight API / deploy (push) Successful in 1m34s
2025-11-25 15:54:43 +01:00
Maxime Delporte
2bd0ae90bc Adding Insert(), GetByEmail(), Update() UserModel's methods.
Some checks failed
Deploy Greenlight API / deploy (push) Failing after 51s
2025-11-25 13:44:54 +01:00
Maxime Delporte
5a4b7bceb0 Adding crypto package to hash user's password on our User Model. Create our User Model with some helpers. Creating migration for our users table.
Some checks failed
Deploy Greenlight API / deploy (push) Failing after 49s
2025-11-25 11:35:24 +01:00
Maxime Delporte
6b4056e0f5 Handling graceful shutdown.
All checks were successful
Deploy Greenlight API / deploy (push) Successful in 1m21s
2025-11-23 16:59:02 +01:00
Maxime Delporte
b04086f9da Adding goroutine to intercept SIGINT and SIGTERM signals to properly shutdown the app. 2025-11-23 16:00:58 +01:00
Maxime Delporte
78d9edf62b Moving starting server part into new server.go file. Using the new serve() function from this file into main.go 2025-11-23 15:54:32 +01:00
Maxime Delporte
f88edf082e Adding 'Sending Shutdown Signals' section.
All checks were successful
Deploy Greenlight API / deploy (push) Successful in 1m2s
2025-11-19 14:39:15 +01:00
Maxime Delporte
83bb7294db Configuring the Rate Limiters. 2025-11-18 20:10:55 +01:00
Maxime Delporte
7de9ef89b7 Adding 'Addictional Information for Rate Limiting' sub section. 2025-11-16 19:35:28 +01:00
Maxime Delporte
116cdb099f Updating rateLimit middleware with IP-based Rate Limiting 2025-11-16 10:48:55 +01:00
Maxime Delporte
5517aa29f9 Adding 'IP-based Rate Limiting' sub section. 2025-11-16 10:37:09 +01:00
Maxime Delporte
8b0c51123f Enforcing a global rate limit. 2025-11-16 10:36:36 +01:00
Maxime Delporte
e93375d441 Returning pagination metadata.
All checks were successful
Deploy Greenlight API / deploy (push) Successful in 2m48s
2025-11-15 16:51:13 +01:00
Maxime Delporte
28b25fed6e Returning empty array instead of null if we don't have any movies to return. 2025-11-15 16:37:08 +01:00
Maxime Delporte
6fc5e725e6 Paginating Lists 2025-11-15 16:34:40 +01:00
Maxime Delporte
fc2e401f6f Adding sorting lists.
All checks were successful
Deploy Greenlight API / deploy (push) Successful in 58s
2025-11-14 17:31:29 +01:00
Maxime Delporte
6b3a6ee4f5 Adding indexes migration. 2025-11-14 16:46:21 +01:00
Maxime Delporte
a17a49e814 Adding 'Indexes' sub section.
All checks were successful
Deploy Greenlight API / deploy (push) Successful in 1m25s
2025-11-13 18:57:24 +01:00
Maxime Delporte
0d1062d995 Adding full-text search. 2025-11-13 18:52:59 +01:00
Maxime Delporte
1b71a1a8ad Creating GetAll MovieModel method to retrieve all movies. Updating the listMovieHandler to use the new GetAll MovieModel's method.
All checks were successful
Deploy Greenlight API / deploy (push) Successful in 59s
2025-11-13 15:25:00 +01:00
Maxime Delporte
95d9de60b4 Adding ValidateFilters method in filters.go and use it in our listMoviesHandler 2025-11-12 11:09:57 +01:00
Maxime Delporte
bf7c53e565 Creating Filters struct and using it inside our listMoviesHandler 2025-11-11 10:47:25 +01:00
Maxime Delporte
041d302a79 Creating listMoviesHandler and adding /v1/movies GET endpoint to use it. 2025-11-11 10:43:34 +01:00
Maxime Delporte
b77d3adb55 Adding readString, readInt and readCSV helper functions 2025-11-11 10:29:15 +01:00
Maxime Delporte
0ba997475b Updating database model with 3-second timeout deadline for all our operations.
All checks were successful
Deploy Greenlight API / deploy (push) Successful in 58s
2025-11-10 17:00:06 +01:00
Maxime Delporte
5413312875 Adding a query timeout. 2025-11-10 16:45:42 +01:00
Maxime Delporte
fd3bca1226 Adding a check on the X-Expected-Version header field.
All checks were successful
Deploy Greenlight API / deploy (push) Successful in 1m0s
2025-11-10 10:21:14 +01:00
Maxime Delporte
f8f78c3eec Adding concurrency control in our updateMovieHandler and documenting it.
All checks were successful
Deploy Greenlight API / deploy (push) Successful in 57s
2025-11-08 10:41:44 +01:00
Maxime Delporte
b76496e096 Updating updateMovieHandler to be able to update only some fields (patch instead of put). Update routes with the correct verb.
All checks were successful
Deploy Greenlight API / deploy (push) Successful in 1m20s
2025-11-07 11:57:04 +01:00
Maxime Delporte
1270a3bda6 Updating MovieModel's Delete method from internal/data/movies.go file. Create the deleteMovieHandler function inside cmd/api/movies.go. Adding the route into routes.go to delete a movie. 2025-11-07 11:37:19 +01:00
Maxime Delporte
69651c58b7 Updating MovieModel's method from internal/data/movies.go file. Create the updateMovieHandler function inside cmd/api/movies.go. Adding the route into routes.go to update a movie. 2025-11-07 11:27:45 +01:00
Maxime Delporte
490c3174ca Adding 'Why not use an unsigned integer for the movie ID?' sub-section. 2025-11-07 11:06:35 +01:00
Maxime Delporte
0824a127b9 Updating internal/data/movies.go to Get a movie from the database. Updating cmd/api/movies.go showMovieHandler method to fetch a movie from a request (using the MovieModel's Get method). 2025-11-07 10:58:58 +01:00
Maxime Delporte
0653a46101 Adding ' notation' and 'Executing multiple statements' sub-sections. 2025-11-07 10:47:15 +01:00
Maxime Delporte
19a844ea2e Updating Insert MovieModel's method inserting a new record in the movies table. Updating createMovieHandler to use Insert MovieModel's method.
All checks were successful
Deploy Greenlight API / deploy (push) Successful in 1m0s
2025-11-06 17:10:33 +01:00
Maxime Delporte
1a658d3063 Updating movies.go with MovieModel: this struct is the gateway between our app and the database. Adding CRUD methods alongside for the Movie object. Creating models.go: this file holds a Models struct wrapping all of our Models. This way, we are able to use in our application struct in our main.go. 2025-11-06 10:41:12 +01:00
Maxime Delporte
0874a6aac4 Adding 'Remote migration files' sub-section. 2025-11-06 10:17:12 +01:00
Maxime Delporte
6997490335 Adding 'Fixing errors in SQL migrations' sub-section. 2025-11-06 10:14:02 +01:00
Maxime Delporte
ece88f7e71 Creating 'Migrating to a specific version' and 'Executing down migrations' sub sections.
All checks were successful
Deploy Greenlight API / deploy (push) Successful in 1m0s
2025-11-03 17:57:51 +01:00
Maxime Delporte
4b42c5edfc Updating 'Executing the migrations' sub-section.
All checks were successful
Deploy Greenlight API / deploy (push) Successful in 1m16s
2025-11-03 17:39:46 +01:00
Maxime Delporte
a5025cd98e Updating CI.
All checks were successful
Deploy Greenlight API / deploy (push) Successful in 55s
2025-10-31 12:12:57 +01:00
Maxime Delporte
72508f9bdb Fix typo.
All checks were successful
Deploy Greenlight API / deploy (push) Successful in 56s
2025-10-31 12:07:27 +01:00
Maxime Delporte
10ea699625 Adding 'Executing the migrations' subsection into README.md. Adding log messages on deploy.yml.
All checks were successful
Deploy Greenlight API / deploy (push) Successful in 55s
2025-10-31 12:05:53 +01:00
Maxime Delporte
80800b214c Updating CI.
All checks were successful
Deploy Greenlight API / deploy (push) Successful in 54s
2025-10-31 10:49:50 +01:00
Maxime Delporte
ab17b9f8f1 Updating CI.
Some checks failed
Deploy Greenlight API / deploy (push) Failing after 41s
2025-10-31 10:48:34 +01:00
Maxime Delporte
8f047f2b4a Updating CI.
Some checks failed
Deploy Greenlight API / deploy (push) Failing after 40s
2025-10-31 10:46:18 +01:00
Maxime Delporte
17a69b32be Updating CI.
Some checks failed
Deploy Greenlight API / deploy (push) Failing after 38s
2025-10-31 10:42:17 +01:00