Skip to content
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
16 changes: 16 additions & 0 deletions model/feature_flags.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,16 @@
package model

import (
"github.com/gofrs/uuid"
)

// FeatureFlag FeatureFlagの管理をする構造体
type FeatureFlag struct {
UserID uuid.UUID `gorm:"type:char(36);not null;primaryKey;"`
FeatureFlagsJSON string `gorm:"type:TEXT NOT NULL"`
}

// TableName DBの名前を指定
func (f *FeatureFlag) TableName() string {
return "feature_flags"
}
11 changes: 11 additions & 0 deletions model/feature_flags_test.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@
package model

import (
"github.com/stretchr/testify/assert"
"testing"
)

func TestFeatureFlag_TableName(t *testing.T) {
t.Parallel()
assert.Equal(t, "feature_flags", (&FeatureFlag{}).TableName())
}
31 changes: 31 additions & 0 deletions repository/feature_flag.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,31 @@
package repository

import (
"github.com/gofrs/uuid"

"github.com/traPtitech/traQ/model"
)

// FeatureFlagRepository FeatureFlagリポジトリ
type FeatureFlagRepository interface {
// CreateUserFeatureFlag ユーザーのFeatureFlagを作成します。
//
// 成功した場合、nilを返します。
// userIDがuuid.Nilの場合、ErrNilIDを返します。
// DBによるエラーを返すことがあります。
CreateUserFeatureFlag(userID uuid.UUID, featureFlagsJSON string) error
// UpdateUserFeatureFlag ユーザーのFeatureFlagを更新します。
//
// 成功した場合、nilを返します。
// 指定したUserIDに対応するFeatureFlagが存在しない場合ErrNotFoundを返します。
// userIDがuuid.Nilの場合、ErrNilIDを返します。
// DBによるエラーを返すことがあります。
UpdateUserFeatureFlag(UserID uuid.UUID, featureFlagsJSON string) error
// GetFeatureFlagByUserID 指定したユーザーのFeatureFlagを取得します。
//
// 成功した場合、FeatureFlagとnilを返します。
// 指定したUserIDに対応するFeatureFlagが存在しない場合ErrNotFoundを返します。
// userIDがuuid.Nilの場合、ErrNilIDを返します。
// DBによるエラーを返すことがあります。
GetFeatureFlagByUserID(userID uuid.UUID) (*model.FeatureFlag, error)
}
43 changes: 43 additions & 0 deletions repository/gorm/feature_flag.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,43 @@
package gorm

import (
"github.com/gofrs/uuid"
"github.com/traPtitech/traQ/model"
"github.com/traPtitech/traQ/repository"
)

func (repo *Repository) CreateUserFeatureFlag(userID uuid.UUID, featureFlagsJSON string) error {
if userID == uuid.Nil {
return repository.ErrNilID
}
featureFlag := &model.FeatureFlag{
UserID: userID,
FeatureFlagsJSON: featureFlagsJSON,
}
if err := repo.db.Create(featureFlag).Error; err != nil {
return convertError(err)
}
return nil
}

func (repo *Repository) UpdateUserFeatureFlag(userID uuid.UUID, featureFlagsJSON string) error {
if userID == uuid.Nil {
return repository.ErrNilID
}

if err := repo.db.Model(&model.FeatureFlag{UserID: userID}).Update("feature_flags_json", featureFlagsJSON).Error; err != nil {
return convertError(err)
}
return nil
}

func (repo *Repository) GetFeatureFlagByUserID(userID uuid.UUID) (*model.FeatureFlag, error) {
if userID == uuid.Nil {
return nil, repository.ErrNilID
}
featureFlag := &model.FeatureFlag{}
if err := repo.db.Take(featureFlag, &model.FeatureFlag{UserID: userID}).Error; err != nil {
return nil, convertError(err)
}
return featureFlag, nil
}
Loading