![]() ![]() ![]() OK so that’s the definition of the new users table. So it should be year 1, month 1, date 1, at 0 hour, 0 minute, 0 second, and the timezone is UTC: ' 00:00:00Z'. As we’re using golang, I’m gonna use a zero value timestamp of Go here. If the password has never been changed, we will just use a default value which is a long time in the past. The reason I want every field to be not null is because it makes our developer’s life much easier since we don’t have to deal with null pointers. Its type should be timestamp with timezone, and should also be not null. So we will need a field: password_changed_at to know when was the last time user changed their password. Moreover, for security reason, it’s often a good idea to ask users to change their password frequently, like once every month for instance. This field is not null, and it has a default value of now(), so Postgres will automatically fill in the current timestamp when the new user record is inserted. Then just like other tables, we will have a created_at field to store the time this user is created. And note that it must be unique and not null, since we don’t want to have 2 users with the same email. ![]() So the type of this field should also be varchar. We will use it later to communicate with the users, for example, when they forget their password and want to reset it. One more important field the users table should have is email. OK, the next field will store the full_name of the user, so it is also of varchar type, and should not be null. 3 How to write & run database migration in Golang 4 Generate CRUD Golang code from SQL | Compare db/sql, gorm, sqlx, sqlc 5 Write Go unit tests for db CRUD with random data 6 A clean way to implement database transaction in Golang 7 DB transaction lock & How to handle deadlock 8 How to avoid deadlock in DB transaction? Queries order matter! 9 Deeply understand Isolation levels and Read phenomena in MySQL & PostgreSQL 10 How to setup Github Actions for Go + Postgres to run automated tests 11 Implement RESTful HTTP API in Go using Gin 12 Load config from file & environment variables in Golang with Viper 13 Mock DB for testing HTTP API in Go and achieve 100% coverage 14 Implement transfer money API with a custom params validator in Go 15 Add users table with unique & foreign key constraints in PostgreSQL 16 How to handle DB errors in Golang correctly 17 How to securely store passwords? 18 How to write stronger unit tests with a custom go-mock matcher 19 Why PASETO is better than JWT for token-based authentication? 20 How to create and verify JWT & PASETO token in Golang 21 Implement login user API that returns PASETO or JWT access token in GoĮnter fullscreen mode Exit fullscreen mode 1 Design DB schema and generate SQL code with dbdiagram.io 2 Install & use Docker + Postgres + TablePlus to create DB schema. ![]()
0 Comments
Leave a Reply. |
AuthorWrite something about yourself. No need to be fancy, just an overview. ArchivesCategories |