Skip to content

hryze/kakeibo-app-api

Repository files navigation

Tukecholl

自身の転職活動用ポートフォリオとして制作した家計簿アプリです。
Go, React, Kubernetesを用いたマイクロサービスアーキテクチャです。

WebサイトURL

https://www.shakepiper.com

※ 火・木曜日11:00 ~ 17:00稼働
※ ログインページのゲストユーザーログインより、「 郷ひろみ 」として簡単ログインできます。

制作背景

現在友人と4人でシェアハウスしており、家賃、食費、日用品等、全員で費用を出し合って生活しています。

そんな中シェアハウス内での支出を管理したいという事で家計簿アプリを探しましたが、個人に特化した家計簿アプリがほとんどで、グループ機能があったとしても私達の要件を満たせるようなアプリが見つかりませんでした。

このような経緯から、家計簿アプリの定番機能である収支管理、予算管理等は実装した上で、グループ内での月末精算、買い物予定リスト、TODOリスト、料理当番や洗濯当番などのシフト管理等、シェアハウスに特化した機能があると便利だと思い制作しました。

また、シェアハウスしている方以外にも、家族や夫婦、カップル等、同じような不便を感じられてる方々に使用して頂けるサービスを作りたいと考えました。

開発形態

開発者

  • 平 侑祐
  • 安樂 亮佑(共同開発者)
  • 古澤 宏弥(共同開発者)
  • 伊藤 稜悟(共同開発者)

制作物 / 担当

開発手法

  • アジャイル開発(スクラム)

コミュニケーションツール

  • Slack
  • Trello
  • Googleスプレッドシート

使用技術

Frontend

Language

  • TypeScript v4.2.2
  • Sass

Library/Framework

  • React v17.0.1
  • Redux v4.0.5

Backend

Language

  • Go v1.16.3

Infrastructure

Cloud Service

  • AWS

Infrastructure as Code

  • Terraform v0.14.7
    • VPC
    • Subnet
    • Route Table
    • Internet Gateway
    • NAT Gateway
    • Security Group
    • EKS
    • ECR
    • S3
    • CloudFront
    • ELB
    • EC2
    • Route53
    • ACM
    • RDS(MySQL v8.0.20)
    • ElastiCache(Redis v5.0.6)
    • Secrets Manager
    • IAM

Container

  • docker v20.10.2
  • docker-compose v1.27.4(開発環境Database用)

Container Orchestration

  • Kubernetes v1.18
    • api × 3
    • argocd
    • aws-load-balancer-controller
    • cert-manager
    • cluster-autoscaler
    • external-dns
    • external-secrets
    • initialize-rds-job
    • metrics-server
  • Kustomize v4.0.4

CI/CD

  • GitHub Actions
  • ArgoCD

インフラ構成図

infra

CI/CD pipeline

ci-cd

ER図

kakeibo-er

機能一覧

【 個人利用機能 】

ユーザー機能

  • ユーザー新規登録
  • ユーザーログイン
  • ユーザーログアウト

家計簿機能

  • 月別家計簿取引一覧取得
  • 家計簿取引最終更新10件取得
  • 家計簿取引追加
  • 家計簿取引更新
  • 家計簿取引削除
  • 家計簿取引検索

家計簿予算機能

  • 標準予算取得
  • 標準予算更新
  • 月別カスタム予算取得
  • 月別カスタム予算追加
  • 月別カスタム予算更新
  • 月別カスタム予算削除
  • 年別予算一覧取得

カテゴリー機能

  • カテゴリー一覧取得
  • カスタムカテゴリー追加
  • カスタムカテゴリー更新
  • カスタムカテゴリー削除

todo機能

  • 日別実施予定todo, 締切予定todo一覧取得
  • 月別実施予定todo, 締切予定todo一覧取得
  • 期限切れtodo一覧取得
  • todo追加
  • todo更新
  • todo削除
  • todo検索

買い物リスト機能

  • 定期買い物リスト, 日別買い物リスト取得
  • 定期買い物リスト, 月別買い物リスト取得
  • 期限切れ買い物リスト取得
  • 買い物リスト更新, 家計簿トランザクション自動追加/自動削除
  • 買い物リスト削除
  • 定期買い物リスト追加
  • 定期買い物リスト更新
  • 定期買い物リスト削除

【 グループ利用機能 】

グループ機能

  • 承認グループ, 未承認グループ一覧取得
  • グループ作成
  • グループ名更新
  • グループ招待
  • グループ招待承認
  • グループ招待拒否
  • グループ退会

グループ家計簿機能

  • 月別家計簿取引一覧取得
  • 家計簿取引最終更新10件取得
  • 家計簿取引追加
  • 家計簿取引更新
  • 家計簿取引削除
  • 家計簿取引検索
  • 年別家計簿取引会計状況一覧取得
  • 月別家計簿取引自動会計
  • 月別家計簿取引会計データ取得
  • 月別家計簿取引会計データ更新
  • 月別家計簿取引会計データ削除

グループ予算機能

  • 標準予算取得
  • 標準予算更新
  • 月別カスタム予算取得
  • 月別カスタム予算追加
  • 月別カスタム予算更新
  • 月別カスタム予算削除
  • 年別予算一覧取得

グループカテゴリー機能

  • カテゴリー一覧取得
  • カスタムカテゴリー追加
  • カスタムカテゴリー更新
  • カスタムカテゴリー削除

グループtodo機能

  • 日別実施予定todo, 締切予定todo一覧取得
  • 月別実施予定todo, 締切予定todo一覧取得
  • 期限切れtodo一覧取得
  • todo追加
  • todo更新
  • todo削除
  • todo検索

グループ買い物リスト機能

  • 定期買い物リスト, 日別買い物リスト取得
  • 定期買い物リスト, 月別買い物リスト取得
  • 期限切れ買い物リスト取得
  • 買い物リスト更新, 家計簿トランザクション自動追加/自動削除
  • 買い物リスト削除
  • 定期買い物リスト追加
  • 定期買い物リスト更新
  • 定期買い物リスト削除

グループシフト管理機能

  • ユーザー別シフト一覧取得
  • シフト機能用ユーザー追加
  • シフト機能用ユーザー削除
  • シフト機能用タスク一覧取得
  • シフト機能用タスク追加
  • シフト機能用タスク更新
  • シフト機能用タスク削除

課題と今後実装したい機能

  • DDDを適用。

  • user-rest-service

  • account-rest-service

  • todo-rest-service

  • コードの品質保証ができていない。

  • バリデーション処理や複雑な処理をしている部分等を優先にテストを充実させていく。

  • kubernetesにて複数環境に対応したmanifest管理ができていない。

  • kustomizeを導入し、環境毎に設定を定義。

  • terraformにて複数環境に対応したリソース管理ができていない。

  • 共通リソースをmodule化し、環境毎パラメータ設定ファイルを追加。

Documentation for API Endpoints

user-rest-service

HTTP request HTTP response
status code
Description
POST
 /signup
201 Created
400 Bad Request
409 Conflict
500 Internal Server Error
ユーザー新規登録
POST
 /login
201 Created
400 Bad Request
401 Unauthorized
500 Internal Server Error
ユーザーログイン
DELETE
 /logout
200 OK
400 Bad Request
500 Internal Server Error
ユーザーログアウト
GET
 /user
200 OK
401 Unauthorized
404 Not Found
500 Internal Server Error
ユーザー情報取得
GET
 /groups
200 OK
401 Unauthorized
500 Internal Server Error
承認グループ,
未承認グループ一覧取得
POST
 /groups
201 Created
400 Bad Request
401 Unauthorized
500 Internal Server Error
グループ作成
PUT
 /groups/{group_id}
200 OK
400 Bad Request
401 Unauthorized
500 Internal Server Error
グループ名更新
POST
 /groups/{group_id}/users
201 Created
400 Bad Request
401 Unauthorized
409 Conflict
500 Internal Server Error
グループ招待
DELETE
 /groups/{group_id}/users
200 OK
400 Bad Request
401 Unauthorized
500 Internal Server Error
グループ退会
POST
 /groups/{group_id}/users/approved
201 Created
400 Bad Request
401 Unauthorized
500 Internal Server Error
グループ招待承認
DELETE
 /groups/{group_id}/users/unapproved
200 OK
400 Bad Request
401 Unauthorized
500 Internal Server Error
グループ招待拒否
GET
 /readyz
200 OK
503 Service Unavailable
Kubernetesヘルスチェック
※ Backend専用
GET
 /groups/{group_id}/users
200 OK
400 Bad Request
500 Internal Server Error
グループユーザーIDリスト取得
※ Backend専用
GET
 /groups/{group_id}/users/{user_id}/verify
200 OK
400 Bad Request
500 Internal Server Error
グループ所属確認
※ Backend専用
GET
 /groups/{group_id}/users/verify
200 OK
400 Bad Request
500 Internal Server Error
ユーザーリストのグループ所属確認
※ Backend専用

account-rest-service

HTTP request HTTP response
status code
Description
GET
 /categories
200 OK
401 Unauthorized
500 Internal Server Error
カテゴリー一覧取得
POST
 /categories/custom-categories
201 Created
400 Bad Request
401 Unauthorized
409 Conflict
500 Internal Server Error
カスタムカテゴリー追加
PUT
 /categories/custom-categories/{id}
200 OK
400 Bad Request
401 Unauthorized
409 Conflict
500 Internal Server Error
カスタムカテゴリー更新
DELETE
 /categories/custom-categories/{id}
200 OK
400 Bad Request
401 Unauthorized
404 Not Found
500 Internal Server Error
カスタムカテゴリー削除
GET
 /transactions/{year_month}
200 OK
400 Bad Request
401 Unauthorized
500 Internal Server Error
月別家計簿トランザクション一覧取得
GET
 /transactions/latest
200 OK
401 Unauthorized
500 Internal Server Error
家計簿トランザクション最終更新10件取得
POST
 /transactions
201 Created
400 Bad Request
401 Unauthorized
500 Internal Server Error
家計簿トランザクション追加
PUT
 /transactions/{id}
200 OK
400 Bad Request
401 Unauthorized
500 Internal Server Error
家計簿トランザクション更新
DELETE
 /transactions/{id}
200 OK
400 Bad Request
401 Unauthorized
500 Internal Server Error
家計簿トランザクション削除
GET
 /transactions/search
200 OK
401 Unauthorized
500 Internal Server Error
家計簿トランザクション検索
GET
 /standard-budgets
200 OK
401 Unauthorized
500 Internal Server Error
家計簿標準予算取得
PUT
 /standard-budgets
200 OK
400 Bad Request
401 Unauthorized
500 Internal Server Error
家計簿標準予算更新
GET
 /custom-budgets/{year_month}
200 OK
400 Bad Request
401 Unauthorized
500 Internal Server Error
月別家計簿カスタム予算取得
POST
 /custom-budgets/{year_month}
201 Created
400 Bad Request
401 Unauthorized
500 Internal Server Error
月別家計簿カスタム予算追加
PUT
 /custom-budgets/{year_month}
200 OK
400 Bad Request
401 Unauthorized
500 Internal Server Error
月別家計簿カスタム予算更新
DELETE
 /custom-budgets/{year_month}
200 OK
400 Bad Request
401 Unauthorized
500 Internal Server Error
月別家計簿カスタム予算削除
GET
 /budgets/{year}
200 OK
400 Bad Request
401 Unauthorized
500 Internal Server Error
年別家計簿予算一覧取得
GET
 /groups/{group_id}/categories
200 OK
400 Bad Request
401 Unauthorized
500 Internal Server Error
グループカテゴリー一覧取得
POST
 /groups/{group_id}/categories/custom-categories
201 Created
400 Bad Request
401 Unauthorized
409 Conflict
500 Internal Server Error
グループカスタムカテゴリー追加
PUT
 /groups/{group_id}/categories/custom-categories/{id}
200 OK
400 Bad Request
401 Unauthorized
409 Conflict
500 Internal Server Error
グループカスタムカテゴリー更新
DELETE
 /groups/{group_id}/categories/custom-categories/{id}
200 OK
400 Bad Request
401 Unauthorized
404 Not Found
500 Internal Server Error
グループカスタムカテゴリー削除
GET
 /groups/{group_id}/transactions/{year_month}
200 OK
400 Bad Request
401 Unauthorized
500 Internal Server Error
月別グループ家計簿トランザクション一覧取得
GET
 /groups/{group_id}/transactions/latest
200 OK
400 Bad Request
401 Unauthorized
500 Internal Server Error
グループ家計簿トランザクション最終更新10件取得
POST
 /groups/{group_id}/transactions
201 Created
400 Bad Request
401 Unauthorized
500 Internal Server Error
グループ家計簿トランザクション追加
PUT
 /groups/{group_id}/transactions/{id}
200 OK
400 Bad Request
401 Unauthorized
500 Internal Server Error
グループ家計簿トランザクション更新
DELETE
 /groups/{group_id}/transactions/{id}
200 OK
400 Bad Request
401 Unauthorized
500 Internal Server Error
グループ家計簿トランザクション削除
GET
 /groups/{group_id}/transactions/search
200 OK
400 Bad Request
401 Unauthorized
500 Internal Server Error
グループ家計簿トランザクション検索
GET
 /groups/{group_id}/transactions/{year}/account
200 OK
400 Bad Request
401 Unauthorized
500 Internal Server Error
年別グループ家計簿トランザクション会計状況一覧取得
GET
 /groups/{group_id}/transactions/{year_month}/account
200 OK
400 Bad Request
401 Unauthorized
404 Not Found
500 Internal Server Error
月別グループ家計簿トランザクション会計データ取得
POST
 /groups/{group_id}/transactions/{year_month}/account
201 Created
400 Bad Request
401 Unauthorized
404 Not Found
500 Internal Server Error
月別グループ家計簿トランザクション会計データ追加
PUT
 /groups/{group_id}/transactions/{year_month}/account/{id}
200 OK
400 Bad Request
401 Unauthorized
404 Not Found
500 Internal Server Error
月別グループ家計簿トランザクション会計データ更新
DELETE
 /groups/{group_id}/transactions/{year_month}/account
200 OK
400 Bad Request
401 Unauthorized
404 Not Found
500 Internal Server Error
月別グループ家計簿トランザクション会計データ削除
GET
 /groups/{group_id}/standard-budgets
200 OK
400 Bad Request
401 Unauthorized
500 Internal Server Error
グループ家計簿標準予算取得
PUT
 /groups/{group_id}/standard-budgets
200 OK
400 Bad Request
401 Unauthorized
500 Internal Server Error
グループ家計簿標準予算更新
GET
 /groups/{group_id}/custom-budgets/{year_month}
200 OK
400 Bad Request
401 Unauthorized
500 Internal Server Error
グループ月別家計簿カスタム予算取得
POST
 /groups/{group_id}/custom-budgets/{year_month}
201 Created
400 Bad Request
401 Unauthorized
500 Internal Server Error
グループ月別家計簿カスタム予算追加
PUT
 /groups/{group_id}/custom-budgets/{year_month}
200 OK
400 Bad Request
401 Unauthorized
500 Internal Server Error
グループ月別家計簿カスタム予算更新
DELETE
 /groups/{group_id}/custom-budgets/{year_month}
200 OK
400 Bad Request
401 Unauthorized
500 Internal Server Error
グループ月別家計簿カスタム予算削除
GET
 /groups/{group_id}/budgets/{year}
200 OK
400 Bad Request
401 Unauthorized
500 Internal Server Error
グループ年別家計簿予算一覧取得
GET
 /readyz
200 OK
503 Service Unavailable
Kubernetesヘルスチェック
※ Backend専用
POST
 /standard-budgets
201 Created
500 Internal Server Error
家計簿標準予算初期値追加
※ Backend専用
GET
 /categories/name
200 OK
500 Internal Server Error
カテゴリー名取得
※ Backend専用
GET
 /categories/names
200 OK
500 Internal Server Error
カテゴリー名リスト取得
※ Backend専用
GET
 /transactions/related-shopping-list
200 OK
500 Internal Server Error
買い物リストに関連する家計簿トランザクション取得
※ Backend専用
POST
 /groups/{group_id}/standard-budgets
201 Created
400 Bad Request
500 Internal Server Error
グループ家計簿標準予算初期値追加
※ Backend専用
GET
 /groups/{group_id}/categories/name
200 OK
500 Internal Server Error
グループカテゴリー名取得
※ Backend専用
GET
 /groups/{group_id}/categories/names
200 OK
500 Internal Server Error
グループカテゴリー名リスト取得
※ Backend専用
GET
 /groups/{group_id}/transactions/related-shopping-list
200 OK
500 Internal Server Error
グループ買い物リストに関連する家計簿トランザクション取得
※ Backend専用

todo-rest-service

HTTP request HTTP response
status code
Description
GET
 /todo-list/{date}
200 OK
400 Bad Request
401 Unauthorized
500 Internal Server Error
日別実施予定todo,
締切予定todo一覧取得
GET
 /todo-list/{year_month}
200 OK
400 Bad Request
401 Unauthorized
500 Internal Server Error
月別実施予定todo,
締切予定todo一覧取得
GET
 /todo-list/expired
200 OK
401 Unauthorized
500 Internal Server Error
期限切れtodo一覧取得
POST
 /todo-list
201 Created
400 Bad Request
401 Unauthorized
500 Internal Server Error
todo追加
PUT
 /todo-list/{id}
200 OK
400 Bad Request
401 Unauthorized
500 Internal Server Error
todo更新
DELETE
 /todo-list/{id}
200 OK
400 Bad Request
401 Unauthorized
500 Internal Server Error
todo削除
GET
 /todo-list/search
200 OK
400 Bad Request
401 Unauthorized
500 Internal Server Error
todo検索
GET
 /shopping-list/{date}/daily
200 OK
400 Bad Request
401 Unauthorized
500 Internal Server Error
定期買い物リスト,
日別日順買い物リスト取得
GET
 /shopping-list/{date}/categories
200 OK
400 Bad Request
401 Unauthorized
500 Internal Server Error
定期買い物リスト,
日別カテゴリー順買い物リスト取得
GET
 /shopping-list/{year_month}/daily
200 OK
400 Bad Request
401 Unauthorized
500 Internal Server Error
定期買い物リスト,
月別日順買い物リスト取得
GET
 /shopping-list/{year_month}/categories
200 OK
400 Bad Request
401 Unauthorized
500 Internal Server Error
定期買い物リスト,
月別カテゴリー順買い物リスト取得
GET
 /shopping-list/expired
200 OK
401 Unauthorized
500 Internal Server Error
期限切れ買い物リスト取得
POST
 /shopping-list
201 Created
400 Bad Request
401 Unauthorized
500 Internal Server Error
買い物リスト追加
PUT
 /shopping-list/{id}
200 OK
400 Bad Request
401 Unauthorized
500 Internal Server Error
買い物リスト更新,
家計簿トランザクション自動追加/自動削除
DELETE
 /shopping-list/{id}
200 OK
400 Bad Request
401 Unauthorized
500 Internal Server Error
買い物リスト削除
POST
 /shopping-list/regular
201 Created
400 Bad Request
401 Unauthorized
500 Internal Server Error
定期買い物リスト追加
PUT
 /shopping-list/regular/{id}
200 OK
400 Bad Request
401 Unauthorized
500 Internal Server Error
定期買い物リスト更新
DELETE
 /shopping-list/regular/{id}
200 OK
400 Bad Request
401 Unauthorized
500 Internal Server Error
定期買い物リスト削除
GET
 /groups/{group_id}/todo-list/{date}
200 OK
400 Bad Request
401 Unauthorized
500 Internal Server Error
グループ日別実施予定todo,
グループ締切予定todo一覧取得
GET
 /groups/{group_id}/todo-list/{year_month}
200 OK
400 Bad Request
401 Unauthorized
500 Internal Server Error
グループ月別実施予定todo,
グループ締切予定todo一覧取得
GET
 /groups/{group_id}/todo-list/expired
200 OK
400 Bad Request
401 Unauthorized
500 Internal Server Error
グループ期限切れtodo一覧取得
POST
 /groups/{group_id}/todo-list
201 Created
400 Bad Request
401 Unauthorized
500 Internal Server Error
グループtodo追加
PUT
 /groups/{group_id}/todo-list/{id}
200 OK
400 Bad Request
401 Unauthorized
500 Internal Server Error
グループtodo更新
DELETE
 /groups/{group_id}/todo-list/{id}
200 OK
400 Bad Request
401 Unauthorized
500 Internal Server Error
グループtodo削除
GET
 /groups/{group_id}/todo-list/search
200 OK
400 Bad Request
401 Unauthorized
500 Internal Server Error
グループtodo検索
GET
 /groups/{group_id}/shopping-list/{date}/daily
200 OK
400 Bad Request
401 Unauthorized
500 Internal Server Error
グループ定期買い物リスト,
日別日順買い物リスト取得
GET
 /groups/{group_id}/shopping-list/{date}/categories
200 OK
400 Bad Request
401 Unauthorized
500 Internal Server Error
グループ定期買い物リスト,
日別カテゴリー順買い物リスト取得
GET
 /groups/{group_id}/shopping-list/{year_month}/daily
200 OK
400 Bad Request
401 Unauthorized
500 Internal Server Error
グループ定期買い物リスト,
月別日順買い物リスト取得
GET
 /groups/{group_id}/shopping-list/{year_month}/categories
200 OK
400 Bad Request
401 Unauthorized
500 Internal Server Error
グループ定期買い物リスト,
月別カテゴリー順買い物リスト取得
GET
 /groups/{group_id}/shopping-list/expired
200 OK
400 Bad Request
401 Unauthorized
500 Internal Server Error
グループ期限切れ買い物リスト取得
POST
 /groups/{group_id}/shopping-list
201 Created
400 Bad Request
401 Unauthorized
500 Internal Server Error
グループ買い物リスト追加
PUT
 /groups/{group_id}/shopping-list/{id}
200 OK
400 Bad Request
401 Unauthorized
500 Internal Server Error
グループ買い物リスト更新,
家計簿トランザクション自動追加/自動削除
DELETE
 /groups/{group_id}/shopping-list/{id}
200 OK
400 Bad Request
401 Unauthorized
500 Internal Server Error
グループ買い物リスト削除
POST
 /groups/{group_id}/shopping-list/regular
201 Created
400 Bad Request
401 Unauthorized
500 Internal Server Error
グループ定期買い物リスト追加
PUT
 /groups/{group_id}/shopping-list/regular/{id}
200 OK
400 Bad Request
401 Unauthorized
500 Internal Server Error
グループ定期買い物リスト更新
DELETE
 /groups/{group_id}/shopping-list/regular/{id}
200 OK
400 Bad Request
401 Unauthorized
500 Internal Server Error
グループ定期買い物リスト削除
GET
 /groups/{group_id}/tasks/users
200 OK
400 Bad Request
401 Unauthorized
500 Internal Server Error
ユーザー別グループタスク一覧取得
POST
 /groups/{group_id}/tasks/users
201 Created
400 Bad Request
401 Unauthorized
409 Conflict
500 Internal Server Error
グループタスクユーザー追加
DELETE
 /groups/{group_id}/tasks/users
200 OK
400 Bad Request
401 Unauthorized
500 Internal Server Error
グループタスクユーザー削除
GET
 /groups/{group_id}/tasks
200 OK
400 Bad Request
401 Unauthorized
500 Internal Server Error
グループタスク一覧取得
POST
 /groups/{group_id}/tasks
201 Created
400 Bad Request
401 Unauthorized
500 Internal Server Error
グループタスク追加
PUT
 /groups/{group_id}/tasks/{id}
200 OK
400 Bad Request
401 Unauthorized
500 Internal Server Error
グループタスク更新
DELETE
 /groups/{group_id}/tasks/{id}
200 OK
400 Bad Request
401 Unauthorized
500 Internal Server Error
グループタスク削除
GET
 /readyz
200 OK
503 Service Unavailable
Kubernetesヘルスチェック
※ Backend専用

About

No description, website, or topics provided.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages