2.2 Assignment 2
Your second assignment requires that you have read and understand Data modeling.
Overview
In this assignment, you will implement a new set of server endpoints and interact with data models that you design yourself. You will learn how to map from one data model to another data model, as well as implement a variety of SQL queries that persist the information in a SQLite database.
1 User endpoints
Your first task is to add the concept of a User
entity to the Issue
Tracker
application. You will need to implement several HTTP endpoints
that allow a caller to create, get, update, and delete users (i.e. CRUD
endpoints). Specifically, the following RESTful semantics should be used:
- POST /users - CreateUser
- GET /users/<$uuid> - GetUser
- PUT /users/<$uuid> - UpdateUser
- DELETE /users/<$uuid> - DeleteUser
The best way to get started on this task is by reading and understanding
how the /issues
endpoints function. The beginning, or edge, of this
implementation exists in the router
package, so please give it a look
before getting started.
2 SQL Migration
Your second task builds upon 1 User endpoints, but
requires that you adapt your implementation to use a SQL migration file
(if it doesn't already). You'll notice that the issues
table schema is
implemented in data/sql/migrations/001_initial_schema.{down,up}.sql
. If
you added the definition for your users
table there, split it into a
separate set of data/sql/migrations/002_users.{down,up}.sql
files.
Now that the migration is split across multiple files (in chronological order),
we'll need to add an integration test to the migration
package. Specifically,
add a test to internal/store/sqlite/migrate/migrate_test.go
that verifies
the migration between version 001
and version 002
is successful.
You might need to adapt the
Migrate
function signature in order to run it from a test environment. You are free to change anything you need to do so.
Submitting
Notify your mentor that you have created the pull requests in the issue-tracker
repository. Your mentor will review your code and assign a grade before your next
weekly check-in.