backend

command module
v0.0.0-...-f316938 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Apr 30, 2024 License: MIT Imports: 21 Imported by: 0

README

MAGISCHE

初回実行

以下のコマンドにより,env作成・build・up・migrateまで全て行われる

make init-local
make
$ make help
init                 Initialize project
build                Build docker image to deploy
build-local          Build docker image to local development
up                   Do docker compose up with hot reload
down                 Do docker compose down
logs                 Tail docker compose logs
ps                   Check container status
test                 Execute tests
migrate              Execute migration
help                 Show options
migrate
make migrate

を行うと,gooseによるmigrateのup処理が走ります。

down処理は,

make migrate-down

で走ります。

createなどを行いたい場合は,お手数ながら

make exec

を行って

goose -dir ./db/migrations mysql "mysql:mysql@/magische?parseTime=true" status
goose -dir ./db/migrations mysql "mysql:mysql@/magische?parseTime=true" create <migration_name> sql

などを行ってください。

generate
make generate

を行うと,db/modelsの掃除後,sqlboilerによるgenerateが走ります。

また,gomockによるmockのgenerateも走ります。

構成

クリーンアーキテクチャ(っぽい)設計にしています。

architecture

点線矢印がInterfaceへの実装,実線がそのまま依存関係を表しています。

基本はrouter->controller->usecase->repositoryという流れで処理が進みます。

router

echoによるルーティングと,controllerの呼び出しを行います。

基本的に,エンドポイント一覧はここから見られる。

controller

request/responseの変換処理と,usecaseの呼び出しを行います。echo.HandlerFuncに従って各関数を実装。

ルーティングされるとまずはここに来る。

usecase

バリデーションや,実際のdbへの書き込みをrepositoryのinterfaceに依存して行います。トランザクションが必要な場合はここで作ってrepositoryには引数を持たせ投げるべし。

validatorを別途用意して分離するかも。

repository

dbへの書き込みを行う。sqlite3/MySQL/PostgreSQLなどにも依存する。

CreatedAtやUpdatedAt, ID生成なども担う。

entityとmodels

db/modelsには,SQLBoilerで実際のDBに基づいて生成されたモデルが入る。

ただ,これをそのまま使うと,DBの型に引っ張られる。とくにsqliteの場合,全てstringにされるなどして,共通のentityと扱うわけにはいかない。

そのため,共通の型を厳格化したentityと,db/modelsの2つが共存しており,repository層ではこの2つの変換も担う。

その他
  • config: 設定ファイルを読み込む
  • server.go: Server構造体を停止していて,これをRunすることで実際に起動する。echo.Routerとnet.listener, loggerを持つ。
  • cmd: migrateなどのコマンドを実行するためのファイルが入る

開発の流れ

repository側からくみ上げるか,controllerから下ろすかは任せますが,順に実装していくと良いです。

困ったら,まずはrouterやcontrollerに全部書いちゃえばとりあえず動く。

理解してきたらアーキテクチャにそってやってみる。

随時GPT-4やgoogle先生などにも相談。

Documentation

The Go Gopher

There is no documentation for this package.

Directories

Path Synopsis
cmd
mock
Package mockcontroller is a generated GoMock package.
Package mockcontroller is a generated GoMock package.
mock
Package mockmiddleware is a generated GoMock package.
Package mockmiddleware is a generated GoMock package.

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL