{"id":21034515,"url":"https://github.com/budougumi0617/go_todo_app","last_synced_at":"2025-04-09T13:06:04.432Z","repository":{"id":47540000,"uuid":"490096715","full_name":"budougumi0617/go_todo_app","owner":"budougumi0617","description":"書籍「詳解Go言語Webアプリケーション開発」のサンプルコードリポジトリです。","archived":false,"fork":false,"pushed_at":"2024-09-01T07:49:42.000Z","size":154,"stargazers_count":206,"open_issues_count":0,"forks_count":38,"subscribers_count":2,"default_branch":"main","last_synced_at":"2025-04-02T11:06:54.967Z","etag":null,"topics":["api","book","go","jwt"],"latest_commit_sha":null,"homepage":"https://www.c-r.com/book/detail/1462","language":"Go","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/budougumi0617.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2022-05-09T01:24:44.000Z","updated_at":"2025-03-25T10:44:48.000Z","dependencies_parsed_at":"2024-06-18T22:41:54.049Z","dependency_job_id":"0a222f18-82d9-4db6-96b7-4784073d0039","html_url":"https://github.com/budougumi0617/go_todo_app","commit_stats":null,"previous_names":[],"tags_count":22,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/budougumi0617%2Fgo_todo_app","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/budougumi0617%2Fgo_todo_app/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/budougumi0617%2Fgo_todo_app/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/budougumi0617%2Fgo_todo_app/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/budougumi0617","download_url":"https://codeload.github.com/budougumi0617/go_todo_app/tar.gz/refs/heads/main","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":248045231,"owners_count":21038553,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["api","book","go","jwt"],"created_at":"2024-11-19T13:07:26.673Z","updated_at":"2025-04-09T13:06:04.409Z","avatar_url":"https://github.com/budougumi0617.png","language":"Go","funding_links":[],"categories":[],"sub_categories":[],"readme":"# go_todo_app\nこのリポジトリは書籍「詳解Go言語Webアプリケーション開発」のサンプルコードリポジトリです。\n\n\n| 項目   | データ                                                              |\n|------|------------------------------------------------------------------|\n| 書籍名  | 詳解Go言語Webアプリケーション開発                                              |\n| URL  | https://www.c-r.com/book/detail/1462                             |\n| ISBN | 978-4-86354-372-0                                                |\n| 正誤表  | https://github.com/budougumi0617/go_todo_app/blob/main/errata.md |\n\n## 作成するアプリについて\nこのリポジトリで作成するWebアプリケーションは認証付きのTODOタスクを管理するAPIサーバーです。\n\n最終的には次のエンドポイントを実装します。\n\n| HTTPメソッド | パス         | 概要                       |\n|----------|------------|--------------------------|\n| POST     | `/regiser` | 新しいユーザーを登録する             |\n| POST     | `/login`   | 登録済みユーザー情報でアクセストークンを取得する |\n| POST     | `/tasks`   | アクセストークンを使ってタスクを登録する     |\n| GET      | `/tasks`   | アクセストークンを使ってタスクを一覧する     |\n| GET      | `/admin`   | 管理者権限のユーザーのみがアクセスできる     |\n\n`Docker Compose`を利用してAPIサーバー、MySQL、Redisを起動します。    \n主に実行するであろうコマンドは `Makefile` に事前定義されています。\n\n```bash\n$ make\nbuild                Build docker image to deploy\nbuild-local          Build docker image to local development\nup                   Do docker compose up with hot reload\ndown                 Do docker compose down\nlogs                 Tail docker compose logs\nps                   Check container status\ntest                 Execute tests\ndry-migrate          Try migration\nmigrate              Execute migration\ngenerate             Generate codes\nhelp                 Show options\n```\n\n### 動作確認方法\nこのリポジトリのコードがローカルで実行できるか確認する手順です。\n\n#### サーバを起動する\n事前にDockerイメージを作成しておきます。\n```bash\n$ make build-local\n```\nDocker Composeを使って各サービスを起動します。\n```bash\n$ make up\n```\nMySQLにマイグレーションを実行します。\n```bash\n$ make migrate\n```\nユーザーを作成します。\n```bash\n$ curl -X POST localhost:18000/register -d '{\"name\": \"budou\", \"password\":\"test\", \"role\":\"admin\"}'\n{\"id\":37}\n```\nユーザーの認証情報を使っていくつかタスクを登録します。\n```bash\n$ curl -i -XPOST -H \"Authorization: Bearer $(curl -XPOST localhost:18000/login -d '{\"user_name\": \"budou\", \"password\":\"test\"}' | jq \".access_token\" | sed \"s/\\\"//g\")\" localhost:18000/tasks -d @./handler/testdata/add_task/ok_req.json.golden\n  % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current\n                                 Dload  Upload   Total   Spent    Left  Speed\n100  1023  100   982  100    41   7756    323 --:--:-- --:--:-- --:--:--  8525\nHTTP/1.1 200 OK\nContent-Type: application/json; charset=utf-8\nDate: Wed, 20 Jul 2022 17:21:03 GMT\nContent-Length: 9\n\n{\"id\":76}%\n\n$ curl -XPOST -H \"Authorization: Bearer $(curl -XPOST localhost:18000/login -d '{\"user_name\": \"budou\", \"password\":\"test\"}' | jq \".access_token\" | sed \"s/\\\"//g\")\" localhost:18000/tasks -d @./handler/testdata/add_task/ok_req.json.golden\n  % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current\n                                 Dload  Upload   Total   Spent    Left  Speed\n100  1023  100   982  100    41   8634    360 --:--:-- --:--:-- --:--:--  9560\n{\"id\":77}%\n```\nタスクを表示して、登録済みのタスクが表示されれば期待通り動いています。\n```bash\n$ curl -XGET -H \"Authorization: Bearer $(curl -XPOST localhost:18000/login -d '{\"user_name\": \"budou\", \"password\":\"test\"}' | jq \".access_token\" | sed \"s/\\\"//g\")\" localhost:18000/tasks | jq\n  % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current\n                                 Dload  Upload   Total   Spent    Left  Speed\n100  1023  100   982  100    41   8158    340 --:--:-- --:--:-- --:--:--  9133\n  % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current\n                                 Dload  Upload   Total   Spent    Left  Speed\n100   113  100   113    0     0  13450      0 --:--:-- --:--:-- --:--:-- 28250\n[\n  {\n    \"id\": 76,\n    \"title\": \"Implement a handler\",\n    \"status\": \"todo\"\n  },\n  {\n    \"id\": 77,\n    \"title\": \"Implement a handler\",\n    \"status\": \"todo\"\n  }\n]\n```\n\n各エンドポイントの仕様の詳細は書籍を参照ください。\n\n## リポジトリの構成について\n書籍では`CHAPTER 13`からハンズオン形式でAPIサーバを実装します。  \n本リポジトリのルートディレクトリにあるサンプルコードはハンズオンを最後まで実施した状態のコードです。  \nなお、指摘や修正があった場合はコードも修正されます。\n\n`_chapterN`で始まるディレクトリとその中にある`sectionN`ディレクトリは該当CHAPTER/SECTION完了時のコード状態を保存しています。  \n紙面上の断片的なコードで理解が難しい場合はご利用ください。既知の紙面上のコードの不備も修正済みです。\n\n## 書籍・コードの内容について\n- コードに対するご指摘はIssueを作成してください。\n  - https://github.com/budougumi0617/go_todo_app/issues\n- 書籍内容に対するご指摘・ご質問などはDiscussionsで受け付けています。issueを作成するかDiscussionを作成するか迷った際はDiscussionの作成をお願いします。\n  - https://github.com/budougumi0617/go_todo_app/discussions\n- 正誤表もこのリポジトリにあります。\n  - [https://github.com/budougumi0617/go_todo_app/blob/main/errata.md](./errata.md)","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fbudougumi0617%2Fgo_todo_app","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fbudougumi0617%2Fgo_todo_app","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fbudougumi0617%2Fgo_todo_app/lists"}