store

package
v0.0.0-...-498e44a Latest Latest
Warning

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

Go to latest
Published: Jan 14, 2023 License: MIT Imports: 11 Imported by: 0

Documentation

Index

Constants

View Source
const (
	// ErrCodeMySQLDuplicateEntryはMySQL系のDUPLICATEエラーコード
	// https://dev.mysql.com/doc/mysql-errors/8.0/en/server-error-reference.html
	// Error number: 1062; Symbol: ER_DUP_ENTRY; SQLSTATE: 23000
	ErrCodeMySQLDuplicateEntry = 1062
)

Variables

View Source
var (
	Exercises = &ExerciseStore{Exercises: map[entity.ExerciseID]*entity.Exercise{}}

	ErrNotFound = errors.New("not found")
)
View Source
var (
	ErrAlreadyEntry = errors.New("duplicate entry")
)

Functions

func New

func New(ctx context.Context, cfg *config.Config) (*sqlx.DB, func(), error)

DBへ接続する 接続に成功した場合、*sql.DBのラッパーである*sqlx.DBを返す この関数の呼び出し元でDBのコネクション終了処理を行えるように 戻り値として*sql.DB.Closeメソッドを実行する無名関数を返す

Types

type Beginner

type Beginner interface {
	BeginTx(ctx context.Context, opts *sql.TxOptions) (*sql.Tx, error)
}

type Execer

type Execer interface {
	ExecContext(ctx context.Context, query string, args ...any) (sql.Result, error)
	NamedExecContext(ctx context.Context, query string, arg interface{}) (sql.Result, error)
}

type ExerciseStore

type ExerciseStore struct {
	// 動作確認用の仮実装のため、あえてexport
	LastID    entity.ExerciseID
	Exercises map[entity.ExerciseID]*entity.Exercise
}

Exercise.IDフィールドはRDBMSによって、割り当てられることを想定している LastIDフィールドをその代用

func (*ExerciseStore) Add

func (*ExerciseStore) All

func (es *ExerciseStore) All() entity.Exercises

ソート済みのエクササイズ一覧を返す

type KVS

type KVS struct {
	Cli *redis.Client
}

func NewKVS

func NewKVS(ctx context.Context, cfg *config.Config) (*KVS, error)

func (*KVS) Load

func (k *KVS) Load(ctx context.Context, key string) (entity.UserID, error)

func (*KVS) Save

func (k *KVS) Save(ctx context.Context, key string, userID entity.UserID) error

アクセストークンのIDをキー、ユーザーIDを値として保存する

type Preparer

type Preparer interface {
	PreparexContext(ctx context.Context, query string) (*sqlx.Stmt, error)
}

type Queryer

type Queryer interface {
	Preparer
	QueryxContext(ctx context.Context, query string, args ...any) (*sqlx.Rows, error)
	QueryRowxContext(ctx context.Context, query string, args ...any) *sqlx.Row
	GetContext(ctx context.Context, dest interface{}, query string, args ...any) error
	SelectContext(ctx context.Context, dest interface{}, query string, args ...any) error
}

type Repository

type Repository struct {
	Clocker clock.Clocker
}

ClockerフィールドはSQL実行時に時刻情報を制御し、 永続化を行う際の時刻を固定化する

func (*Repository) AddExercise

func (r *Repository) AddExercise(
	ctx context.Context, db Execer, e *entity.Exercise,
) error

エクササイズを保存する 引数として受け取った*entity.Exercise型のIDフィールドを更新することで 呼び出し元にRDBMSより発行されたIDを伝える

func (*Repository) DeleteExercise

func (r *Repository) DeleteExercise(
	ctx context.Context, db Execer, id entity.ExerciseID,
) (*int64, error)

エクササイズを削除する

func (*Repository) GetExercise

func (r *Repository) GetExercise(
	ctx context.Context, db Queryer, id entity.ExerciseID,
) (*entity.Exercise, error)

エクササイズを取得する

func (*Repository) GetUser

func (r *Repository) GetUser(
	ctx context.Context, db Queryer, name string,
) (*entity.User, error)

ユーザーを取得する usersテーブルのnameカラムで絞り込む。nameカラムはuniqueである。

func (*Repository) ListExercises

func (r *Repository) ListExercises(
	ctx context.Context, db Queryer, id entity.UserID,
) (entity.Exercises, error)

引数で受け取ったユーザーIDのエクササイズを取得する

func (*Repository) RegisterUser

func (r *Repository) RegisterUser(ctx context.Context, db Execer, u *entity.User) error

ユーザーを登録する 引数として受け取った*entity.User型のIDフィールドを更新することで 呼び出し元にRDBMSより発行されたIDを伝える

func (*Repository) UpdateExercise

func (r *Repository) UpdateExercise(
	ctx context.Context, db Execer, e *entity.Exercise,
) (*int64, error)

エクササイズを更新する

Jump to

Keyboard shortcuts

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