From e4494ee20c6f4c5b89c691e63beaa07b0c009767 Mon Sep 17 00:00:00 2001 From: azbcww <1121hatsuyuki@gmail.com> Date: Mon, 14 Aug 2023 06:35:00 +0900 Subject: [PATCH 01/25] =?UTF-8?q?=E3=83=AC=E3=82=B9=E3=83=9D=E3=83=B3?= =?UTF-8?q?=E3=82=B9=E3=81=AB=E3=82=B5=E3=83=A0=E3=83=8D=E3=82=A4=E3=83=AB?= =?UTF-8?q?=E6=83=85=E5=A0=B1=E8=BF=BD=E5=8A=A0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- router/v3/responses.go | 35 +++++++++++++++++++++++++++++++++++ router/v3/stamps.go | 11 ++++++++++- 2 files changed, 45 insertions(+), 1 deletion(-) diff --git a/router/v3/responses.go b/router/v3/responses.go index 7e09f1375..655805033 100644 --- a/router/v3/responses.go +++ b/router/v3/responses.go @@ -623,3 +623,38 @@ func formatStampPalettes(cfs []*model.StampPalette) []*StampPalette { sort.Slice(res, func(i, j int) bool { return res[i].ID.String() < res[j].ID.String() }) return res } + +type StampInfo struct { + ID uuid.UUID `json:"id"` + Name string `json:"name"` + CreatorID uuid.UUID `json:"creatorId"` + FileID uuid.UUID `json:"fileId"` + IsUnicode bool `json:"isUnicode"` + CreatedAt time.Time `json:"createdAt"` + UpdatedAt time.Time `json:"updatedAt"` + DeletedAt time.Time `json:"-"` + Thumbnails []model.FileThumbnail `json:"thumbnails"` +} + +func formatStampInfo(stamp *model.Stamp, thumb []model.FileThumbnail) *StampInfo { + si := &StampInfo{ + ID: stamp.ID, + Name: stamp.Name, + CreatorID: stamp.CreatorID, + FileID: stamp.FileID, + IsUnicode: stamp.IsUnicode, + CreatedAt: stamp.CreatedAt, + UpdatedAt: stamp.UpdatedAt, + DeletedAt: stamp.DeletedAt.Time, + Thumbnails: thumb, + } + return si +} + +func formatStampInfos(stamps []*model.Stamp, thumbs [][]model.FileThumbnail) []*StampInfo { + result := make([]*StampInfo, len(stamps)) + for i, stamp := range stamps { + result[i] = formatStampInfo(stamp, thumbs[i]) + } + return result +} diff --git a/router/v3/stamps.go b/router/v3/stamps.go index 6f2991ee0..162dfe354 100644 --- a/router/v3/stamps.go +++ b/router/v3/stamps.go @@ -10,6 +10,7 @@ import ( "github.com/gofrs/uuid" "github.com/labstack/echo/v4" + "github.com/traPtitech/traQ/model" "github.com/traPtitech/traQ/repository" "github.com/traPtitech/traQ/router/consts" "github.com/traPtitech/traQ/router/extension" @@ -71,7 +72,15 @@ func (h *Handlers) GetStamps(c echo.Context) error { return herror.InternalServerError(err) } - return extension.ServeJSONWithETag(c, stamps) + thumbs := make([][]model.FileThumbnail, len(stamps)) + for i, stamp := range stamps { + ts, err := h.Repo.GetFileMeta(stamp.FileID) + if err != nil { + return herror.InternalServerError(err) + } + thumbs[i] = ts.Thumbnails + } + return extension.ServeJSONWithETag(c, formatStampInfos(stamps, thumbs)) } // CreateStamp POST /stamps From bf16962df6a482bd7e143dc2a9a092eb8d9f2ca1 Mon Sep 17 00:00:00 2001 From: azbcww <1121hatsuyuki@gmail.com> Date: Mon, 2 Oct 2023 14:01:43 +0900 Subject: [PATCH 02/25] =?UTF-8?q?Revert=20"=E3=83=AC=E3=82=B9=E3=83=9D?= =?UTF-8?q?=E3=83=B3=E3=82=B9=E3=81=AB=E3=82=B5=E3=83=A0=E3=83=8D=E3=82=A4?= =?UTF-8?q?=E3=83=AB=E6=83=85=E5=A0=B1=E8=BF=BD=E5=8A=A0"?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit This reverts commit e4494ee20c6f4c5b89c691e63beaa07b0c009767. --- router/v3/responses.go | 35 ----------------------------------- router/v3/stamps.go | 11 +---------- 2 files changed, 1 insertion(+), 45 deletions(-) diff --git a/router/v3/responses.go b/router/v3/responses.go index 655805033..7e09f1375 100644 --- a/router/v3/responses.go +++ b/router/v3/responses.go @@ -623,38 +623,3 @@ func formatStampPalettes(cfs []*model.StampPalette) []*StampPalette { sort.Slice(res, func(i, j int) bool { return res[i].ID.String() < res[j].ID.String() }) return res } - -type StampInfo struct { - ID uuid.UUID `json:"id"` - Name string `json:"name"` - CreatorID uuid.UUID `json:"creatorId"` - FileID uuid.UUID `json:"fileId"` - IsUnicode bool `json:"isUnicode"` - CreatedAt time.Time `json:"createdAt"` - UpdatedAt time.Time `json:"updatedAt"` - DeletedAt time.Time `json:"-"` - Thumbnails []model.FileThumbnail `json:"thumbnails"` -} - -func formatStampInfo(stamp *model.Stamp, thumb []model.FileThumbnail) *StampInfo { - si := &StampInfo{ - ID: stamp.ID, - Name: stamp.Name, - CreatorID: stamp.CreatorID, - FileID: stamp.FileID, - IsUnicode: stamp.IsUnicode, - CreatedAt: stamp.CreatedAt, - UpdatedAt: stamp.UpdatedAt, - DeletedAt: stamp.DeletedAt.Time, - Thumbnails: thumb, - } - return si -} - -func formatStampInfos(stamps []*model.Stamp, thumbs [][]model.FileThumbnail) []*StampInfo { - result := make([]*StampInfo, len(stamps)) - for i, stamp := range stamps { - result[i] = formatStampInfo(stamp, thumbs[i]) - } - return result -} diff --git a/router/v3/stamps.go b/router/v3/stamps.go index 162dfe354..6f2991ee0 100644 --- a/router/v3/stamps.go +++ b/router/v3/stamps.go @@ -10,7 +10,6 @@ import ( "github.com/gofrs/uuid" "github.com/labstack/echo/v4" - "github.com/traPtitech/traQ/model" "github.com/traPtitech/traQ/repository" "github.com/traPtitech/traQ/router/consts" "github.com/traPtitech/traQ/router/extension" @@ -72,15 +71,7 @@ func (h *Handlers) GetStamps(c echo.Context) error { return herror.InternalServerError(err) } - thumbs := make([][]model.FileThumbnail, len(stamps)) - for i, stamp := range stamps { - ts, err := h.Repo.GetFileMeta(stamp.FileID) - if err != nil { - return herror.InternalServerError(err) - } - thumbs[i] = ts.Thumbnails - } - return extension.ServeJSONWithETag(c, formatStampInfos(stamps, thumbs)) + return extension.ServeJSONWithETag(c, stamps) } // CreateStamp POST /stamps From 59201bdcf64f932f6c4bb9bd4e517f5d96a5afac Mon Sep 17 00:00:00 2001 From: azbcww <1121hatsuyuki@gmail.com> Date: Wed, 4 Oct 2023 16:13:06 +0900 Subject: [PATCH 03/25] =?UTF-8?q?=E3=82=B5=E3=83=A0=E3=83=8D=E3=82=A4?= =?UTF-8?q?=E3=83=AB=E6=83=85=E5=A0=B1=E3=82=92=E4=B8=80=E5=BA=A6=E3=81=A7?= =?UTF-8?q?=E5=8F=96=E5=BE=97?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- repository/gorm/stamp.go | 36 ++++++++++++++++++++++++++++++++++++ repository/stamp.go | 16 ++++++++++++++++ router/v3/stamps.go | 7 ++++++- 3 files changed, 58 insertions(+), 1 deletion(-) diff --git a/repository/gorm/stamp.go b/repository/gorm/stamp.go index 78d2fa20d..94bb9a67d 100644 --- a/repository/gorm/stamp.go +++ b/repository/gorm/stamp.go @@ -343,3 +343,39 @@ func (r *stampRepository) GetStampStats(stampID uuid.UUID) (*repository.StampSta } return &stats, nil } + +func (r *stampRepository) StampThumbnailExists(stamps []*model.Stamp) (stampsWithThumb []repository.StampWithThumbnail, err error) { + IDs := make([]uuid.UUID, len(stamps)) + + for i, s := range stamps { + IDs[i] = s.FileID + } + ts := []uuid.UUID{} + if err = r.db. + Table("files_thumbnails ft"). + Select("file_id"). + Where("file_id IN (?)", IDs). + Find(&ts). + Error; err != nil { + return stampsWithThumb, err + } + tm := make(map[uuid.UUID]struct{}, len(ts)) + for _, v := range ts { + tm[v] = struct{}{} + } + + for _, s := range(stamps) { + _, ok := tm[s.FileID] + stampsWithThumb = append(stampsWithThumb, repository.StampWithThumbnail{ + ID: s.ID, + Name: s.Name, + CreatorID: s.CreatorID, + FileID: s.FileID, + IsUnicode: s.IsUnicode, + CreatedAt: s.CreatedAt, + UpdatedAt: s.UpdatedAt, + HasThumbnail: ok, + }) + } + return +} diff --git a/repository/stamp.go b/repository/stamp.go index d9188a9fb..3564e926a 100644 --- a/repository/stamp.go +++ b/repository/stamp.go @@ -36,6 +36,17 @@ type StampStats struct { TotalCount int64 `json:"totalCount"` } +type StampWithThumbnail struct { + ID uuid.UUID `json:"id"` + Name string `json:"name"` + CreatorID uuid.UUID `json:"creatorId"` + FileID uuid.UUID `json:"fileId"` + IsUnicode bool `json:"isUnicode"` + CreatedAt time.Time `json:"createdAt"` + UpdatedAt time.Time `json:"updatedAt"` + HasThumbnail bool `json:"hasThumbnail"` +} + // StampType スタンプの種類 type StampType string @@ -114,4 +125,9 @@ type StampRepository interface { // stampIDにNILを渡した場合、(nil, ErrNilID)を返します。 // DBによるエラーを返すことがあります。 GetStampStats(stampID uuid.UUID) (*StampStats, error) + // StampThumbnailExists スタンプ情報にサムネイルの有無を示すbool値を付加した構造体の配列を返します + // + // 成功した場合、当該配列とnilを返します + // DBによるエラーを返すことがあります。 + StampThumbnailExists(stamps []*model.Stamp) (stampsWithThumb []StampWithThumbnail, err error) } diff --git a/router/v3/stamps.go b/router/v3/stamps.go index 6f2991ee0..966d627b4 100644 --- a/router/v3/stamps.go +++ b/router/v3/stamps.go @@ -71,7 +71,12 @@ func (h *Handlers) GetStamps(c echo.Context) error { return herror.InternalServerError(err) } - return extension.ServeJSONWithETag(c, stamps) + stampsWithThumb, err := h.Repo.StampThumbnailExists(stamps) + if err != nil { + return herror.InternalServerError(err) + } + + return extension.ServeJSONWithETag(c, stampsWithThumb) } // CreateStamp POST /stamps From 6407e0e854b2aab02b086e651c3ed18c7e652ba8 Mon Sep 17 00:00:00 2001 From: azbcww <1121hatsuyuki@gmail.com> Date: Wed, 4 Oct 2023 20:41:48 +0900 Subject: [PATCH 04/25] fix error --- repository/gorm/stamp.go | 18 +- repository/stamp.go | 16 +- tree.txt | 618 +++++++++++++++++++++++++++++++++++++++ 3 files changed, 635 insertions(+), 17 deletions(-) create mode 100644 tree.txt diff --git a/repository/gorm/stamp.go b/repository/gorm/stamp.go index 94bb9a67d..72891f4f0 100644 --- a/repository/gorm/stamp.go +++ b/repository/gorm/stamp.go @@ -346,7 +346,7 @@ func (r *stampRepository) GetStampStats(stampID uuid.UUID) (*repository.StampSta func (r *stampRepository) StampThumbnailExists(stamps []*model.Stamp) (stampsWithThumb []repository.StampWithThumbnail, err error) { IDs := make([]uuid.UUID, len(stamps)) - + stampsWithThumb = make([]repository.StampWithThumbnail, 0) for i, s := range stamps { IDs[i] = s.FileID } @@ -364,16 +364,16 @@ func (r *stampRepository) StampThumbnailExists(stamps []*model.Stamp) (stampsWit tm[v] = struct{}{} } - for _, s := range(stamps) { + for _, s := range stamps { _, ok := tm[s.FileID] stampsWithThumb = append(stampsWithThumb, repository.StampWithThumbnail{ - ID: s.ID, - Name: s.Name, - CreatorID: s.CreatorID, - FileID: s.FileID, - IsUnicode: s.IsUnicode, - CreatedAt: s.CreatedAt, - UpdatedAt: s.UpdatedAt, + ID: s.ID, + Name: s.Name, + CreatorID: s.CreatorID, + FileID: s.FileID, + IsUnicode: s.IsUnicode, + CreatedAt: s.CreatedAt, + UpdatedAt: s.UpdatedAt, HasThumbnail: ok, }) } diff --git a/repository/stamp.go b/repository/stamp.go index 3564e926a..cf4cfdbae 100644 --- a/repository/stamp.go +++ b/repository/stamp.go @@ -37,14 +37,14 @@ type StampStats struct { } type StampWithThumbnail struct { - ID uuid.UUID `json:"id"` - Name string `json:"name"` - CreatorID uuid.UUID `json:"creatorId"` - FileID uuid.UUID `json:"fileId"` - IsUnicode bool `json:"isUnicode"` - CreatedAt time.Time `json:"createdAt"` - UpdatedAt time.Time `json:"updatedAt"` - HasThumbnail bool `json:"hasThumbnail"` + ID uuid.UUID `json:"id"` + Name string `json:"name"` + CreatorID uuid.UUID `json:"creatorId"` + FileID uuid.UUID `json:"fileId"` + IsUnicode bool `json:"isUnicode"` + CreatedAt time.Time `json:"createdAt"` + UpdatedAt time.Time `json:"updatedAt"` + HasThumbnail bool `json:"hasThumbnail"` } // StampType スタンプの種類 diff --git a/tree.txt b/tree.txt new file mode 100644 index 000000000..376c69f16 --- /dev/null +++ b/tree.txt @@ -0,0 +1,618 @@ +. +├── Dockerfile +├── LICENSE +├── Makefile +├── README.md +├── cmd traQ実行ファイルのコマンドパッケージ +│   ├── conf.go traQサーバー設定ファイルの定義 +│   ├── config.go traQサーバー起動コマンド +│   ├── file.go +│   ├── healthcheck.go +│   ├── migrate.go +│   ├── migrate_v2_to_v3.go +│   ├── root.go +│   ├── serve.go +│   ├── serve_wire.go +│   ├── stamp.go +│   ├── version.go +│   └── wire_gen.go +├── codecov.yml +├── compose.yaml +├── dev +│   ├── Caddyfile +│   ├── bin +│   │   ├── bot_debugger.go +│   │   ├── down-test-db.sh +│   │   ├── gen_ec_pem.go +│   │   └── up-test-db.sh +│   ├── elasticsearch.yml +│   ├── errcheck-exclude.txt +│   ├── es_jvm.options +│   └── frontend +│   ├── assets アセット(省略) +│   ├── config.js +│   ├── defaultTheme.js +│   ├── fonts フォント(省略) +│   ├── img +│   │   ├── icons アイコン画像(省略) +│   │   ├── screenshots 画像(省略) +│   │   └── services svgファイル(省略) +│   ├── index.html +│   ├── index.html.br +│   ├── manifest.webmanifest +│   ├── robots.txt +│   └── sw.js +├── docs +│   ├── dbSchema +│   │   ├── README.md +│   │   ├── archived_messages.md +│   │   ├── bot_event_logs.md +│   │   ├── bot_join_channels.md +│   │   ├── bots.md +│   │   ├── channel_events.md +│   │   ├── channel_latest_messages.md +│   │   ├── channels.md +│   │   ├── clip_folder_messages.md +│   │   ├── clip_folders.md +│   │   ├── devices.md +│   │   ├── dm_channel_mappings.md +│   │   ├── external_provider_users.md +│   │   ├── files.md +│   │   ├── files_acl.md +│   │   ├── files_thumbnails.md +│   │   ├── message_reports.md +│   │   ├── messages.md +│   │   ├── messages_stamps.md +│   │   ├── migrations.md +│   │   ├── oauth2_authorizes.md +│   │   ├── oauth2_clients.md +│   │   ├── oauth2_tokens.md +│   │   ├── ogp_cache.md +│   │   ├── pins.md +│   │   ├── r_sessions.md +│   │   ├── stamp_palettes.md +│   │   ├── stamps.md +│   │   ├── stars.md +│   │   ├── tags.md +│   │   ├── unreads.md +│   │   ├── user_group_admins.md +│   │   ├── user_group_members.md +│   │   ├── user_groups.md +│   │   ├── user_profiles.md +│   │   ├── user_role_inheritances.md +│   │   ├── user_role_permissions.md +│   │   ├── user_roles.md +│   │   ├── user_settings.md +│   │   ├── users.md +│   │   ├── users_private_channels.md +│   │   ├── users_subscribe_channels.md +│   │   ├── users_tags.md +│   │   └── webhook_bots.md +│   ├── deployment.md +│   ├── development.md +│   ├── favicon-16x16.png +│   ├── favicon-32x32.png +│   ├── swagger.yaml +│   └── v3-api.yaml +├── event traQサーバー内部イベントの種類が定義されているパッケージ +│   └── topic.go +├── go.mod +├── go.sum +├── main.go +├── migration traQ DBマイグレーション処理パッケージ +│   ├── current.go +│   ├── doc.go +│   ├── migrate.go +│   ├── v1.go +│   ├── v10.go +│   ├── v11.go +│   ├── v12.go +│   ├── v13.go +│   ├── v14.go +│   ├── v15.go +│   ├── v16.go +│   ├── v17.go +│   ├── v18.go +│   ├── v19.go +│   ├── v2.go +│   ├── v20.go +│   ├── v21.go +│   ├── v22.go +│   ├── v23.go +│   ├── v24.go +│   ├── v25.go +│   ├── v26.go +│   ├── v27.go +│   ├── v28.go +│   ├── v29.go +│   ├── v2tov3 +│   │   └── v2tov3.go +│   ├── v3.go +│   ├── v30.go +│   ├── v31.go +│   ├── v32.go +│   ├── v33.go +│   ├── v34.go +│   ├── v4.go +│   ├── v5.go +│   ├── v6.go +│   ├── v7.go +│   ├── v8.go +│   └── v9.go +├── model アプリケーションエンティティ構造体パッケージ +│   ├── bot.go +│   ├── bot_test.go +│   ├── channels.go +│   ├── channels_test.go +│   ├── clip.go +│   ├── devices.go +│   ├── devices_test.go +│   ├── files.go +│   ├── files_test.go +│   ├── json.go +│   ├── message_report.go +│   ├── message_report_test.go +│   ├── message_stamp.go +│   ├── message_stamp_test.go +│   ├── messages.go +│   ├── messages_test.go +│   ├── model.go +│   ├── oauth2.go +│   ├── oauth2_test.go +│   ├── ogp.go +│   ├── pins.go +│   ├── pins_test.go +│   ├── rbac.go +│   ├── rbac_test.go +│   ├── session.go +│   ├── stamp_palettes.go +│   ├── stamps.go +│   ├── stamps_test.go +│   ├── stars.go +│   ├── stars_test.go +│   ├── tags.go +│   ├── tags_test.go +│   ├── user_group.go +│   ├── user_group_test.go +│   ├── user_settings.go +│   ├── users.go +│   ├── users_test.go +│   ├── uuids.go +│   ├── webhooks.go +│   └── webhooks_test.go +├── repository リポジトリインターフェイスとそのGorm実装のパッケージ +│   ├── bot.go +│   ├── channel.go +│   ├── clip.go +│   ├── device.go +│   ├── errors.go +│   ├── errors_test.go +│   ├── file.go +│   ├── gorm +│   │   ├── bot.go +│   │   ├── channel.go +│   │   ├── channel_test.go +│   │   ├── clip.go +│   │   ├── clip_test.go +│   │   ├── device.go +│   │   ├── device_test.go +│   │   ├── errors.go +│   │   ├── file.go +│   │   ├── file_test.go +│   │   ├── message.go +│   │   ├── message_report.go +│   │   ├── message_test.go +│   │   ├── oauth2.go +│   │   ├── ogp_cache.go +│   │   ├── pin.go +│   │   ├── pin_test.go +│   │   ├── repository.go +│   │   ├── repository_test.go +│   │   ├── stamp.go +│   │   ├── stamp_palette.go +│   │   ├── stamp_palette_test.go +│   │   ├── stamp_test.go +│   │   ├── star.go +│   │   ├── star_test.go +│   │   ├── tag.go +│   │   ├── tag_test.go +│   │   ├── user.go +│   │   ├── user_group.go +│   │   ├── user_group_test.go +│   │   ├── user_role.go +│   │   ├── user_role_test.go +│   │   ├── user_settings.go +│   │   ├── user_test.go +│   │   ├── webhook.go +│   │   └── webhook_test.go +│   ├── message.go +│   ├── message_report.go +│   ├── mock_repository +│   │   ├── mock_bot.go +│   │   ├── mock_channel.go +│   │   ├── mock_file.go +│   │   ├── mock_message.go +│   │   ├── mock_pin.go +│   │   ├── mock_tag.go +│   │   ├── mock_user.go +│   │   └── mock_user_role.go +│   ├── oauth2.go +│   ├── ogp_cache.go +│   ├── pin.go +│   ├── repository.go +│   ├── stamp.go +│   ├── stamp_palette.go +│   ├── star.go +│   ├── tag.go +│   ├── user.go +│   ├── user_group.go +│   ├── user_role.go +│   ├── user_settings.go +│   ├── user_test.go +│   └── webhook.go +├── router HTTP APIルーター +│   ├── auth 外部ログインコールバックハンドラパッケージ +│   │   ├── github.go +│   │   ├── google.go +│   │   ├── oidc.go +│   │   ├── provider.go +│   │   ├── slack.go +│   │   └── traq.go +│   ├── config.go +│   ├── consts 定数パッケージ +│   │   ├── headers.go +│   │   ├── keys.go +│   │   ├── mime_types.go +│   │   ├── parameters.go +│   │   └── stamp_type.go +│   ├── extension echo拡張パッケージ +│   │   ├── context.go +│   │   ├── ctxkey +│   │   │   └── extension.go +│   │   ├── error_handler.go +│   │   ├── herror エラーレスポンスパッケージ +│   │   │   ├── 500.go +│   │   │   └── errors.go +│   │   ├── logger.go +│   │   ├── precond.go +│   │   └── precond_test.go +│   ├── middlewares echoミドルウェアパッケージ +│   │   ├── access_control.go +│   │   ├── access_logging.go +│   │   ├── body_limit.go +│   │   ├── gzip.go +│   │   ├── no_login.go +│   │   ├── param_retriever.go +│   │   ├── precond.go +│   │   ├── recovery.go +│   │   ├── request_counter.go +│   │   ├── request_id.go +│   │   ├── server_version.go +│   │   └── user_authenticate.go +│   ├── oauth2 OAuth2認可サーバー実装 +│   │   ├── authorization_endpoint.go +│   │   ├── authorization_endpoint_test.go +│   │   ├── oauth2.go +│   │   ├── oauth2_test.go +│   │   ├── revoke_token_endpoint.go +│   │   ├── revoke_token_endpoint_test.go +│   │   ├── token_endpoint.go +│   │   └── token_endpoint_test.go +│   ├── router.go +│   ├── router_wire.go +│   ├── session HTTPセッションマネージャー +│   │   ├── gorm.go +│   │   ├── memory.go +│   │   └── session.go +│   ├── utils HTTP APIルーター用汎用関数パッケージ +│   │   ├── common.go +│   │   ├── process_image.go +│   │   ├── replace_mapper.go +│   │   └── validator.go +│   ├── v1 v1 APIハンドラ実装パッケージ +│   │   ├── files.go +│   │   ├── files_test.go +│   │   ├── public.go +│   │   ├── public_test.go +│   │   ├── responses.go +│   │   ├── router.go +│   │   └── router_test.go +│   ├── v3 v3 APIハンドラ実装パッケージ +│   │   ├── activity.go +│   │   ├── activity_test.go +│   │   ├── bots.go +│   │   ├── bots_test.go +│   │   ├── channels.go +│   │   ├── channels_test.go +│   │   ├── clients.go +│   │   ├── clients_test.go +│   │   ├── clips.go +│   │   ├── clips_test.go +│   │   ├── files.go +│   │   ├── files_test.go +│   │   ├── messages.go +│   │   ├── messages_test.go +│   │   ├── ogp.go +│   │   ├── public.go +│   │   ├── public_test.go +│   │   ├── responses.go +│   │   ├── router.go +│   │   ├── router_test.go +│   │   ├── sessions.go +│   │   ├── sessions_test.go +│   │   ├── stamp_palettes.go +│   │   ├── stamp_palettes_test.go +│   │   ├── stamps.go +│   │   ├── stamps_test.go +│   │   ├── star.go +│   │   ├── star_test.go +│   │   ├── tags.go +│   │   ├── tags_test.go +│   │   ├── user_groups.go +│   │   ├── user_groups_test.go +│   │   ├── user_settings.go +│   │   ├── user_settings_test.go +│   │   ├── users.go +│   │   ├── users_test.go +│   │   ├── utils.go +│   │   ├── webhooks.go +│   │   ├── webhooks_test.go +│   │   ├── webrtc.go +│   │   ├── webrtc_test.go +│   │   └── ws.go +│   └── wire_gen.go +├── service サービスパッケージ +│   ├── bot traQ BOT機能 +│   │   ├── event BOTイベント +│   │   │   ├── dispatcher.go +│   │   │   ├── dispatcher_http.go +│   │   │   ├── dispatcher_impl.go +│   │   │   ├── dispatcher_test.go +│   │   │   ├── dispatcher_ws.go +│   │   │   ├── events.go +│   │   │   ├── mock_event +│   │   │   │   └── mock_dispatcher.go +│   │   │   └── payload BOTイベントペイロード構造体パッケージ +│   │   │   ├── common.go +│   │   │   ├── ev_bot_message_stamps_updated.go +│   │   │   ├── ev_channel_created.go +│   │   │   ├── ev_channel_topic_changed.go +│   │   │   ├── ev_direct_message_created.go +│   │   │   ├── ev_direct_message_deleted.go +│   │   │   ├── ev_direct_message_updated.go +│   │   │   ├── ev_joined.go +│   │   │   ├── ev_left.go +│   │   │   ├── ev_message_created.go +│   │   │   ├── ev_message_deleted.go +│   │   │   ├── ev_message_updated.go +│   │   │   ├── ev_ping.go +│   │   │   ├── ev_stamp_created.go +│   │   │   ├── ev_tag_added.go +│   │   │   ├── ev_tag_removed.go +│   │   │   └── ev_user_created.go +│   │   ├── handler traQ内部イベントハンドラパッケージ +│   │   │   ├── context.go +│   │   │   ├── ev_bot_joined.go +│   │   │   ├── ev_bot_joined_test.go +│   │   │   ├── ev_bot_left.go +│   │   │   ├── ev_bot_left_test.go +│   │   │   ├── ev_bot_ping_request.go +│   │   │   ├── ev_bot_ping_request_test.go +│   │   │   ├── ev_channel_created.go +│   │   │   ├── ev_channel_created_test.go +│   │   │   ├── ev_channel_topic_updated.go +│   │   │   ├── ev_channel_topic_updated_test.go +│   │   │   ├── ev_message_created.go +│   │   │   ├── ev_message_created_test.go +│   │   │   ├── ev_message_deleted.go +│   │   │   ├── ev_message_deleted_test.go +│   │   │   ├── ev_message_stamps_updated.go +│   │   │   ├── ev_message_stamps_updated_test.go +│   │   │   ├── ev_message_updated.go +│   │   │   ├── ev_message_updated_test.go +│   │   │   ├── ev_stamp_created.go +│   │   │   ├── ev_stamp_created_test.go +│   │   │   ├── ev_user_created.go +│   │   │   ├── ev_user_created_test.go +│   │   │   ├── ev_user_tag_added.go +│   │   │   ├── ev_user_tag_added_test.go +│   │   │   ├── ev_user_tag_removed.go +│   │   │   ├── ev_user_tag_removed_test.go +│   │   │   ├── handler_test.go +│   │   │   └── mock_handler +│   │   │   └── mock_context.go +│   │   ├── handlers.go +│   │   ├── service.go +│   │   ├── service_impl.go +│   │   └── ws +│   │   ├── config.go +│   │   ├── handler.go +│   │   ├── message.go +│   │   ├── session.go +│   │   └── streamer.go +│   ├── channel traQチャンネルマネージャー +│   │   ├── manager.go +│   │   ├── manager_impl.go +│   │   ├── manager_impl_test.go +│   │   ├── mock_channel +│   │   │   ├── mock_manager.go +│   │   │   └── mock_tree.go +│   │   ├── tree.go +│   │   ├── tree_impl.go +│   │   └── tree_impl_test.go +│   ├── counter 各種カウンター +│   │   ├── channel.go +│   │   ├── message.go +│   │   ├── online.go +│   │   └── unread.go +│   ├── exevent  +│   │   └── stamp_throttler.go +│   ├── fcm +│   │   ├── client.go +│   │   ├── impl.go +│   │   ├── null.go +│   │   └── vars.go +│   ├── file +│   │   ├── animated_image.go +│   │   ├── manager.go +│   │   ├── manager_impl.go +│   │   ├── manager_impl_test.go +│   │   ├── meta_impl.go +│   │   └── utils.go +│   ├── imaging 画像処理サービス(スタンプ・アイコン・サムネイル画像の生成・変換) +│   │   ├── config.go +│   │   ├── mks2013_filter.go +│   │   ├── mock_imaging +│   │   │   └── mock_processor.go +│   │   ├── processor.go +│   │   ├── processor_default.go +│   │   └── processor_default_test.go +│   ├── message +│   │   ├── manager.go +│   │   ├── manager_impl.go +│   │   ├── manager_impl_test.go +│   │   ├── manager_test.go +│   │   ├── model.go +│   │   ├── model_impl.go +│   │   ├── timeline.go +│   │   └── timeline_impl.go +│   ├── notification 通知サービス +│   │   ├── handlers.go +│   │   └── service.go +│   ├── ogp +│   │   ├── parser +│   │   │   ├── domain.go +│   │   │   ├── domain_twitter.go +│   │   │   ├── domain_twitter_test.go +│   │   │   ├── domain_vrchat.go +│   │   │   ├── domain_vrchat_test.go +│   │   │   ├── errors.go +│   │   │   ├── formatter.go +│   │   │   ├── parser.go +│   │   │   └── parser_test.go +│   │   ├── service.go +│   │   └── service_impl.go +│   ├── rbac Role-Basedアクセスコントロール +│   │   ├── permission +│   │   │   ├── bot.go +│   │   │   ├── channels.go +│   │   │   ├── client.go +│   │   │   ├── file.go +│   │   │   ├── message.go +│   │   │   ├── notification.go +│   │   │   ├── permission.go +│   │   │   ├── stamp.go +│   │   │   └── user.go +│   │   ├── rbac.go +│   │   ├── rbac_impl.go +│   │   ├── rbac_impl_test.go +│   │   └── role +│   │   ├── admin.go +│   │   ├── bot.go +│   │   ├── manage_bot.go +│   │   ├── read.go +│   │   ├── role.go +│   │   ├── user.go +│   │   └── write.go +│   ├── search +│   │   ├── engine.go +│   │   ├── es.go +│   │   ├── es_result.go +│   │   ├── es_sync.go +│   │   └── null.go +│   ├── services.go +│   ├── services_wire.go +│   ├── variable +│   │   └── variable_type.go +│   ├── viewer リアルタイムチャンネル閲覧者マネージャー +│   │   ├── manager.go +│   │   ├── state.go +│   │   ├── state_with_channel.go +│   │   ├── state_with_time.go +│   │   └── user_state.go +│   ├── webrtcv3 webRTCユーザーマネージャー +│   │   ├── manager.go +│   │   └── model.go +│   └── ws Websocketサーバー +│   ├── config.go +│   ├── handler.go +│   ├── message.go +│   ├── session.go +│   ├── streamer.go +│   └── target_func.go +├── testdata +│   └── images +│   ├── embed.go +│   ├── test.png +│   ├── test_fit.png +│   └── test_thumbnail.png +├── testutils テストコード用の汎用処理パッケージ +│   ├── empty_test_repository.go +│   ├── test_rbac.go +│   └── test_repository.go +├── tools.go +├── tree.txt +└── utils 汎用的な関数や小物が入っているパッケージ + ├── gormutil gorm用の汎用パッケージ + │   ├── error.go + │   └── util.go + ├── gormzap gorm用のログ出力ライブラリパッケージ + │   └── logger.go + ├── hmac HMAC計算の関数パッケージ + │   ├── hmac.go + │   └── hmac_test.go + ├── imaging 画像処理系パッケージ + │   ├── icon.go + │   ├── icon_test.go + │   ├── imagemagick.go + │   └── imagemagick_test.go + ├── jwt JWT関連の関数パッケージ + │   └── signer.go + ├── keymutex.go + ├── keymutex_test.go + ├── message traQ投稿メッセージのパーサーパッケージ + │   ├── embedded.go + │   ├── embedded_test.go + │   ├── parser.go + │   ├── parser_test.go + │   ├── replacer.go + │   ├── replacer_test.go + │   ├── spoiler.go + │   └── spoiler_test.go + ├── optional 基本型のOptional(Nullable)表現を提供するパッケージ + │   ├── of.go + │   └── of_test.go + ├── private_ip.go + ├── private_ip_test.go + ├── random 乱数・暗号鍵生成パッケージ + │   ├── ecdsa.go + │   ├── random.go + │   └── random_test.go + ├── secure.go + ├── secure_test.go + ├── set 基本型のSet(集合)を提供するパッケージ + │   ├── common.go + │   ├── string.go + │   └── uuid.go + ├── storage + │   ├── composite.go + │   ├── inmemory.go + │   ├── local.go + │   ├── mock_storage + │   │   └── mock_storage.go + │   ├── s3.go + │   ├── s3_main_test.go + │   ├── s3_object.go + │   ├── s3_object_test.go + │   ├── s3_tester_test.go + │   ├── storage.go + │   └── swift.go + ├── twemoji + │   └── installer.go + ├── utils.go + └── validator 各種値のバリデーションパッケージ + ├── rules.go + ├── validate.go + └── validate_test.go + +76 directories, 1079 files From 0c87c4a7413f422ed11abcfd7359823d9e1fc4b0 Mon Sep 17 00:00:00 2001 From: azabuchiwawa <46641274+azbcww@users.noreply.github.com> Date: Wed, 4 Oct 2023 20:54:29 +0900 Subject: [PATCH 05/25] Delete tree.txt --- tree.txt | 618 ------------------------------------------------------- 1 file changed, 618 deletions(-) delete mode 100644 tree.txt diff --git a/tree.txt b/tree.txt deleted file mode 100644 index 376c69f16..000000000 --- a/tree.txt +++ /dev/null @@ -1,618 +0,0 @@ -. -├── Dockerfile -├── LICENSE -├── Makefile -├── README.md -├── cmd traQ実行ファイルのコマンドパッケージ -│   ├── conf.go traQサーバー設定ファイルの定義 -│   ├── config.go traQサーバー起動コマンド -│   ├── file.go -│   ├── healthcheck.go -│   ├── migrate.go -│   ├── migrate_v2_to_v3.go -│   ├── root.go -│   ├── serve.go -│   ├── serve_wire.go -│   ├── stamp.go -│   ├── version.go -│   └── wire_gen.go -├── codecov.yml -├── compose.yaml -├── dev -│   ├── Caddyfile -│   ├── bin -│   │   ├── bot_debugger.go -│   │   ├── down-test-db.sh -│   │   ├── gen_ec_pem.go -│   │   └── up-test-db.sh -│   ├── elasticsearch.yml -│   ├── errcheck-exclude.txt -│   ├── es_jvm.options -│   └── frontend -│   ├── assets アセット(省略) -│   ├── config.js -│   ├── defaultTheme.js -│   ├── fonts フォント(省略) -│   ├── img -│   │   ├── icons アイコン画像(省略) -│   │   ├── screenshots 画像(省略) -│   │   └── services svgファイル(省略) -│   ├── index.html -│   ├── index.html.br -│   ├── manifest.webmanifest -│   ├── robots.txt -│   └── sw.js -├── docs -│   ├── dbSchema -│   │   ├── README.md -│   │   ├── archived_messages.md -│   │   ├── bot_event_logs.md -│   │   ├── bot_join_channels.md -│   │   ├── bots.md -│   │   ├── channel_events.md -│   │   ├── channel_latest_messages.md -│   │   ├── channels.md -│   │   ├── clip_folder_messages.md -│   │   ├── clip_folders.md -│   │   ├── devices.md -│   │   ├── dm_channel_mappings.md -│   │   ├── external_provider_users.md -│   │   ├── files.md -│   │   ├── files_acl.md -│   │   ├── files_thumbnails.md -│   │   ├── message_reports.md -│   │   ├── messages.md -│   │   ├── messages_stamps.md -│   │   ├── migrations.md -│   │   ├── oauth2_authorizes.md -│   │   ├── oauth2_clients.md -│   │   ├── oauth2_tokens.md -│   │   ├── ogp_cache.md -│   │   ├── pins.md -│   │   ├── r_sessions.md -│   │   ├── stamp_palettes.md -│   │   ├── stamps.md -│   │   ├── stars.md -│   │   ├── tags.md -│   │   ├── unreads.md -│   │   ├── user_group_admins.md -│   │   ├── user_group_members.md -│   │   ├── user_groups.md -│   │   ├── user_profiles.md -│   │   ├── user_role_inheritances.md -│   │   ├── user_role_permissions.md -│   │   ├── user_roles.md -│   │   ├── user_settings.md -│   │   ├── users.md -│   │   ├── users_private_channels.md -│   │   ├── users_subscribe_channels.md -│   │   ├── users_tags.md -│   │   └── webhook_bots.md -│   ├── deployment.md -│   ├── development.md -│   ├── favicon-16x16.png -│   ├── favicon-32x32.png -│   ├── swagger.yaml -│   └── v3-api.yaml -├── event traQサーバー内部イベントの種類が定義されているパッケージ -│   └── topic.go -├── go.mod -├── go.sum -├── main.go -├── migration traQ DBマイグレーション処理パッケージ -│   ├── current.go -│   ├── doc.go -│   ├── migrate.go -│   ├── v1.go -│   ├── v10.go -│   ├── v11.go -│   ├── v12.go -│   ├── v13.go -│   ├── v14.go -│   ├── v15.go -│   ├── v16.go -│   ├── v17.go -│   ├── v18.go -│   ├── v19.go -│   ├── v2.go -│   ├── v20.go -│   ├── v21.go -│   ├── v22.go -│   ├── v23.go -│   ├── v24.go -│   ├── v25.go -│   ├── v26.go -│   ├── v27.go -│   ├── v28.go -│   ├── v29.go -│   ├── v2tov3 -│   │   └── v2tov3.go -│   ├── v3.go -│   ├── v30.go -│   ├── v31.go -│   ├── v32.go -│   ├── v33.go -│   ├── v34.go -│   ├── v4.go -│   ├── v5.go -│   ├── v6.go -│   ├── v7.go -│   ├── v8.go -│   └── v9.go -├── model アプリケーションエンティティ構造体パッケージ -│   ├── bot.go -│   ├── bot_test.go -│   ├── channels.go -│   ├── channels_test.go -│   ├── clip.go -│   ├── devices.go -│   ├── devices_test.go -│   ├── files.go -│   ├── files_test.go -│   ├── json.go -│   ├── message_report.go -│   ├── message_report_test.go -│   ├── message_stamp.go -│   ├── message_stamp_test.go -│   ├── messages.go -│   ├── messages_test.go -│   ├── model.go -│   ├── oauth2.go -│   ├── oauth2_test.go -│   ├── ogp.go -│   ├── pins.go -│   ├── pins_test.go -│   ├── rbac.go -│   ├── rbac_test.go -│   ├── session.go -│   ├── stamp_palettes.go -│   ├── stamps.go -│   ├── stamps_test.go -│   ├── stars.go -│   ├── stars_test.go -│   ├── tags.go -│   ├── tags_test.go -│   ├── user_group.go -│   ├── user_group_test.go -│   ├── user_settings.go -│   ├── users.go -│   ├── users_test.go -│   ├── uuids.go -│   ├── webhooks.go -│   └── webhooks_test.go -├── repository リポジトリインターフェイスとそのGorm実装のパッケージ -│   ├── bot.go -│   ├── channel.go -│   ├── clip.go -│   ├── device.go -│   ├── errors.go -│   ├── errors_test.go -│   ├── file.go -│   ├── gorm -│   │   ├── bot.go -│   │   ├── channel.go -│   │   ├── channel_test.go -│   │   ├── clip.go -│   │   ├── clip_test.go -│   │   ├── device.go -│   │   ├── device_test.go -│   │   ├── errors.go -│   │   ├── file.go -│   │   ├── file_test.go -│   │   ├── message.go -│   │   ├── message_report.go -│   │   ├── message_test.go -│   │   ├── oauth2.go -│   │   ├── ogp_cache.go -│   │   ├── pin.go -│   │   ├── pin_test.go -│   │   ├── repository.go -│   │   ├── repository_test.go -│   │   ├── stamp.go -│   │   ├── stamp_palette.go -│   │   ├── stamp_palette_test.go -│   │   ├── stamp_test.go -│   │   ├── star.go -│   │   ├── star_test.go -│   │   ├── tag.go -│   │   ├── tag_test.go -│   │   ├── user.go -│   │   ├── user_group.go -│   │   ├── user_group_test.go -│   │   ├── user_role.go -│   │   ├── user_role_test.go -│   │   ├── user_settings.go -│   │   ├── user_test.go -│   │   ├── webhook.go -│   │   └── webhook_test.go -│   ├── message.go -│   ├── message_report.go -│   ├── mock_repository -│   │   ├── mock_bot.go -│   │   ├── mock_channel.go -│   │   ├── mock_file.go -│   │   ├── mock_message.go -│   │   ├── mock_pin.go -│   │   ├── mock_tag.go -│   │   ├── mock_user.go -│   │   └── mock_user_role.go -│   ├── oauth2.go -│   ├── ogp_cache.go -│   ├── pin.go -│   ├── repository.go -│   ├── stamp.go -│   ├── stamp_palette.go -│   ├── star.go -│   ├── tag.go -│   ├── user.go -│   ├── user_group.go -│   ├── user_role.go -│   ├── user_settings.go -│   ├── user_test.go -│   └── webhook.go -├── router HTTP APIルーター -│   ├── auth 外部ログインコールバックハンドラパッケージ -│   │   ├── github.go -│   │   ├── google.go -│   │   ├── oidc.go -│   │   ├── provider.go -│   │   ├── slack.go -│   │   └── traq.go -│   ├── config.go -│   ├── consts 定数パッケージ -│   │   ├── headers.go -│   │   ├── keys.go -│   │   ├── mime_types.go -│   │   ├── parameters.go -│   │   └── stamp_type.go -│   ├── extension echo拡張パッケージ -│   │   ├── context.go -│   │   ├── ctxkey -│   │   │   └── extension.go -│   │   ├── error_handler.go -│   │   ├── herror エラーレスポンスパッケージ -│   │   │   ├── 500.go -│   │   │   └── errors.go -│   │   ├── logger.go -│   │   ├── precond.go -│   │   └── precond_test.go -│   ├── middlewares echoミドルウェアパッケージ -│   │   ├── access_control.go -│   │   ├── access_logging.go -│   │   ├── body_limit.go -│   │   ├── gzip.go -│   │   ├── no_login.go -│   │   ├── param_retriever.go -│   │   ├── precond.go -│   │   ├── recovery.go -│   │   ├── request_counter.go -│   │   ├── request_id.go -│   │   ├── server_version.go -│   │   └── user_authenticate.go -│   ├── oauth2 OAuth2認可サーバー実装 -│   │   ├── authorization_endpoint.go -│   │   ├── authorization_endpoint_test.go -│   │   ├── oauth2.go -│   │   ├── oauth2_test.go -│   │   ├── revoke_token_endpoint.go -│   │   ├── revoke_token_endpoint_test.go -│   │   ├── token_endpoint.go -│   │   └── token_endpoint_test.go -│   ├── router.go -│   ├── router_wire.go -│   ├── session HTTPセッションマネージャー -│   │   ├── gorm.go -│   │   ├── memory.go -│   │   └── session.go -│   ├── utils HTTP APIルーター用汎用関数パッケージ -│   │   ├── common.go -│   │   ├── process_image.go -│   │   ├── replace_mapper.go -│   │   └── validator.go -│   ├── v1 v1 APIハンドラ実装パッケージ -│   │   ├── files.go -│   │   ├── files_test.go -│   │   ├── public.go -│   │   ├── public_test.go -│   │   ├── responses.go -│   │   ├── router.go -│   │   └── router_test.go -│   ├── v3 v3 APIハンドラ実装パッケージ -│   │   ├── activity.go -│   │   ├── activity_test.go -│   │   ├── bots.go -│   │   ├── bots_test.go -│   │   ├── channels.go -│   │   ├── channels_test.go -│   │   ├── clients.go -│   │   ├── clients_test.go -│   │   ├── clips.go -│   │   ├── clips_test.go -│   │   ├── files.go -│   │   ├── files_test.go -│   │   ├── messages.go -│   │   ├── messages_test.go -│   │   ├── ogp.go -│   │   ├── public.go -│   │   ├── public_test.go -│   │   ├── responses.go -│   │   ├── router.go -│   │   ├── router_test.go -│   │   ├── sessions.go -│   │   ├── sessions_test.go -│   │   ├── stamp_palettes.go -│   │   ├── stamp_palettes_test.go -│   │   ├── stamps.go -│   │   ├── stamps_test.go -│   │   ├── star.go -│   │   ├── star_test.go -│   │   ├── tags.go -│   │   ├── tags_test.go -│   │   ├── user_groups.go -│   │   ├── user_groups_test.go -│   │   ├── user_settings.go -│   │   ├── user_settings_test.go -│   │   ├── users.go -│   │   ├── users_test.go -│   │   ├── utils.go -│   │   ├── webhooks.go -│   │   ├── webhooks_test.go -│   │   ├── webrtc.go -│   │   ├── webrtc_test.go -│   │   └── ws.go -│   └── wire_gen.go -├── service サービスパッケージ -│   ├── bot traQ BOT機能 -│   │   ├── event BOTイベント -│   │   │   ├── dispatcher.go -│   │   │   ├── dispatcher_http.go -│   │   │   ├── dispatcher_impl.go -│   │   │   ├── dispatcher_test.go -│   │   │   ├── dispatcher_ws.go -│   │   │   ├── events.go -│   │   │   ├── mock_event -│   │   │   │   └── mock_dispatcher.go -│   │   │   └── payload BOTイベントペイロード構造体パッケージ -│   │   │   ├── common.go -│   │   │   ├── ev_bot_message_stamps_updated.go -│   │   │   ├── ev_channel_created.go -│   │   │   ├── ev_channel_topic_changed.go -│   │   │   ├── ev_direct_message_created.go -│   │   │   ├── ev_direct_message_deleted.go -│   │   │   ├── ev_direct_message_updated.go -│   │   │   ├── ev_joined.go -│   │   │   ├── ev_left.go -│   │   │   ├── ev_message_created.go -│   │   │   ├── ev_message_deleted.go -│   │   │   ├── ev_message_updated.go -│   │   │   ├── ev_ping.go -│   │   │   ├── ev_stamp_created.go -│   │   │   ├── ev_tag_added.go -│   │   │   ├── ev_tag_removed.go -│   │   │   └── ev_user_created.go -│   │   ├── handler traQ内部イベントハンドラパッケージ -│   │   │   ├── context.go -│   │   │   ├── ev_bot_joined.go -│   │   │   ├── ev_bot_joined_test.go -│   │   │   ├── ev_bot_left.go -│   │   │   ├── ev_bot_left_test.go -│   │   │   ├── ev_bot_ping_request.go -│   │   │   ├── ev_bot_ping_request_test.go -│   │   │   ├── ev_channel_created.go -│   │   │   ├── ev_channel_created_test.go -│   │   │   ├── ev_channel_topic_updated.go -│   │   │   ├── ev_channel_topic_updated_test.go -│   │   │   ├── ev_message_created.go -│   │   │   ├── ev_message_created_test.go -│   │   │   ├── ev_message_deleted.go -│   │   │   ├── ev_message_deleted_test.go -│   │   │   ├── ev_message_stamps_updated.go -│   │   │   ├── ev_message_stamps_updated_test.go -│   │   │   ├── ev_message_updated.go -│   │   │   ├── ev_message_updated_test.go -│   │   │   ├── ev_stamp_created.go -│   │   │   ├── ev_stamp_created_test.go -│   │   │   ├── ev_user_created.go -│   │   │   ├── ev_user_created_test.go -│   │   │   ├── ev_user_tag_added.go -│   │   │   ├── ev_user_tag_added_test.go -│   │   │   ├── ev_user_tag_removed.go -│   │   │   ├── ev_user_tag_removed_test.go -│   │   │   ├── handler_test.go -│   │   │   └── mock_handler -│   │   │   └── mock_context.go -│   │   ├── handlers.go -│   │   ├── service.go -│   │   ├── service_impl.go -│   │   └── ws -│   │   ├── config.go -│   │   ├── handler.go -│   │   ├── message.go -│   │   ├── session.go -│   │   └── streamer.go -│   ├── channel traQチャンネルマネージャー -│   │   ├── manager.go -│   │   ├── manager_impl.go -│   │   ├── manager_impl_test.go -│   │   ├── mock_channel -│   │   │   ├── mock_manager.go -│   │   │   └── mock_tree.go -│   │   ├── tree.go -│   │   ├── tree_impl.go -│   │   └── tree_impl_test.go -│   ├── counter 各種カウンター -│   │   ├── channel.go -│   │   ├── message.go -│   │   ├── online.go -│   │   └── unread.go -│   ├── exevent  -│   │   └── stamp_throttler.go -│   ├── fcm -│   │   ├── client.go -│   │   ├── impl.go -│   │   ├── null.go -│   │   └── vars.go -│   ├── file -│   │   ├── animated_image.go -│   │   ├── manager.go -│   │   ├── manager_impl.go -│   │   ├── manager_impl_test.go -│   │   ├── meta_impl.go -│   │   └── utils.go -│   ├── imaging 画像処理サービス(スタンプ・アイコン・サムネイル画像の生成・変換) -│   │   ├── config.go -│   │   ├── mks2013_filter.go -│   │   ├── mock_imaging -│   │   │   └── mock_processor.go -│   │   ├── processor.go -│   │   ├── processor_default.go -│   │   └── processor_default_test.go -│   ├── message -│   │   ├── manager.go -│   │   ├── manager_impl.go -│   │   ├── manager_impl_test.go -│   │   ├── manager_test.go -│   │   ├── model.go -│   │   ├── model_impl.go -│   │   ├── timeline.go -│   │   └── timeline_impl.go -│   ├── notification 通知サービス -│   │   ├── handlers.go -│   │   └── service.go -│   ├── ogp -│   │   ├── parser -│   │   │   ├── domain.go -│   │   │   ├── domain_twitter.go -│   │   │   ├── domain_twitter_test.go -│   │   │   ├── domain_vrchat.go -│   │   │   ├── domain_vrchat_test.go -│   │   │   ├── errors.go -│   │   │   ├── formatter.go -│   │   │   ├── parser.go -│   │   │   └── parser_test.go -│   │   ├── service.go -│   │   └── service_impl.go -│   ├── rbac Role-Basedアクセスコントロール -│   │   ├── permission -│   │   │   ├── bot.go -│   │   │   ├── channels.go -│   │   │   ├── client.go -│   │   │   ├── file.go -│   │   │   ├── message.go -│   │   │   ├── notification.go -│   │   │   ├── permission.go -│   │   │   ├── stamp.go -│   │   │   └── user.go -│   │   ├── rbac.go -│   │   ├── rbac_impl.go -│   │   ├── rbac_impl_test.go -│   │   └── role -│   │   ├── admin.go -│   │   ├── bot.go -│   │   ├── manage_bot.go -│   │   ├── read.go -│   │   ├── role.go -│   │   ├── user.go -│   │   └── write.go -│   ├── search -│   │   ├── engine.go -│   │   ├── es.go -│   │   ├── es_result.go -│   │   ├── es_sync.go -│   │   └── null.go -│   ├── services.go -│   ├── services_wire.go -│   ├── variable -│   │   └── variable_type.go -│   ├── viewer リアルタイムチャンネル閲覧者マネージャー -│   │   ├── manager.go -│   │   ├── state.go -│   │   ├── state_with_channel.go -│   │   ├── state_with_time.go -│   │   └── user_state.go -│   ├── webrtcv3 webRTCユーザーマネージャー -│   │   ├── manager.go -│   │   └── model.go -│   └── ws Websocketサーバー -│   ├── config.go -│   ├── handler.go -│   ├── message.go -│   ├── session.go -│   ├── streamer.go -│   └── target_func.go -├── testdata -│   └── images -│   ├── embed.go -│   ├── test.png -│   ├── test_fit.png -│   └── test_thumbnail.png -├── testutils テストコード用の汎用処理パッケージ -│   ├── empty_test_repository.go -│   ├── test_rbac.go -│   └── test_repository.go -├── tools.go -├── tree.txt -└── utils 汎用的な関数や小物が入っているパッケージ - ├── gormutil gorm用の汎用パッケージ - │   ├── error.go - │   └── util.go - ├── gormzap gorm用のログ出力ライブラリパッケージ - │   └── logger.go - ├── hmac HMAC計算の関数パッケージ - │   ├── hmac.go - │   └── hmac_test.go - ├── imaging 画像処理系パッケージ - │   ├── icon.go - │   ├── icon_test.go - │   ├── imagemagick.go - │   └── imagemagick_test.go - ├── jwt JWT関連の関数パッケージ - │   └── signer.go - ├── keymutex.go - ├── keymutex_test.go - ├── message traQ投稿メッセージのパーサーパッケージ - │   ├── embedded.go - │   ├── embedded_test.go - │   ├── parser.go - │   ├── parser_test.go - │   ├── replacer.go - │   ├── replacer_test.go - │   ├── spoiler.go - │   └── spoiler_test.go - ├── optional 基本型のOptional(Nullable)表現を提供するパッケージ - │   ├── of.go - │   └── of_test.go - ├── private_ip.go - ├── private_ip_test.go - ├── random 乱数・暗号鍵生成パッケージ - │   ├── ecdsa.go - │   ├── random.go - │   └── random_test.go - ├── secure.go - ├── secure_test.go - ├── set 基本型のSet(集合)を提供するパッケージ - │   ├── common.go - │   ├── string.go - │   └── uuid.go - ├── storage - │   ├── composite.go - │   ├── inmemory.go - │   ├── local.go - │   ├── mock_storage - │   │   └── mock_storage.go - │   ├── s3.go - │   ├── s3_main_test.go - │   ├── s3_object.go - │   ├── s3_object_test.go - │   ├── s3_tester_test.go - │   ├── storage.go - │   └── swift.go - ├── twemoji - │   └── installer.go - ├── utils.go - └── validator 各種値のバリデーションパッケージ - ├── rules.go - ├── validate.go - └── validate_test.go - -76 directories, 1079 files From 6fde0ca5429ed6131df04334b91c4a8c3f541308 Mon Sep 17 00:00:00 2001 From: azbcww <1121hatsuyuki@gmail.com> Date: Wed, 18 Oct 2023 14:27:55 +0900 Subject: [PATCH 06/25] =?UTF-8?q?StampWithThumbnail=E4=BF=AE=E6=AD=A3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- repository/gorm/stamp.go | 8 +------- repository/stamp.go | 10 ++-------- 2 files changed, 3 insertions(+), 15 deletions(-) diff --git a/repository/gorm/stamp.go b/repository/gorm/stamp.go index 72891f4f0..09b321979 100644 --- a/repository/gorm/stamp.go +++ b/repository/gorm/stamp.go @@ -367,13 +367,7 @@ func (r *stampRepository) StampThumbnailExists(stamps []*model.Stamp) (stampsWit for _, s := range stamps { _, ok := tm[s.FileID] stampsWithThumb = append(stampsWithThumb, repository.StampWithThumbnail{ - ID: s.ID, - Name: s.Name, - CreatorID: s.CreatorID, - FileID: s.FileID, - IsUnicode: s.IsUnicode, - CreatedAt: s.CreatedAt, - UpdatedAt: s.UpdatedAt, + Stamp: s, HasThumbnail: ok, }) } diff --git a/repository/stamp.go b/repository/stamp.go index cf4cfdbae..9852ca7ce 100644 --- a/repository/stamp.go +++ b/repository/stamp.go @@ -37,14 +37,8 @@ type StampStats struct { } type StampWithThumbnail struct { - ID uuid.UUID `json:"id"` - Name string `json:"name"` - CreatorID uuid.UUID `json:"creatorId"` - FileID uuid.UUID `json:"fileId"` - IsUnicode bool `json:"isUnicode"` - CreatedAt time.Time `json:"createdAt"` - UpdatedAt time.Time `json:"updatedAt"` - HasThumbnail bool `json:"hasThumbnail"` + *model.Stamp + HasThumbnail bool `json:"hasThumbnail"` } // StampType スタンプの種類 From e3d6c7ccbdc20131353eac45a88fc4a6a5d95009 Mon Sep 17 00:00:00 2001 From: azbcww <1121hatsuyuki@gmail.com> Date: Wed, 18 Oct 2023 15:32:48 +0900 Subject: [PATCH 07/25] =?UTF-8?q?test=E8=BF=BD=E5=8A=A0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- repository/gorm/stamp_test.go | 21 +++++++++++++++++++++ router/v3/stamps_test.go | 3 +++ 2 files changed, 24 insertions(+) diff --git a/repository/gorm/stamp_test.go b/repository/gorm/stamp_test.go index ba44ad238..6170e6b9b 100644 --- a/repository/gorm/stamp_test.go +++ b/repository/gorm/stamp_test.go @@ -364,3 +364,24 @@ func TestGormRepository_GetStampStats(t *testing.T) { }) } + + +func TestRepositoryImpl_StampThumbnailExists(t *testing.T) { + t.Parallel() + repo, assert, _ := setup(t, ex1) + + n := 10 + for i := 0; i < 10; i++ { + mustMakeStamp(t, repo, rand, uuid.Nil) + } + + arr, err := repo.GetAllStamps(repository.StampTypeAll) + if assert.NoError(err) { + assert.Len(arr, n) + } + + arrWithThumb, err := repo.StampThumbnailExists(arr) + if assert.NoError(err) { + assert.Len(arrWithThumb, n) + } +} \ No newline at end of file diff --git a/router/v3/stamps_test.go b/router/v3/stamps_test.go index 678a0f269..eef63b82f 100644 --- a/router/v3/stamps_test.go +++ b/router/v3/stamps_test.go @@ -86,6 +86,7 @@ func TestHandlers_GetStamps(t *testing.T) { obj.Length().IsEqual(1) stampEquals(t, stamp, obj.Value(0).Object()) + obj.Value(0).Object().Value("HasThumbnail").Boolean().IsEqual(false) }) t.Run("success (type=original)", func(t *testing.T) { @@ -101,6 +102,7 @@ func TestHandlers_GetStamps(t *testing.T) { obj.Length().IsEqual(1) stampEquals(t, stamp, obj.Value(0).Object()) + obj.Value(0).Object().Value("HasThumbnail").Boolean().IsEqual(false) }) t.Run("success (type=unicode)", func(t *testing.T) { @@ -130,6 +132,7 @@ func TestHandlers_GetStamps(t *testing.T) { obj.Length().IsEqual(1) stampEquals(t, stamp, obj.Value(0).Object()) + obj.Value(0).Object().Value("HasThumbnail").Boolean().IsEqual(false) }) } From ad78889207bd68b536af144bcb1cf35855002215 Mon Sep 17 00:00:00 2001 From: azbcww <1121hatsuyuki@gmail.com> Date: Wed, 18 Oct 2023 15:47:09 +0900 Subject: [PATCH 08/25] fix lint and change HasThumbnail to hasThumbnail --- repository/gorm/stamp_test.go | 3 +-- router/v3/stamps_test.go | 6 +++--- 2 files changed, 4 insertions(+), 5 deletions(-) diff --git a/repository/gorm/stamp_test.go b/repository/gorm/stamp_test.go index 6170e6b9b..338b1f8ef 100644 --- a/repository/gorm/stamp_test.go +++ b/repository/gorm/stamp_test.go @@ -365,7 +365,6 @@ func TestGormRepository_GetStampStats(t *testing.T) { } - func TestRepositoryImpl_StampThumbnailExists(t *testing.T) { t.Parallel() repo, assert, _ := setup(t, ex1) @@ -384,4 +383,4 @@ func TestRepositoryImpl_StampThumbnailExists(t *testing.T) { if assert.NoError(err) { assert.Len(arrWithThumb, n) } -} \ No newline at end of file +} diff --git a/router/v3/stamps_test.go b/router/v3/stamps_test.go index eef63b82f..c959e97ef 100644 --- a/router/v3/stamps_test.go +++ b/router/v3/stamps_test.go @@ -86,7 +86,7 @@ func TestHandlers_GetStamps(t *testing.T) { obj.Length().IsEqual(1) stampEquals(t, stamp, obj.Value(0).Object()) - obj.Value(0).Object().Value("HasThumbnail").Boolean().IsEqual(false) + obj.Value(0).Object().Value("hasThumbnail").Boolean().IsEqual(false) }) t.Run("success (type=original)", func(t *testing.T) { @@ -102,7 +102,7 @@ func TestHandlers_GetStamps(t *testing.T) { obj.Length().IsEqual(1) stampEquals(t, stamp, obj.Value(0).Object()) - obj.Value(0).Object().Value("HasThumbnail").Boolean().IsEqual(false) + obj.Value(0).Object().Value("hasThumbnail").Boolean().IsEqual(false) }) t.Run("success (type=unicode)", func(t *testing.T) { @@ -132,7 +132,7 @@ func TestHandlers_GetStamps(t *testing.T) { obj.Length().IsEqual(1) stampEquals(t, stamp, obj.Value(0).Object()) - obj.Value(0).Object().Value("HasThumbnail").Boolean().IsEqual(false) + obj.Value(0).Object().Value("hasThumbnail").Boolean().IsEqual(false) }) } From 9efe74c77ed0b1ab4ac35675e0df7854402f49f4 Mon Sep 17 00:00:00 2001 From: azbcww <1121hatsuyuki@gmail.com> Date: Wed, 18 Oct 2023 16:05:45 +0900 Subject: [PATCH 09/25] fix test --- repository/gorm/stamp_test.go | 19 +++++++++++++------ 1 file changed, 13 insertions(+), 6 deletions(-) diff --git a/repository/gorm/stamp_test.go b/repository/gorm/stamp_test.go index 338b1f8ef..536f78028 100644 --- a/repository/gorm/stamp_test.go +++ b/repository/gorm/stamp_test.go @@ -202,11 +202,14 @@ func TestRepositoryImpl_GetAllStamps(t *testing.T) { repo, assert, _ := setup(t, ex1) n := 10 - for i := 0; i < 10; i++ { - mustMakeStamp(t, repo, rand, uuid.Nil) + arr, err := repo.GetAllStamps(repository.StampTypeAll) + if len(arr) == 0 { + for i := 0; i < 10; i++ { + mustMakeStamp(t, repo, rand, uuid.Nil) + } + arr, err = repo.GetAllStamps(repository.StampTypeAll) } - arr, err := repo.GetAllStamps(repository.StampTypeAll) if assert.NoError(err) { assert.Len(arr, n) } @@ -370,11 +373,15 @@ func TestRepositoryImpl_StampThumbnailExists(t *testing.T) { repo, assert, _ := setup(t, ex1) n := 10 - for i := 0; i < 10; i++ { - mustMakeStamp(t, repo, rand, uuid.Nil) - } arr, err := repo.GetAllStamps(repository.StampTypeAll) + if len(arr) == 0 { + for i := 0; i < 10; i++ { + mustMakeStamp(t, repo, rand, uuid.Nil) + } + arr, err = repo.GetAllStamps(repository.StampTypeAll) + } + if assert.NoError(err) { assert.Len(arr, n) } From d87efdd397586cdad1db73b88bc28f5b101aa66a Mon Sep 17 00:00:00 2001 From: azbcww <1121hatsuyuki@gmail.com> Date: Mon, 27 Nov 2023 17:51:01 +0900 Subject: [PATCH 10/25] Revert "fix test" This reverts commit 9efe74c77ed0b1ab4ac35675e0df7854402f49f4. --- repository/gorm/stamp_test.go | 19 ++++++------------- 1 file changed, 6 insertions(+), 13 deletions(-) diff --git a/repository/gorm/stamp_test.go b/repository/gorm/stamp_test.go index 536f78028..338b1f8ef 100644 --- a/repository/gorm/stamp_test.go +++ b/repository/gorm/stamp_test.go @@ -202,14 +202,11 @@ func TestRepositoryImpl_GetAllStamps(t *testing.T) { repo, assert, _ := setup(t, ex1) n := 10 - arr, err := repo.GetAllStamps(repository.StampTypeAll) - if len(arr) == 0 { - for i := 0; i < 10; i++ { - mustMakeStamp(t, repo, rand, uuid.Nil) - } - arr, err = repo.GetAllStamps(repository.StampTypeAll) + for i := 0; i < 10; i++ { + mustMakeStamp(t, repo, rand, uuid.Nil) } + arr, err := repo.GetAllStamps(repository.StampTypeAll) if assert.NoError(err) { assert.Len(arr, n) } @@ -373,15 +370,11 @@ func TestRepositoryImpl_StampThumbnailExists(t *testing.T) { repo, assert, _ := setup(t, ex1) n := 10 - - arr, err := repo.GetAllStamps(repository.StampTypeAll) - if len(arr) == 0 { - for i := 0; i < 10; i++ { - mustMakeStamp(t, repo, rand, uuid.Nil) - } - arr, err = repo.GetAllStamps(repository.StampTypeAll) + for i := 0; i < 10; i++ { + mustMakeStamp(t, repo, rand, uuid.Nil) } + arr, err := repo.GetAllStamps(repository.StampTypeAll) if assert.NoError(err) { assert.Len(arr, n) } From f35c1723fa1071a395fa061e12db96fbeceb2616 Mon Sep 17 00:00:00 2001 From: azbcww <1121hatsuyuki@gmail.com> Date: Mon, 27 Nov 2023 17:51:08 +0900 Subject: [PATCH 11/25] Revert "fix lint and change HasThumbnail to hasThumbnail" This reverts commit ad78889207bd68b536af144bcb1cf35855002215. --- repository/gorm/stamp_test.go | 3 ++- router/v3/stamps_test.go | 6 +++--- 2 files changed, 5 insertions(+), 4 deletions(-) diff --git a/repository/gorm/stamp_test.go b/repository/gorm/stamp_test.go index 338b1f8ef..6170e6b9b 100644 --- a/repository/gorm/stamp_test.go +++ b/repository/gorm/stamp_test.go @@ -365,6 +365,7 @@ func TestGormRepository_GetStampStats(t *testing.T) { } + func TestRepositoryImpl_StampThumbnailExists(t *testing.T) { t.Parallel() repo, assert, _ := setup(t, ex1) @@ -383,4 +384,4 @@ func TestRepositoryImpl_StampThumbnailExists(t *testing.T) { if assert.NoError(err) { assert.Len(arrWithThumb, n) } -} +} \ No newline at end of file diff --git a/router/v3/stamps_test.go b/router/v3/stamps_test.go index c959e97ef..eef63b82f 100644 --- a/router/v3/stamps_test.go +++ b/router/v3/stamps_test.go @@ -86,7 +86,7 @@ func TestHandlers_GetStamps(t *testing.T) { obj.Length().IsEqual(1) stampEquals(t, stamp, obj.Value(0).Object()) - obj.Value(0).Object().Value("hasThumbnail").Boolean().IsEqual(false) + obj.Value(0).Object().Value("HasThumbnail").Boolean().IsEqual(false) }) t.Run("success (type=original)", func(t *testing.T) { @@ -102,7 +102,7 @@ func TestHandlers_GetStamps(t *testing.T) { obj.Length().IsEqual(1) stampEquals(t, stamp, obj.Value(0).Object()) - obj.Value(0).Object().Value("hasThumbnail").Boolean().IsEqual(false) + obj.Value(0).Object().Value("HasThumbnail").Boolean().IsEqual(false) }) t.Run("success (type=unicode)", func(t *testing.T) { @@ -132,7 +132,7 @@ func TestHandlers_GetStamps(t *testing.T) { obj.Length().IsEqual(1) stampEquals(t, stamp, obj.Value(0).Object()) - obj.Value(0).Object().Value("hasThumbnail").Boolean().IsEqual(false) + obj.Value(0).Object().Value("HasThumbnail").Boolean().IsEqual(false) }) } From 5cff7cb86dc4290188ae51b03031f660aef6609b Mon Sep 17 00:00:00 2001 From: azbcww <1121hatsuyuki@gmail.com> Date: Mon, 27 Nov 2023 17:51:16 +0900 Subject: [PATCH 12/25] =?UTF-8?q?Revert=20"test=E8=BF=BD=E5=8A=A0"?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit This reverts commit e3d6c7ccbdc20131353eac45a88fc4a6a5d95009. --- repository/gorm/stamp_test.go | 21 --------------------- router/v3/stamps_test.go | 3 --- 2 files changed, 24 deletions(-) diff --git a/repository/gorm/stamp_test.go b/repository/gorm/stamp_test.go index 6170e6b9b..ba44ad238 100644 --- a/repository/gorm/stamp_test.go +++ b/repository/gorm/stamp_test.go @@ -364,24 +364,3 @@ func TestGormRepository_GetStampStats(t *testing.T) { }) } - - -func TestRepositoryImpl_StampThumbnailExists(t *testing.T) { - t.Parallel() - repo, assert, _ := setup(t, ex1) - - n := 10 - for i := 0; i < 10; i++ { - mustMakeStamp(t, repo, rand, uuid.Nil) - } - - arr, err := repo.GetAllStamps(repository.StampTypeAll) - if assert.NoError(err) { - assert.Len(arr, n) - } - - arrWithThumb, err := repo.StampThumbnailExists(arr) - if assert.NoError(err) { - assert.Len(arrWithThumb, n) - } -} \ No newline at end of file diff --git a/router/v3/stamps_test.go b/router/v3/stamps_test.go index eef63b82f..678a0f269 100644 --- a/router/v3/stamps_test.go +++ b/router/v3/stamps_test.go @@ -86,7 +86,6 @@ func TestHandlers_GetStamps(t *testing.T) { obj.Length().IsEqual(1) stampEquals(t, stamp, obj.Value(0).Object()) - obj.Value(0).Object().Value("HasThumbnail").Boolean().IsEqual(false) }) t.Run("success (type=original)", func(t *testing.T) { @@ -102,7 +101,6 @@ func TestHandlers_GetStamps(t *testing.T) { obj.Length().IsEqual(1) stampEquals(t, stamp, obj.Value(0).Object()) - obj.Value(0).Object().Value("HasThumbnail").Boolean().IsEqual(false) }) t.Run("success (type=unicode)", func(t *testing.T) { @@ -132,7 +130,6 @@ func TestHandlers_GetStamps(t *testing.T) { obj.Length().IsEqual(1) stampEquals(t, stamp, obj.Value(0).Object()) - obj.Value(0).Object().Value("HasThumbnail").Boolean().IsEqual(false) }) } From d2b5d5cbc33778c4f22784cbf32d4fa819f7c00a Mon Sep 17 00:00:00 2001 From: azbcww <1121hatsuyuki@gmail.com> Date: Mon, 27 Nov 2023 17:51:21 +0900 Subject: [PATCH 13/25] =?UTF-8?q?Revert=20"StampWithThumbnail=E4=BF=AE?= =?UTF-8?q?=E6=AD=A3"?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit This reverts commit 6fde0ca5429ed6131df04334b91c4a8c3f541308. --- repository/gorm/stamp.go | 8 +++++++- repository/stamp.go | 10 ++++++++-- 2 files changed, 15 insertions(+), 3 deletions(-) diff --git a/repository/gorm/stamp.go b/repository/gorm/stamp.go index 09b321979..72891f4f0 100644 --- a/repository/gorm/stamp.go +++ b/repository/gorm/stamp.go @@ -367,7 +367,13 @@ func (r *stampRepository) StampThumbnailExists(stamps []*model.Stamp) (stampsWit for _, s := range stamps { _, ok := tm[s.FileID] stampsWithThumb = append(stampsWithThumb, repository.StampWithThumbnail{ - Stamp: s, + ID: s.ID, + Name: s.Name, + CreatorID: s.CreatorID, + FileID: s.FileID, + IsUnicode: s.IsUnicode, + CreatedAt: s.CreatedAt, + UpdatedAt: s.UpdatedAt, HasThumbnail: ok, }) } diff --git a/repository/stamp.go b/repository/stamp.go index 9852ca7ce..cf4cfdbae 100644 --- a/repository/stamp.go +++ b/repository/stamp.go @@ -37,8 +37,14 @@ type StampStats struct { } type StampWithThumbnail struct { - *model.Stamp - HasThumbnail bool `json:"hasThumbnail"` + ID uuid.UUID `json:"id"` + Name string `json:"name"` + CreatorID uuid.UUID `json:"creatorId"` + FileID uuid.UUID `json:"fileId"` + IsUnicode bool `json:"isUnicode"` + CreatedAt time.Time `json:"createdAt"` + UpdatedAt time.Time `json:"updatedAt"` + HasThumbnail bool `json:"hasThumbnail"` } // StampType スタンプの種類 From fd669b55dc786dd5c7380b79c44dc3bbe054cc16 Mon Sep 17 00:00:00 2001 From: azbcww <1121hatsuyuki@gmail.com> Date: Mon, 27 Nov 2023 17:51:22 +0900 Subject: [PATCH 14/25] Revert "Delete tree.txt" This reverts commit 0c87c4a7413f422ed11abcfd7359823d9e1fc4b0. --- tree.txt | 618 +++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 618 insertions(+) create mode 100644 tree.txt diff --git a/tree.txt b/tree.txt new file mode 100644 index 000000000..376c69f16 --- /dev/null +++ b/tree.txt @@ -0,0 +1,618 @@ +. +├── Dockerfile +├── LICENSE +├── Makefile +├── README.md +├── cmd traQ実行ファイルのコマンドパッケージ +│   ├── conf.go traQサーバー設定ファイルの定義 +│   ├── config.go traQサーバー起動コマンド +│   ├── file.go +│   ├── healthcheck.go +│   ├── migrate.go +│   ├── migrate_v2_to_v3.go +│   ├── root.go +│   ├── serve.go +│   ├── serve_wire.go +│   ├── stamp.go +│   ├── version.go +│   └── wire_gen.go +├── codecov.yml +├── compose.yaml +├── dev +│   ├── Caddyfile +│   ├── bin +│   │   ├── bot_debugger.go +│   │   ├── down-test-db.sh +│   │   ├── gen_ec_pem.go +│   │   └── up-test-db.sh +│   ├── elasticsearch.yml +│   ├── errcheck-exclude.txt +│   ├── es_jvm.options +│   └── frontend +│   ├── assets アセット(省略) +│   ├── config.js +│   ├── defaultTheme.js +│   ├── fonts フォント(省略) +│   ├── img +│   │   ├── icons アイコン画像(省略) +│   │   ├── screenshots 画像(省略) +│   │   └── services svgファイル(省略) +│   ├── index.html +│   ├── index.html.br +│   ├── manifest.webmanifest +│   ├── robots.txt +│   └── sw.js +├── docs +│   ├── dbSchema +│   │   ├── README.md +│   │   ├── archived_messages.md +│   │   ├── bot_event_logs.md +│   │   ├── bot_join_channels.md +│   │   ├── bots.md +│   │   ├── channel_events.md +│   │   ├── channel_latest_messages.md +│   │   ├── channels.md +│   │   ├── clip_folder_messages.md +│   │   ├── clip_folders.md +│   │   ├── devices.md +│   │   ├── dm_channel_mappings.md +│   │   ├── external_provider_users.md +│   │   ├── files.md +│   │   ├── files_acl.md +│   │   ├── files_thumbnails.md +│   │   ├── message_reports.md +│   │   ├── messages.md +│   │   ├── messages_stamps.md +│   │   ├── migrations.md +│   │   ├── oauth2_authorizes.md +│   │   ├── oauth2_clients.md +│   │   ├── oauth2_tokens.md +│   │   ├── ogp_cache.md +│   │   ├── pins.md +│   │   ├── r_sessions.md +│   │   ├── stamp_palettes.md +│   │   ├── stamps.md +│   │   ├── stars.md +│   │   ├── tags.md +│   │   ├── unreads.md +│   │   ├── user_group_admins.md +│   │   ├── user_group_members.md +│   │   ├── user_groups.md +│   │   ├── user_profiles.md +│   │   ├── user_role_inheritances.md +│   │   ├── user_role_permissions.md +│   │   ├── user_roles.md +│   │   ├── user_settings.md +│   │   ├── users.md +│   │   ├── users_private_channels.md +│   │   ├── users_subscribe_channels.md +│   │   ├── users_tags.md +│   │   └── webhook_bots.md +│   ├── deployment.md +│   ├── development.md +│   ├── favicon-16x16.png +│   ├── favicon-32x32.png +│   ├── swagger.yaml +│   └── v3-api.yaml +├── event traQサーバー内部イベントの種類が定義されているパッケージ +│   └── topic.go +├── go.mod +├── go.sum +├── main.go +├── migration traQ DBマイグレーション処理パッケージ +│   ├── current.go +│   ├── doc.go +│   ├── migrate.go +│   ├── v1.go +│   ├── v10.go +│   ├── v11.go +│   ├── v12.go +│   ├── v13.go +│   ├── v14.go +│   ├── v15.go +│   ├── v16.go +│   ├── v17.go +│   ├── v18.go +│   ├── v19.go +│   ├── v2.go +│   ├── v20.go +│   ├── v21.go +│   ├── v22.go +│   ├── v23.go +│   ├── v24.go +│   ├── v25.go +│   ├── v26.go +│   ├── v27.go +│   ├── v28.go +│   ├── v29.go +│   ├── v2tov3 +│   │   └── v2tov3.go +│   ├── v3.go +│   ├── v30.go +│   ├── v31.go +│   ├── v32.go +│   ├── v33.go +│   ├── v34.go +│   ├── v4.go +│   ├── v5.go +│   ├── v6.go +│   ├── v7.go +│   ├── v8.go +│   └── v9.go +├── model アプリケーションエンティティ構造体パッケージ +│   ├── bot.go +│   ├── bot_test.go +│   ├── channels.go +│   ├── channels_test.go +│   ├── clip.go +│   ├── devices.go +│   ├── devices_test.go +│   ├── files.go +│   ├── files_test.go +│   ├── json.go +│   ├── message_report.go +│   ├── message_report_test.go +│   ├── message_stamp.go +│   ├── message_stamp_test.go +│   ├── messages.go +│   ├── messages_test.go +│   ├── model.go +│   ├── oauth2.go +│   ├── oauth2_test.go +│   ├── ogp.go +│   ├── pins.go +│   ├── pins_test.go +│   ├── rbac.go +│   ├── rbac_test.go +│   ├── session.go +│   ├── stamp_palettes.go +│   ├── stamps.go +│   ├── stamps_test.go +│   ├── stars.go +│   ├── stars_test.go +│   ├── tags.go +│   ├── tags_test.go +│   ├── user_group.go +│   ├── user_group_test.go +│   ├── user_settings.go +│   ├── users.go +│   ├── users_test.go +│   ├── uuids.go +│   ├── webhooks.go +│   └── webhooks_test.go +├── repository リポジトリインターフェイスとそのGorm実装のパッケージ +│   ├── bot.go +│   ├── channel.go +│   ├── clip.go +│   ├── device.go +│   ├── errors.go +│   ├── errors_test.go +│   ├── file.go +│   ├── gorm +│   │   ├── bot.go +│   │   ├── channel.go +│   │   ├── channel_test.go +│   │   ├── clip.go +│   │   ├── clip_test.go +│   │   ├── device.go +│   │   ├── device_test.go +│   │   ├── errors.go +│   │   ├── file.go +│   │   ├── file_test.go +│   │   ├── message.go +│   │   ├── message_report.go +│   │   ├── message_test.go +│   │   ├── oauth2.go +│   │   ├── ogp_cache.go +│   │   ├── pin.go +│   │   ├── pin_test.go +│   │   ├── repository.go +│   │   ├── repository_test.go +│   │   ├── stamp.go +│   │   ├── stamp_palette.go +│   │   ├── stamp_palette_test.go +│   │   ├── stamp_test.go +│   │   ├── star.go +│   │   ├── star_test.go +│   │   ├── tag.go +│   │   ├── tag_test.go +│   │   ├── user.go +│   │   ├── user_group.go +│   │   ├── user_group_test.go +│   │   ├── user_role.go +│   │   ├── user_role_test.go +│   │   ├── user_settings.go +│   │   ├── user_test.go +│   │   ├── webhook.go +│   │   └── webhook_test.go +│   ├── message.go +│   ├── message_report.go +│   ├── mock_repository +│   │   ├── mock_bot.go +│   │   ├── mock_channel.go +│   │   ├── mock_file.go +│   │   ├── mock_message.go +│   │   ├── mock_pin.go +│   │   ├── mock_tag.go +│   │   ├── mock_user.go +│   │   └── mock_user_role.go +│   ├── oauth2.go +│   ├── ogp_cache.go +│   ├── pin.go +│   ├── repository.go +│   ├── stamp.go +│   ├── stamp_palette.go +│   ├── star.go +│   ├── tag.go +│   ├── user.go +│   ├── user_group.go +│   ├── user_role.go +│   ├── user_settings.go +│   ├── user_test.go +│   └── webhook.go +├── router HTTP APIルーター +│   ├── auth 外部ログインコールバックハンドラパッケージ +│   │   ├── github.go +│   │   ├── google.go +│   │   ├── oidc.go +│   │   ├── provider.go +│   │   ├── slack.go +│   │   └── traq.go +│   ├── config.go +│   ├── consts 定数パッケージ +│   │   ├── headers.go +│   │   ├── keys.go +│   │   ├── mime_types.go +│   │   ├── parameters.go +│   │   └── stamp_type.go +│   ├── extension echo拡張パッケージ +│   │   ├── context.go +│   │   ├── ctxkey +│   │   │   └── extension.go +│   │   ├── error_handler.go +│   │   ├── herror エラーレスポンスパッケージ +│   │   │   ├── 500.go +│   │   │   └── errors.go +│   │   ├── logger.go +│   │   ├── precond.go +│   │   └── precond_test.go +│   ├── middlewares echoミドルウェアパッケージ +│   │   ├── access_control.go +│   │   ├── access_logging.go +│   │   ├── body_limit.go +│   │   ├── gzip.go +│   │   ├── no_login.go +│   │   ├── param_retriever.go +│   │   ├── precond.go +│   │   ├── recovery.go +│   │   ├── request_counter.go +│   │   ├── request_id.go +│   │   ├── server_version.go +│   │   └── user_authenticate.go +│   ├── oauth2 OAuth2認可サーバー実装 +│   │   ├── authorization_endpoint.go +│   │   ├── authorization_endpoint_test.go +│   │   ├── oauth2.go +│   │   ├── oauth2_test.go +│   │   ├── revoke_token_endpoint.go +│   │   ├── revoke_token_endpoint_test.go +│   │   ├── token_endpoint.go +│   │   └── token_endpoint_test.go +│   ├── router.go +│   ├── router_wire.go +│   ├── session HTTPセッションマネージャー +│   │   ├── gorm.go +│   │   ├── memory.go +│   │   └── session.go +│   ├── utils HTTP APIルーター用汎用関数パッケージ +│   │   ├── common.go +│   │   ├── process_image.go +│   │   ├── replace_mapper.go +│   │   └── validator.go +│   ├── v1 v1 APIハンドラ実装パッケージ +│   │   ├── files.go +│   │   ├── files_test.go +│   │   ├── public.go +│   │   ├── public_test.go +│   │   ├── responses.go +│   │   ├── router.go +│   │   └── router_test.go +│   ├── v3 v3 APIハンドラ実装パッケージ +│   │   ├── activity.go +│   │   ├── activity_test.go +│   │   ├── bots.go +│   │   ├── bots_test.go +│   │   ├── channels.go +│   │   ├── channels_test.go +│   │   ├── clients.go +│   │   ├── clients_test.go +│   │   ├── clips.go +│   │   ├── clips_test.go +│   │   ├── files.go +│   │   ├── files_test.go +│   │   ├── messages.go +│   │   ├── messages_test.go +│   │   ├── ogp.go +│   │   ├── public.go +│   │   ├── public_test.go +│   │   ├── responses.go +│   │   ├── router.go +│   │   ├── router_test.go +│   │   ├── sessions.go +│   │   ├── sessions_test.go +│   │   ├── stamp_palettes.go +│   │   ├── stamp_palettes_test.go +│   │   ├── stamps.go +│   │   ├── stamps_test.go +│   │   ├── star.go +│   │   ├── star_test.go +│   │   ├── tags.go +│   │   ├── tags_test.go +│   │   ├── user_groups.go +│   │   ├── user_groups_test.go +│   │   ├── user_settings.go +│   │   ├── user_settings_test.go +│   │   ├── users.go +│   │   ├── users_test.go +│   │   ├── utils.go +│   │   ├── webhooks.go +│   │   ├── webhooks_test.go +│   │   ├── webrtc.go +│   │   ├── webrtc_test.go +│   │   └── ws.go +│   └── wire_gen.go +├── service サービスパッケージ +│   ├── bot traQ BOT機能 +│   │   ├── event BOTイベント +│   │   │   ├── dispatcher.go +│   │   │   ├── dispatcher_http.go +│   │   │   ├── dispatcher_impl.go +│   │   │   ├── dispatcher_test.go +│   │   │   ├── dispatcher_ws.go +│   │   │   ├── events.go +│   │   │   ├── mock_event +│   │   │   │   └── mock_dispatcher.go +│   │   │   └── payload BOTイベントペイロード構造体パッケージ +│   │   │   ├── common.go +│   │   │   ├── ev_bot_message_stamps_updated.go +│   │   │   ├── ev_channel_created.go +│   │   │   ├── ev_channel_topic_changed.go +│   │   │   ├── ev_direct_message_created.go +│   │   │   ├── ev_direct_message_deleted.go +│   │   │   ├── ev_direct_message_updated.go +│   │   │   ├── ev_joined.go +│   │   │   ├── ev_left.go +│   │   │   ├── ev_message_created.go +│   │   │   ├── ev_message_deleted.go +│   │   │   ├── ev_message_updated.go +│   │   │   ├── ev_ping.go +│   │   │   ├── ev_stamp_created.go +│   │   │   ├── ev_tag_added.go +│   │   │   ├── ev_tag_removed.go +│   │   │   └── ev_user_created.go +│   │   ├── handler traQ内部イベントハンドラパッケージ +│   │   │   ├── context.go +│   │   │   ├── ev_bot_joined.go +│   │   │   ├── ev_bot_joined_test.go +│   │   │   ├── ev_bot_left.go +│   │   │   ├── ev_bot_left_test.go +│   │   │   ├── ev_bot_ping_request.go +│   │   │   ├── ev_bot_ping_request_test.go +│   │   │   ├── ev_channel_created.go +│   │   │   ├── ev_channel_created_test.go +│   │   │   ├── ev_channel_topic_updated.go +│   │   │   ├── ev_channel_topic_updated_test.go +│   │   │   ├── ev_message_created.go +│   │   │   ├── ev_message_created_test.go +│   │   │   ├── ev_message_deleted.go +│   │   │   ├── ev_message_deleted_test.go +│   │   │   ├── ev_message_stamps_updated.go +│   │   │   ├── ev_message_stamps_updated_test.go +│   │   │   ├── ev_message_updated.go +│   │   │   ├── ev_message_updated_test.go +│   │   │   ├── ev_stamp_created.go +│   │   │   ├── ev_stamp_created_test.go +│   │   │   ├── ev_user_created.go +│   │   │   ├── ev_user_created_test.go +│   │   │   ├── ev_user_tag_added.go +│   │   │   ├── ev_user_tag_added_test.go +│   │   │   ├── ev_user_tag_removed.go +│   │   │   ├── ev_user_tag_removed_test.go +│   │   │   ├── handler_test.go +│   │   │   └── mock_handler +│   │   │   └── mock_context.go +│   │   ├── handlers.go +│   │   ├── service.go +│   │   ├── service_impl.go +│   │   └── ws +│   │   ├── config.go +│   │   ├── handler.go +│   │   ├── message.go +│   │   ├── session.go +│   │   └── streamer.go +│   ├── channel traQチャンネルマネージャー +│   │   ├── manager.go +│   │   ├── manager_impl.go +│   │   ├── manager_impl_test.go +│   │   ├── mock_channel +│   │   │   ├── mock_manager.go +│   │   │   └── mock_tree.go +│   │   ├── tree.go +│   │   ├── tree_impl.go +│   │   └── tree_impl_test.go +│   ├── counter 各種カウンター +│   │   ├── channel.go +│   │   ├── message.go +│   │   ├── online.go +│   │   └── unread.go +│   ├── exevent  +│   │   └── stamp_throttler.go +│   ├── fcm +│   │   ├── client.go +│   │   ├── impl.go +│   │   ├── null.go +│   │   └── vars.go +│   ├── file +│   │   ├── animated_image.go +│   │   ├── manager.go +│   │   ├── manager_impl.go +│   │   ├── manager_impl_test.go +│   │   ├── meta_impl.go +│   │   └── utils.go +│   ├── imaging 画像処理サービス(スタンプ・アイコン・サムネイル画像の生成・変換) +│   │   ├── config.go +│   │   ├── mks2013_filter.go +│   │   ├── mock_imaging +│   │   │   └── mock_processor.go +│   │   ├── processor.go +│   │   ├── processor_default.go +│   │   └── processor_default_test.go +│   ├── message +│   │   ├── manager.go +│   │   ├── manager_impl.go +│   │   ├── manager_impl_test.go +│   │   ├── manager_test.go +│   │   ├── model.go +│   │   ├── model_impl.go +│   │   ├── timeline.go +│   │   └── timeline_impl.go +│   ├── notification 通知サービス +│   │   ├── handlers.go +│   │   └── service.go +│   ├── ogp +│   │   ├── parser +│   │   │   ├── domain.go +│   │   │   ├── domain_twitter.go +│   │   │   ├── domain_twitter_test.go +│   │   │   ├── domain_vrchat.go +│   │   │   ├── domain_vrchat_test.go +│   │   │   ├── errors.go +│   │   │   ├── formatter.go +│   │   │   ├── parser.go +│   │   │   └── parser_test.go +│   │   ├── service.go +│   │   └── service_impl.go +│   ├── rbac Role-Basedアクセスコントロール +│   │   ├── permission +│   │   │   ├── bot.go +│   │   │   ├── channels.go +│   │   │   ├── client.go +│   │   │   ├── file.go +│   │   │   ├── message.go +│   │   │   ├── notification.go +│   │   │   ├── permission.go +│   │   │   ├── stamp.go +│   │   │   └── user.go +│   │   ├── rbac.go +│   │   ├── rbac_impl.go +│   │   ├── rbac_impl_test.go +│   │   └── role +│   │   ├── admin.go +│   │   ├── bot.go +│   │   ├── manage_bot.go +│   │   ├── read.go +│   │   ├── role.go +│   │   ├── user.go +│   │   └── write.go +│   ├── search +│   │   ├── engine.go +│   │   ├── es.go +│   │   ├── es_result.go +│   │   ├── es_sync.go +│   │   └── null.go +│   ├── services.go +│   ├── services_wire.go +│   ├── variable +│   │   └── variable_type.go +│   ├── viewer リアルタイムチャンネル閲覧者マネージャー +│   │   ├── manager.go +│   │   ├── state.go +│   │   ├── state_with_channel.go +│   │   ├── state_with_time.go +│   │   └── user_state.go +│   ├── webrtcv3 webRTCユーザーマネージャー +│   │   ├── manager.go +│   │   └── model.go +│   └── ws Websocketサーバー +│   ├── config.go +│   ├── handler.go +│   ├── message.go +│   ├── session.go +│   ├── streamer.go +│   └── target_func.go +├── testdata +│   └── images +│   ├── embed.go +│   ├── test.png +│   ├── test_fit.png +│   └── test_thumbnail.png +├── testutils テストコード用の汎用処理パッケージ +│   ├── empty_test_repository.go +│   ├── test_rbac.go +│   └── test_repository.go +├── tools.go +├── tree.txt +└── utils 汎用的な関数や小物が入っているパッケージ + ├── gormutil gorm用の汎用パッケージ + │   ├── error.go + │   └── util.go + ├── gormzap gorm用のログ出力ライブラリパッケージ + │   └── logger.go + ├── hmac HMAC計算の関数パッケージ + │   ├── hmac.go + │   └── hmac_test.go + ├── imaging 画像処理系パッケージ + │   ├── icon.go + │   ├── icon_test.go + │   ├── imagemagick.go + │   └── imagemagick_test.go + ├── jwt JWT関連の関数パッケージ + │   └── signer.go + ├── keymutex.go + ├── keymutex_test.go + ├── message traQ投稿メッセージのパーサーパッケージ + │   ├── embedded.go + │   ├── embedded_test.go + │   ├── parser.go + │   ├── parser_test.go + │   ├── replacer.go + │   ├── replacer_test.go + │   ├── spoiler.go + │   └── spoiler_test.go + ├── optional 基本型のOptional(Nullable)表現を提供するパッケージ + │   ├── of.go + │   └── of_test.go + ├── private_ip.go + ├── private_ip_test.go + ├── random 乱数・暗号鍵生成パッケージ + │   ├── ecdsa.go + │   ├── random.go + │   └── random_test.go + ├── secure.go + ├── secure_test.go + ├── set 基本型のSet(集合)を提供するパッケージ + │   ├── common.go + │   ├── string.go + │   └── uuid.go + ├── storage + │   ├── composite.go + │   ├── inmemory.go + │   ├── local.go + │   ├── mock_storage + │   │   └── mock_storage.go + │   ├── s3.go + │   ├── s3_main_test.go + │   ├── s3_object.go + │   ├── s3_object_test.go + │   ├── s3_tester_test.go + │   ├── storage.go + │   └── swift.go + ├── twemoji + │   └── installer.go + ├── utils.go + └── validator 各種値のバリデーションパッケージ + ├── rules.go + ├── validate.go + └── validate_test.go + +76 directories, 1079 files From d65701af52a0e6bcd5fc0fc135c6e85f2f9f2582 Mon Sep 17 00:00:00 2001 From: azbcww <1121hatsuyuki@gmail.com> Date: Mon, 27 Nov 2023 17:51:22 +0900 Subject: [PATCH 15/25] Revert "fix error" This reverts commit 6407e0e854b2aab02b086e651c3ed18c7e652ba8. --- repository/gorm/stamp.go | 18 +- repository/stamp.go | 16 +- tree.txt | 618 --------------------------------------- 3 files changed, 17 insertions(+), 635 deletions(-) delete mode 100644 tree.txt diff --git a/repository/gorm/stamp.go b/repository/gorm/stamp.go index 72891f4f0..94bb9a67d 100644 --- a/repository/gorm/stamp.go +++ b/repository/gorm/stamp.go @@ -346,7 +346,7 @@ func (r *stampRepository) GetStampStats(stampID uuid.UUID) (*repository.StampSta func (r *stampRepository) StampThumbnailExists(stamps []*model.Stamp) (stampsWithThumb []repository.StampWithThumbnail, err error) { IDs := make([]uuid.UUID, len(stamps)) - stampsWithThumb = make([]repository.StampWithThumbnail, 0) + for i, s := range stamps { IDs[i] = s.FileID } @@ -364,16 +364,16 @@ func (r *stampRepository) StampThumbnailExists(stamps []*model.Stamp) (stampsWit tm[v] = struct{}{} } - for _, s := range stamps { + for _, s := range(stamps) { _, ok := tm[s.FileID] stampsWithThumb = append(stampsWithThumb, repository.StampWithThumbnail{ - ID: s.ID, - Name: s.Name, - CreatorID: s.CreatorID, - FileID: s.FileID, - IsUnicode: s.IsUnicode, - CreatedAt: s.CreatedAt, - UpdatedAt: s.UpdatedAt, + ID: s.ID, + Name: s.Name, + CreatorID: s.CreatorID, + FileID: s.FileID, + IsUnicode: s.IsUnicode, + CreatedAt: s.CreatedAt, + UpdatedAt: s.UpdatedAt, HasThumbnail: ok, }) } diff --git a/repository/stamp.go b/repository/stamp.go index cf4cfdbae..3564e926a 100644 --- a/repository/stamp.go +++ b/repository/stamp.go @@ -37,14 +37,14 @@ type StampStats struct { } type StampWithThumbnail struct { - ID uuid.UUID `json:"id"` - Name string `json:"name"` - CreatorID uuid.UUID `json:"creatorId"` - FileID uuid.UUID `json:"fileId"` - IsUnicode bool `json:"isUnicode"` - CreatedAt time.Time `json:"createdAt"` - UpdatedAt time.Time `json:"updatedAt"` - HasThumbnail bool `json:"hasThumbnail"` + ID uuid.UUID `json:"id"` + Name string `json:"name"` + CreatorID uuid.UUID `json:"creatorId"` + FileID uuid.UUID `json:"fileId"` + IsUnicode bool `json:"isUnicode"` + CreatedAt time.Time `json:"createdAt"` + UpdatedAt time.Time `json:"updatedAt"` + HasThumbnail bool `json:"hasThumbnail"` } // StampType スタンプの種類 diff --git a/tree.txt b/tree.txt deleted file mode 100644 index 376c69f16..000000000 --- a/tree.txt +++ /dev/null @@ -1,618 +0,0 @@ -. -├── Dockerfile -├── LICENSE -├── Makefile -├── README.md -├── cmd traQ実行ファイルのコマンドパッケージ -│   ├── conf.go traQサーバー設定ファイルの定義 -│   ├── config.go traQサーバー起動コマンド -│   ├── file.go -│   ├── healthcheck.go -│   ├── migrate.go -│   ├── migrate_v2_to_v3.go -│   ├── root.go -│   ├── serve.go -│   ├── serve_wire.go -│   ├── stamp.go -│   ├── version.go -│   └── wire_gen.go -├── codecov.yml -├── compose.yaml -├── dev -│   ├── Caddyfile -│   ├── bin -│   │   ├── bot_debugger.go -│   │   ├── down-test-db.sh -│   │   ├── gen_ec_pem.go -│   │   └── up-test-db.sh -│   ├── elasticsearch.yml -│   ├── errcheck-exclude.txt -│   ├── es_jvm.options -│   └── frontend -│   ├── assets アセット(省略) -│   ├── config.js -│   ├── defaultTheme.js -│   ├── fonts フォント(省略) -│   ├── img -│   │   ├── icons アイコン画像(省略) -│   │   ├── screenshots 画像(省略) -│   │   └── services svgファイル(省略) -│   ├── index.html -│   ├── index.html.br -│   ├── manifest.webmanifest -│   ├── robots.txt -│   └── sw.js -├── docs -│   ├── dbSchema -│   │   ├── README.md -│   │   ├── archived_messages.md -│   │   ├── bot_event_logs.md -│   │   ├── bot_join_channels.md -│   │   ├── bots.md -│   │   ├── channel_events.md -│   │   ├── channel_latest_messages.md -│   │   ├── channels.md -│   │   ├── clip_folder_messages.md -│   │   ├── clip_folders.md -│   │   ├── devices.md -│   │   ├── dm_channel_mappings.md -│   │   ├── external_provider_users.md -│   │   ├── files.md -│   │   ├── files_acl.md -│   │   ├── files_thumbnails.md -│   │   ├── message_reports.md -│   │   ├── messages.md -│   │   ├── messages_stamps.md -│   │   ├── migrations.md -│   │   ├── oauth2_authorizes.md -│   │   ├── oauth2_clients.md -│   │   ├── oauth2_tokens.md -│   │   ├── ogp_cache.md -│   │   ├── pins.md -│   │   ├── r_sessions.md -│   │   ├── stamp_palettes.md -│   │   ├── stamps.md -│   │   ├── stars.md -│   │   ├── tags.md -│   │   ├── unreads.md -│   │   ├── user_group_admins.md -│   │   ├── user_group_members.md -│   │   ├── user_groups.md -│   │   ├── user_profiles.md -│   │   ├── user_role_inheritances.md -│   │   ├── user_role_permissions.md -│   │   ├── user_roles.md -│   │   ├── user_settings.md -│   │   ├── users.md -│   │   ├── users_private_channels.md -│   │   ├── users_subscribe_channels.md -│   │   ├── users_tags.md -│   │   └── webhook_bots.md -│   ├── deployment.md -│   ├── development.md -│   ├── favicon-16x16.png -│   ├── favicon-32x32.png -│   ├── swagger.yaml -│   └── v3-api.yaml -├── event traQサーバー内部イベントの種類が定義されているパッケージ -│   └── topic.go -├── go.mod -├── go.sum -├── main.go -├── migration traQ DBマイグレーション処理パッケージ -│   ├── current.go -│   ├── doc.go -│   ├── migrate.go -│   ├── v1.go -│   ├── v10.go -│   ├── v11.go -│   ├── v12.go -│   ├── v13.go -│   ├── v14.go -│   ├── v15.go -│   ├── v16.go -│   ├── v17.go -│   ├── v18.go -│   ├── v19.go -│   ├── v2.go -│   ├── v20.go -│   ├── v21.go -│   ├── v22.go -│   ├── v23.go -│   ├── v24.go -│   ├── v25.go -│   ├── v26.go -│   ├── v27.go -│   ├── v28.go -│   ├── v29.go -│   ├── v2tov3 -│   │   └── v2tov3.go -│   ├── v3.go -│   ├── v30.go -│   ├── v31.go -│   ├── v32.go -│   ├── v33.go -│   ├── v34.go -│   ├── v4.go -│   ├── v5.go -│   ├── v6.go -│   ├── v7.go -│   ├── v8.go -│   └── v9.go -├── model アプリケーションエンティティ構造体パッケージ -│   ├── bot.go -│   ├── bot_test.go -│   ├── channels.go -│   ├── channels_test.go -│   ├── clip.go -│   ├── devices.go -│   ├── devices_test.go -│   ├── files.go -│   ├── files_test.go -│   ├── json.go -│   ├── message_report.go -│   ├── message_report_test.go -│   ├── message_stamp.go -│   ├── message_stamp_test.go -│   ├── messages.go -│   ├── messages_test.go -│   ├── model.go -│   ├── oauth2.go -│   ├── oauth2_test.go -│   ├── ogp.go -│   ├── pins.go -│   ├── pins_test.go -│   ├── rbac.go -│   ├── rbac_test.go -│   ├── session.go -│   ├── stamp_palettes.go -│   ├── stamps.go -│   ├── stamps_test.go -│   ├── stars.go -│   ├── stars_test.go -│   ├── tags.go -│   ├── tags_test.go -│   ├── user_group.go -│   ├── user_group_test.go -│   ├── user_settings.go -│   ├── users.go -│   ├── users_test.go -│   ├── uuids.go -│   ├── webhooks.go -│   └── webhooks_test.go -├── repository リポジトリインターフェイスとそのGorm実装のパッケージ -│   ├── bot.go -│   ├── channel.go -│   ├── clip.go -│   ├── device.go -│   ├── errors.go -│   ├── errors_test.go -│   ├── file.go -│   ├── gorm -│   │   ├── bot.go -│   │   ├── channel.go -│   │   ├── channel_test.go -│   │   ├── clip.go -│   │   ├── clip_test.go -│   │   ├── device.go -│   │   ├── device_test.go -│   │   ├── errors.go -│   │   ├── file.go -│   │   ├── file_test.go -│   │   ├── message.go -│   │   ├── message_report.go -│   │   ├── message_test.go -│   │   ├── oauth2.go -│   │   ├── ogp_cache.go -│   │   ├── pin.go -│   │   ├── pin_test.go -│   │   ├── repository.go -│   │   ├── repository_test.go -│   │   ├── stamp.go -│   │   ├── stamp_palette.go -│   │   ├── stamp_palette_test.go -│   │   ├── stamp_test.go -│   │   ├── star.go -│   │   ├── star_test.go -│   │   ├── tag.go -│   │   ├── tag_test.go -│   │   ├── user.go -│   │   ├── user_group.go -│   │   ├── user_group_test.go -│   │   ├── user_role.go -│   │   ├── user_role_test.go -│   │   ├── user_settings.go -│   │   ├── user_test.go -│   │   ├── webhook.go -│   │   └── webhook_test.go -│   ├── message.go -│   ├── message_report.go -│   ├── mock_repository -│   │   ├── mock_bot.go -│   │   ├── mock_channel.go -│   │   ├── mock_file.go -│   │   ├── mock_message.go -│   │   ├── mock_pin.go -│   │   ├── mock_tag.go -│   │   ├── mock_user.go -│   │   └── mock_user_role.go -│   ├── oauth2.go -│   ├── ogp_cache.go -│   ├── pin.go -│   ├── repository.go -│   ├── stamp.go -│   ├── stamp_palette.go -│   ├── star.go -│   ├── tag.go -│   ├── user.go -│   ├── user_group.go -│   ├── user_role.go -│   ├── user_settings.go -│   ├── user_test.go -│   └── webhook.go -├── router HTTP APIルーター -│   ├── auth 外部ログインコールバックハンドラパッケージ -│   │   ├── github.go -│   │   ├── google.go -│   │   ├── oidc.go -│   │   ├── provider.go -│   │   ├── slack.go -│   │   └── traq.go -│   ├── config.go -│   ├── consts 定数パッケージ -│   │   ├── headers.go -│   │   ├── keys.go -│   │   ├── mime_types.go -│   │   ├── parameters.go -│   │   └── stamp_type.go -│   ├── extension echo拡張パッケージ -│   │   ├── context.go -│   │   ├── ctxkey -│   │   │   └── extension.go -│   │   ├── error_handler.go -│   │   ├── herror エラーレスポンスパッケージ -│   │   │   ├── 500.go -│   │   │   └── errors.go -│   │   ├── logger.go -│   │   ├── precond.go -│   │   └── precond_test.go -│   ├── middlewares echoミドルウェアパッケージ -│   │   ├── access_control.go -│   │   ├── access_logging.go -│   │   ├── body_limit.go -│   │   ├── gzip.go -│   │   ├── no_login.go -│   │   ├── param_retriever.go -│   │   ├── precond.go -│   │   ├── recovery.go -│   │   ├── request_counter.go -│   │   ├── request_id.go -│   │   ├── server_version.go -│   │   └── user_authenticate.go -│   ├── oauth2 OAuth2認可サーバー実装 -│   │   ├── authorization_endpoint.go -│   │   ├── authorization_endpoint_test.go -│   │   ├── oauth2.go -│   │   ├── oauth2_test.go -│   │   ├── revoke_token_endpoint.go -│   │   ├── revoke_token_endpoint_test.go -│   │   ├── token_endpoint.go -│   │   └── token_endpoint_test.go -│   ├── router.go -│   ├── router_wire.go -│   ├── session HTTPセッションマネージャー -│   │   ├── gorm.go -│   │   ├── memory.go -│   │   └── session.go -│   ├── utils HTTP APIルーター用汎用関数パッケージ -│   │   ├── common.go -│   │   ├── process_image.go -│   │   ├── replace_mapper.go -│   │   └── validator.go -│   ├── v1 v1 APIハンドラ実装パッケージ -│   │   ├── files.go -│   │   ├── files_test.go -│   │   ├── public.go -│   │   ├── public_test.go -│   │   ├── responses.go -│   │   ├── router.go -│   │   └── router_test.go -│   ├── v3 v3 APIハンドラ実装パッケージ -│   │   ├── activity.go -│   │   ├── activity_test.go -│   │   ├── bots.go -│   │   ├── bots_test.go -│   │   ├── channels.go -│   │   ├── channels_test.go -│   │   ├── clients.go -│   │   ├── clients_test.go -│   │   ├── clips.go -│   │   ├── clips_test.go -│   │   ├── files.go -│   │   ├── files_test.go -│   │   ├── messages.go -│   │   ├── messages_test.go -│   │   ├── ogp.go -│   │   ├── public.go -│   │   ├── public_test.go -│   │   ├── responses.go -│   │   ├── router.go -│   │   ├── router_test.go -│   │   ├── sessions.go -│   │   ├── sessions_test.go -│   │   ├── stamp_palettes.go -│   │   ├── stamp_palettes_test.go -│   │   ├── stamps.go -│   │   ├── stamps_test.go -│   │   ├── star.go -│   │   ├── star_test.go -│   │   ├── tags.go -│   │   ├── tags_test.go -│   │   ├── user_groups.go -│   │   ├── user_groups_test.go -│   │   ├── user_settings.go -│   │   ├── user_settings_test.go -│   │   ├── users.go -│   │   ├── users_test.go -│   │   ├── utils.go -│   │   ├── webhooks.go -│   │   ├── webhooks_test.go -│   │   ├── webrtc.go -│   │   ├── webrtc_test.go -│   │   └── ws.go -│   └── wire_gen.go -├── service サービスパッケージ -│   ├── bot traQ BOT機能 -│   │   ├── event BOTイベント -│   │   │   ├── dispatcher.go -│   │   │   ├── dispatcher_http.go -│   │   │   ├── dispatcher_impl.go -│   │   │   ├── dispatcher_test.go -│   │   │   ├── dispatcher_ws.go -│   │   │   ├── events.go -│   │   │   ├── mock_event -│   │   │   │   └── mock_dispatcher.go -│   │   │   └── payload BOTイベントペイロード構造体パッケージ -│   │   │   ├── common.go -│   │   │   ├── ev_bot_message_stamps_updated.go -│   │   │   ├── ev_channel_created.go -│   │   │   ├── ev_channel_topic_changed.go -│   │   │   ├── ev_direct_message_created.go -│   │   │   ├── ev_direct_message_deleted.go -│   │   │   ├── ev_direct_message_updated.go -│   │   │   ├── ev_joined.go -│   │   │   ├── ev_left.go -│   │   │   ├── ev_message_created.go -│   │   │   ├── ev_message_deleted.go -│   │   │   ├── ev_message_updated.go -│   │   │   ├── ev_ping.go -│   │   │   ├── ev_stamp_created.go -│   │   │   ├── ev_tag_added.go -│   │   │   ├── ev_tag_removed.go -│   │   │   └── ev_user_created.go -│   │   ├── handler traQ内部イベントハンドラパッケージ -│   │   │   ├── context.go -│   │   │   ├── ev_bot_joined.go -│   │   │   ├── ev_bot_joined_test.go -│   │   │   ├── ev_bot_left.go -│   │   │   ├── ev_bot_left_test.go -│   │   │   ├── ev_bot_ping_request.go -│   │   │   ├── ev_bot_ping_request_test.go -│   │   │   ├── ev_channel_created.go -│   │   │   ├── ev_channel_created_test.go -│   │   │   ├── ev_channel_topic_updated.go -│   │   │   ├── ev_channel_topic_updated_test.go -│   │   │   ├── ev_message_created.go -│   │   │   ├── ev_message_created_test.go -│   │   │   ├── ev_message_deleted.go -│   │   │   ├── ev_message_deleted_test.go -│   │   │   ├── ev_message_stamps_updated.go -│   │   │   ├── ev_message_stamps_updated_test.go -│   │   │   ├── ev_message_updated.go -│   │   │   ├── ev_message_updated_test.go -│   │   │   ├── ev_stamp_created.go -│   │   │   ├── ev_stamp_created_test.go -│   │   │   ├── ev_user_created.go -│   │   │   ├── ev_user_created_test.go -│   │   │   ├── ev_user_tag_added.go -│   │   │   ├── ev_user_tag_added_test.go -│   │   │   ├── ev_user_tag_removed.go -│   │   │   ├── ev_user_tag_removed_test.go -│   │   │   ├── handler_test.go -│   │   │   └── mock_handler -│   │   │   └── mock_context.go -│   │   ├── handlers.go -│   │   ├── service.go -│   │   ├── service_impl.go -│   │   └── ws -│   │   ├── config.go -│   │   ├── handler.go -│   │   ├── message.go -│   │   ├── session.go -│   │   └── streamer.go -│   ├── channel traQチャンネルマネージャー -│   │   ├── manager.go -│   │   ├── manager_impl.go -│   │   ├── manager_impl_test.go -│   │   ├── mock_channel -│   │   │   ├── mock_manager.go -│   │   │   └── mock_tree.go -│   │   ├── tree.go -│   │   ├── tree_impl.go -│   │   └── tree_impl_test.go -│   ├── counter 各種カウンター -│   │   ├── channel.go -│   │   ├── message.go -│   │   ├── online.go -│   │   └── unread.go -│   ├── exevent  -│   │   └── stamp_throttler.go -│   ├── fcm -│   │   ├── client.go -│   │   ├── impl.go -│   │   ├── null.go -│   │   └── vars.go -│   ├── file -│   │   ├── animated_image.go -│   │   ├── manager.go -│   │   ├── manager_impl.go -│   │   ├── manager_impl_test.go -│   │   ├── meta_impl.go -│   │   └── utils.go -│   ├── imaging 画像処理サービス(スタンプ・アイコン・サムネイル画像の生成・変換) -│   │   ├── config.go -│   │   ├── mks2013_filter.go -│   │   ├── mock_imaging -│   │   │   └── mock_processor.go -│   │   ├── processor.go -│   │   ├── processor_default.go -│   │   └── processor_default_test.go -│   ├── message -│   │   ├── manager.go -│   │   ├── manager_impl.go -│   │   ├── manager_impl_test.go -│   │   ├── manager_test.go -│   │   ├── model.go -│   │   ├── model_impl.go -│   │   ├── timeline.go -│   │   └── timeline_impl.go -│   ├── notification 通知サービス -│   │   ├── handlers.go -│   │   └── service.go -│   ├── ogp -│   │   ├── parser -│   │   │   ├── domain.go -│   │   │   ├── domain_twitter.go -│   │   │   ├── domain_twitter_test.go -│   │   │   ├── domain_vrchat.go -│   │   │   ├── domain_vrchat_test.go -│   │   │   ├── errors.go -│   │   │   ├── formatter.go -│   │   │   ├── parser.go -│   │   │   └── parser_test.go -│   │   ├── service.go -│   │   └── service_impl.go -│   ├── rbac Role-Basedアクセスコントロール -│   │   ├── permission -│   │   │   ├── bot.go -│   │   │   ├── channels.go -│   │   │   ├── client.go -│   │   │   ├── file.go -│   │   │   ├── message.go -│   │   │   ├── notification.go -│   │   │   ├── permission.go -│   │   │   ├── stamp.go -│   │   │   └── user.go -│   │   ├── rbac.go -│   │   ├── rbac_impl.go -│   │   ├── rbac_impl_test.go -│   │   └── role -│   │   ├── admin.go -│   │   ├── bot.go -│   │   ├── manage_bot.go -│   │   ├── read.go -│   │   ├── role.go -│   │   ├── user.go -│   │   └── write.go -│   ├── search -│   │   ├── engine.go -│   │   ├── es.go -│   │   ├── es_result.go -│   │   ├── es_sync.go -│   │   └── null.go -│   ├── services.go -│   ├── services_wire.go -│   ├── variable -│   │   └── variable_type.go -│   ├── viewer リアルタイムチャンネル閲覧者マネージャー -│   │   ├── manager.go -│   │   ├── state.go -│   │   ├── state_with_channel.go -│   │   ├── state_with_time.go -│   │   └── user_state.go -│   ├── webrtcv3 webRTCユーザーマネージャー -│   │   ├── manager.go -│   │   └── model.go -│   └── ws Websocketサーバー -│   ├── config.go -│   ├── handler.go -│   ├── message.go -│   ├── session.go -│   ├── streamer.go -│   └── target_func.go -├── testdata -│   └── images -│   ├── embed.go -│   ├── test.png -│   ├── test_fit.png -│   └── test_thumbnail.png -├── testutils テストコード用の汎用処理パッケージ -│   ├── empty_test_repository.go -│   ├── test_rbac.go -│   └── test_repository.go -├── tools.go -├── tree.txt -└── utils 汎用的な関数や小物が入っているパッケージ - ├── gormutil gorm用の汎用パッケージ - │   ├── error.go - │   └── util.go - ├── gormzap gorm用のログ出力ライブラリパッケージ - │   └── logger.go - ├── hmac HMAC計算の関数パッケージ - │   ├── hmac.go - │   └── hmac_test.go - ├── imaging 画像処理系パッケージ - │   ├── icon.go - │   ├── icon_test.go - │   ├── imagemagick.go - │   └── imagemagick_test.go - ├── jwt JWT関連の関数パッケージ - │   └── signer.go - ├── keymutex.go - ├── keymutex_test.go - ├── message traQ投稿メッセージのパーサーパッケージ - │   ├── embedded.go - │   ├── embedded_test.go - │   ├── parser.go - │   ├── parser_test.go - │   ├── replacer.go - │   ├── replacer_test.go - │   ├── spoiler.go - │   └── spoiler_test.go - ├── optional 基本型のOptional(Nullable)表現を提供するパッケージ - │   ├── of.go - │   └── of_test.go - ├── private_ip.go - ├── private_ip_test.go - ├── random 乱数・暗号鍵生成パッケージ - │   ├── ecdsa.go - │   ├── random.go - │   └── random_test.go - ├── secure.go - ├── secure_test.go - ├── set 基本型のSet(集合)を提供するパッケージ - │   ├── common.go - │   ├── string.go - │   └── uuid.go - ├── storage - │   ├── composite.go - │   ├── inmemory.go - │   ├── local.go - │   ├── mock_storage - │   │   └── mock_storage.go - │   ├── s3.go - │   ├── s3_main_test.go - │   ├── s3_object.go - │   ├── s3_object_test.go - │   ├── s3_tester_test.go - │   ├── storage.go - │   └── swift.go - ├── twemoji - │   └── installer.go - ├── utils.go - └── validator 各種値のバリデーションパッケージ - ├── rules.go - ├── validate.go - └── validate_test.go - -76 directories, 1079 files From 93faae0fafefe59172a7e6c9b06085f31b90d41e Mon Sep 17 00:00:00 2001 From: azbcww <1121hatsuyuki@gmail.com> Date: Mon, 27 Nov 2023 17:51:23 +0900 Subject: [PATCH 16/25] =?UTF-8?q?Revert=20"=E3=82=B5=E3=83=A0=E3=83=8D?= =?UTF-8?q?=E3=82=A4=E3=83=AB=E6=83=85=E5=A0=B1=E3=82=92=E4=B8=80=E5=BA=A6?= =?UTF-8?q?=E3=81=A7=E5=8F=96=E5=BE=97"?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit This reverts commit 59201bdcf64f932f6c4bb9bd4e517f5d96a5afac. --- repository/gorm/stamp.go | 36 ------------------------------------ repository/stamp.go | 16 ---------------- router/v3/stamps.go | 7 +------ 3 files changed, 1 insertion(+), 58 deletions(-) diff --git a/repository/gorm/stamp.go b/repository/gorm/stamp.go index 94bb9a67d..78d2fa20d 100644 --- a/repository/gorm/stamp.go +++ b/repository/gorm/stamp.go @@ -343,39 +343,3 @@ func (r *stampRepository) GetStampStats(stampID uuid.UUID) (*repository.StampSta } return &stats, nil } - -func (r *stampRepository) StampThumbnailExists(stamps []*model.Stamp) (stampsWithThumb []repository.StampWithThumbnail, err error) { - IDs := make([]uuid.UUID, len(stamps)) - - for i, s := range stamps { - IDs[i] = s.FileID - } - ts := []uuid.UUID{} - if err = r.db. - Table("files_thumbnails ft"). - Select("file_id"). - Where("file_id IN (?)", IDs). - Find(&ts). - Error; err != nil { - return stampsWithThumb, err - } - tm := make(map[uuid.UUID]struct{}, len(ts)) - for _, v := range ts { - tm[v] = struct{}{} - } - - for _, s := range(stamps) { - _, ok := tm[s.FileID] - stampsWithThumb = append(stampsWithThumb, repository.StampWithThumbnail{ - ID: s.ID, - Name: s.Name, - CreatorID: s.CreatorID, - FileID: s.FileID, - IsUnicode: s.IsUnicode, - CreatedAt: s.CreatedAt, - UpdatedAt: s.UpdatedAt, - HasThumbnail: ok, - }) - } - return -} diff --git a/repository/stamp.go b/repository/stamp.go index 3564e926a..d9188a9fb 100644 --- a/repository/stamp.go +++ b/repository/stamp.go @@ -36,17 +36,6 @@ type StampStats struct { TotalCount int64 `json:"totalCount"` } -type StampWithThumbnail struct { - ID uuid.UUID `json:"id"` - Name string `json:"name"` - CreatorID uuid.UUID `json:"creatorId"` - FileID uuid.UUID `json:"fileId"` - IsUnicode bool `json:"isUnicode"` - CreatedAt time.Time `json:"createdAt"` - UpdatedAt time.Time `json:"updatedAt"` - HasThumbnail bool `json:"hasThumbnail"` -} - // StampType スタンプの種類 type StampType string @@ -125,9 +114,4 @@ type StampRepository interface { // stampIDにNILを渡した場合、(nil, ErrNilID)を返します。 // DBによるエラーを返すことがあります。 GetStampStats(stampID uuid.UUID) (*StampStats, error) - // StampThumbnailExists スタンプ情報にサムネイルの有無を示すbool値を付加した構造体の配列を返します - // - // 成功した場合、当該配列とnilを返します - // DBによるエラーを返すことがあります。 - StampThumbnailExists(stamps []*model.Stamp) (stampsWithThumb []StampWithThumbnail, err error) } diff --git a/router/v3/stamps.go b/router/v3/stamps.go index 966d627b4..6f2991ee0 100644 --- a/router/v3/stamps.go +++ b/router/v3/stamps.go @@ -71,12 +71,7 @@ func (h *Handlers) GetStamps(c echo.Context) error { return herror.InternalServerError(err) } - stampsWithThumb, err := h.Repo.StampThumbnailExists(stamps) - if err != nil { - return herror.InternalServerError(err) - } - - return extension.ServeJSONWithETag(c, stampsWithThumb) + return extension.ServeJSONWithETag(c, stamps) } // CreateStamp POST /stamps From 906994630d6269dc723241e857721a0b2f8e68e7 Mon Sep 17 00:00:00 2001 From: azbcww <1121hatsuyuki@gmail.com> Date: Mon, 27 Nov 2023 17:51:23 +0900 Subject: [PATCH 17/25] =?UTF-8?q?Revert=20"Revert=20"=E3=83=AC=E3=82=B9?= =?UTF-8?q?=E3=83=9D=E3=83=B3=E3=82=B9=E3=81=AB=E3=82=B5=E3=83=A0=E3=83=8D?= =?UTF-8?q?=E3=82=A4=E3=83=AB=E6=83=85=E5=A0=B1=E8=BF=BD=E5=8A=A0""?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit This reverts commit bf16962df6a482bd7e143dc2a9a092eb8d9f2ca1. --- router/v3/responses.go | 35 +++++++++++++++++++++++++++++++++++ router/v3/stamps.go | 11 ++++++++++- 2 files changed, 45 insertions(+), 1 deletion(-) diff --git a/router/v3/responses.go b/router/v3/responses.go index 7e09f1375..655805033 100644 --- a/router/v3/responses.go +++ b/router/v3/responses.go @@ -623,3 +623,38 @@ func formatStampPalettes(cfs []*model.StampPalette) []*StampPalette { sort.Slice(res, func(i, j int) bool { return res[i].ID.String() < res[j].ID.String() }) return res } + +type StampInfo struct { + ID uuid.UUID `json:"id"` + Name string `json:"name"` + CreatorID uuid.UUID `json:"creatorId"` + FileID uuid.UUID `json:"fileId"` + IsUnicode bool `json:"isUnicode"` + CreatedAt time.Time `json:"createdAt"` + UpdatedAt time.Time `json:"updatedAt"` + DeletedAt time.Time `json:"-"` + Thumbnails []model.FileThumbnail `json:"thumbnails"` +} + +func formatStampInfo(stamp *model.Stamp, thumb []model.FileThumbnail) *StampInfo { + si := &StampInfo{ + ID: stamp.ID, + Name: stamp.Name, + CreatorID: stamp.CreatorID, + FileID: stamp.FileID, + IsUnicode: stamp.IsUnicode, + CreatedAt: stamp.CreatedAt, + UpdatedAt: stamp.UpdatedAt, + DeletedAt: stamp.DeletedAt.Time, + Thumbnails: thumb, + } + return si +} + +func formatStampInfos(stamps []*model.Stamp, thumbs [][]model.FileThumbnail) []*StampInfo { + result := make([]*StampInfo, len(stamps)) + for i, stamp := range stamps { + result[i] = formatStampInfo(stamp, thumbs[i]) + } + return result +} diff --git a/router/v3/stamps.go b/router/v3/stamps.go index 6f2991ee0..162dfe354 100644 --- a/router/v3/stamps.go +++ b/router/v3/stamps.go @@ -10,6 +10,7 @@ import ( "github.com/gofrs/uuid" "github.com/labstack/echo/v4" + "github.com/traPtitech/traQ/model" "github.com/traPtitech/traQ/repository" "github.com/traPtitech/traQ/router/consts" "github.com/traPtitech/traQ/router/extension" @@ -71,7 +72,15 @@ func (h *Handlers) GetStamps(c echo.Context) error { return herror.InternalServerError(err) } - return extension.ServeJSONWithETag(c, stamps) + thumbs := make([][]model.FileThumbnail, len(stamps)) + for i, stamp := range stamps { + ts, err := h.Repo.GetFileMeta(stamp.FileID) + if err != nil { + return herror.InternalServerError(err) + } + thumbs[i] = ts.Thumbnails + } + return extension.ServeJSONWithETag(c, formatStampInfos(stamps, thumbs)) } // CreateStamp POST /stamps From 96ed2732e409ddf95a768a22feef2b93ab00e82d Mon Sep 17 00:00:00 2001 From: azbcww <1121hatsuyuki@gmail.com> Date: Mon, 27 Nov 2023 17:51:24 +0900 Subject: [PATCH 18/25] =?UTF-8?q?Revert=20"=E3=83=AC=E3=82=B9=E3=83=9D?= =?UTF-8?q?=E3=83=B3=E3=82=B9=E3=81=AB=E3=82=B5=E3=83=A0=E3=83=8D=E3=82=A4?= =?UTF-8?q?=E3=83=AB=E6=83=85=E5=A0=B1=E8=BF=BD=E5=8A=A0"?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit This reverts commit e4494ee20c6f4c5b89c691e63beaa07b0c009767. --- router/v3/responses.go | 35 ----------------------------------- router/v3/stamps.go | 11 +---------- 2 files changed, 1 insertion(+), 45 deletions(-) diff --git a/router/v3/responses.go b/router/v3/responses.go index 655805033..7e09f1375 100644 --- a/router/v3/responses.go +++ b/router/v3/responses.go @@ -623,38 +623,3 @@ func formatStampPalettes(cfs []*model.StampPalette) []*StampPalette { sort.Slice(res, func(i, j int) bool { return res[i].ID.String() < res[j].ID.String() }) return res } - -type StampInfo struct { - ID uuid.UUID `json:"id"` - Name string `json:"name"` - CreatorID uuid.UUID `json:"creatorId"` - FileID uuid.UUID `json:"fileId"` - IsUnicode bool `json:"isUnicode"` - CreatedAt time.Time `json:"createdAt"` - UpdatedAt time.Time `json:"updatedAt"` - DeletedAt time.Time `json:"-"` - Thumbnails []model.FileThumbnail `json:"thumbnails"` -} - -func formatStampInfo(stamp *model.Stamp, thumb []model.FileThumbnail) *StampInfo { - si := &StampInfo{ - ID: stamp.ID, - Name: stamp.Name, - CreatorID: stamp.CreatorID, - FileID: stamp.FileID, - IsUnicode: stamp.IsUnicode, - CreatedAt: stamp.CreatedAt, - UpdatedAt: stamp.UpdatedAt, - DeletedAt: stamp.DeletedAt.Time, - Thumbnails: thumb, - } - return si -} - -func formatStampInfos(stamps []*model.Stamp, thumbs [][]model.FileThumbnail) []*StampInfo { - result := make([]*StampInfo, len(stamps)) - for i, stamp := range stamps { - result[i] = formatStampInfo(stamp, thumbs[i]) - } - return result -} diff --git a/router/v3/stamps.go b/router/v3/stamps.go index 162dfe354..6f2991ee0 100644 --- a/router/v3/stamps.go +++ b/router/v3/stamps.go @@ -10,7 +10,6 @@ import ( "github.com/gofrs/uuid" "github.com/labstack/echo/v4" - "github.com/traPtitech/traQ/model" "github.com/traPtitech/traQ/repository" "github.com/traPtitech/traQ/router/consts" "github.com/traPtitech/traQ/router/extension" @@ -72,15 +71,7 @@ func (h *Handlers) GetStamps(c echo.Context) error { return herror.InternalServerError(err) } - thumbs := make([][]model.FileThumbnail, len(stamps)) - for i, stamp := range stamps { - ts, err := h.Repo.GetFileMeta(stamp.FileID) - if err != nil { - return herror.InternalServerError(err) - } - thumbs[i] = ts.Thumbnails - } - return extension.ServeJSONWithETag(c, formatStampInfos(stamps, thumbs)) + return extension.ServeJSONWithETag(c, stamps) } // CreateStamp POST /stamps From 634342daec49d59760cebb7f837e35e4ffadccd4 Mon Sep 17 00:00:00 2001 From: azbcww <1121hatsuyuki@gmail.com> Date: Mon, 27 Nov 2023 19:29:02 +0900 Subject: [PATCH 19/25] convert GetAllStamps into GetAllStampsWithThumbnail --- model/stamps.go | 6 ++++ repository/gorm/stamp.go | 56 ++++++++++++++++++++++++++++------- repository/gorm/stamp_test.go | 4 +-- repository/stamp.go | 4 +-- router/v1/public.go | 4 +-- router/v3/stamps.go | 2 +- 6 files changed, 58 insertions(+), 18 deletions(-) diff --git a/model/stamps.go b/model/stamps.go index 3d7b70a0b..aadc89263 100644 --- a/model/stamps.go +++ b/model/stamps.go @@ -21,6 +21,12 @@ type Stamp struct { File *FileMeta `gorm:"constraint:stamps_file_id_files_id_foreign,OnUpdate:CASCADE,OnDelete:NO ACTION;foreignKey:FileID" json:"-"` } +// StampWithThumbnail サムネイル情報を付与したスタンプ構造体 +type StampWithThumbnail struct { + *Stamp + HasThumbnail bool `json:"hasThumbnail"` +} + // TableName スタンプテーブル名を取得します func (*Stamp) TableName() string { return "stamps" diff --git a/repository/gorm/stamp.go b/repository/gorm/stamp.go index 78d2fa20d..63dbd3e93 100644 --- a/repository/gorm/stamp.go +++ b/repository/gorm/stamp.go @@ -25,7 +25,7 @@ type stampRepository struct { db *gorm.DB hub *hub.Hub stamps *sc.Cache[struct{}, map[uuid.UUID]*model.Stamp] - perType *sc.Cache[repository.StampType, []*model.Stamp] + perType *sc.Cache[repository.StampType, []*model.StampWithThumbnail] } func makeStampRepository(db *gorm.DB, hub *hub.Hub) *stampRepository { @@ -48,26 +48,27 @@ func (r *stampRepository) loadStamps(_ context.Context, _ struct{}) (map[uuid.UU return stampsMap, nil } -func (r *stampRepository) loadFilteredStamps(ctx context.Context, stampType repository.StampType) ([]*model.Stamp, error) { +func (r *stampRepository) loadFilteredStamps(ctx context.Context, stampType repository.StampType) ([]*model.StampWithThumbnail, error) { stamps, err := r.stamps.Get(ctx, struct{}{}) if err != nil { return nil, err } - arr := make([]*model.Stamp, 0, len(stamps)) - + arr := make([]*model.StampWithThumbnail, 0, len(stamps)) + stampsWithThumbnail, err := r.StampThumbnailExists(stamps) + if err != nil { + return nil, err + } switch stampType { case repository.StampTypeAll: - for _, s := range stamps { - arr = append(arr, s) - } + arr = append(arr, stampsWithThumbnail...) case repository.StampTypeUnicode: - for _, s := range stamps { + for _, s := range stampsWithThumbnail { if s.IsUnicode { arr = append(arr, s) } } case repository.StampTypeOriginal: - for _, s := range stamps { + for _, s := range stampsWithThumbnail { if !s.IsUnicode { arr = append(arr, s) } @@ -270,8 +271,8 @@ func (r *stampRepository) DeleteStamp(id uuid.UUID) (err error) { return repository.ErrNotFound } -// GetAllStamps implements StampRepository interface. -func (r *stampRepository) GetAllStamps(stampType repository.StampType) (stamps []*model.Stamp, err error) { +// GetAllStampsWithThumbnail implements StampRepository interface. +func (r *stampRepository) GetAllStampsWithThumbnail(stampType repository.StampType) (stampsWithThumbnail []*model.StampWithThumbnail, err error) { return r.perType.Get(context.Background(), stampType) } @@ -343,3 +344,36 @@ func (r *stampRepository) GetStampStats(stampID uuid.UUID) (*repository.StampSta } return &stats, nil } + +func (r *stampRepository) StampThumbnailExists(stamps map[uuid.UUID]*model.Stamp) ([]*model.StampWithThumbnail, error) { + IDs := make([]uuid.UUID, len(stamps)) + stampsWithThumbnail := make([]*model.StampWithThumbnail, 0) + idx := 0 + for _, stamp := range stamps { + IDs[idx] = stamp.FileID + idx++ + } + + ts := []uuid.UUID{} + if err := r.db. + Table("files_thumbnails ft"). + Select("file_id"). + Where("file_id IN (?)", IDs). + Find(&ts). + Error; err != nil { + return stampsWithThumbnail, err + } + tm := make(map[uuid.UUID]struct{}, len(ts)) + for _, v := range ts { + tm[v] = struct{}{} + } + + for _, stamp := range stamps { + _, ok := tm[stamp.FileID] + stampsWithThumbnail = append(stampsWithThumbnail, &model.StampWithThumbnail{ + Stamp: stamp, + HasThumbnail: ok, + }) + } + return stampsWithThumbnail, nil +} diff --git a/repository/gorm/stamp_test.go b/repository/gorm/stamp_test.go index ba44ad238..8e816d6f5 100644 --- a/repository/gorm/stamp_test.go +++ b/repository/gorm/stamp_test.go @@ -197,7 +197,7 @@ func TestRepositoryImpl_DeleteStamp(t *testing.T) { }) } -func TestRepositoryImpl_GetAllStamps(t *testing.T) { +func TestRepositoryImpl_GetAllStampsWithThumbnail(t *testing.T) { t.Parallel() repo, assert, _ := setup(t, ex1) @@ -206,7 +206,7 @@ func TestRepositoryImpl_GetAllStamps(t *testing.T) { mustMakeStamp(t, repo, rand, uuid.Nil) } - arr, err := repo.GetAllStamps(repository.StampTypeAll) + arr, err := repo.GetAllStampsWithThumbnail(repository.StampTypeAll) if assert.NoError(err) { assert.Len(arr, n) } diff --git a/repository/stamp.go b/repository/stamp.go index d9188a9fb..dcb7d1509 100644 --- a/repository/stamp.go +++ b/repository/stamp.go @@ -85,11 +85,11 @@ type StampRepository interface { // 引数にuuid.Nilを指定した場合、ErrNilIDを返します。 // DBによるエラーを返すことがあります。 DeleteStamp(id uuid.UUID) (err error) - // GetAllStamps 全てのスタンプを取得します + // GetAllStampsWithThumbnail 全てのスタンプを取得します // // 成功した場合、スタンプのIDでソートされた配列とnilを返します。 // DBによるエラーを返すことがあります。 - GetAllStamps(stampType StampType) (stamps []*model.Stamp, err error) + GetAllStampsWithThumbnail(stampType StampType) (stamps []*model.StampWithThumbnail, err error) // StampExists 指定したIDのスタンプが存在するかどうかを返します // // 存在する場合、trueとnilを返します。 diff --git a/router/v1/public.go b/router/v1/public.go index e07131a25..c2bedbbb0 100644 --- a/router/v1/public.go +++ b/router/v1/public.go @@ -118,7 +118,7 @@ func (c *EmojiCache) Purge() { func emojiJSONGenerator(repo repository.Repository) func(_ context.Context, _ struct{}) ([]byte, error) { return func(_ context.Context, _ struct{}) ([]byte, error) { - stamps, err := repo.GetAllStamps(repository.StampTypeAll) + stamps, err := repo.GetAllStampsWithThumbnail(repository.StampTypeAll) if err != nil { return nil, err } @@ -141,7 +141,7 @@ func emojiJSONGenerator(repo repository.Repository) func(_ context.Context, _ st func emojiCSSGenerator(repo repository.Repository) func(_ context.Context, _ struct{}) ([]byte, error) { return func(_ context.Context, _ struct{}) ([]byte, error) { - stamps, err := repo.GetAllStamps(repository.StampTypeAll) + stamps, err := repo.GetAllStampsWithThumbnail(repository.StampTypeAll) if err != nil { return nil, err } diff --git a/router/v3/stamps.go b/router/v3/stamps.go index 6f2991ee0..7a6587b74 100644 --- a/router/v3/stamps.go +++ b/router/v3/stamps.go @@ -66,7 +66,7 @@ func (h *Handlers) GetStamps(c echo.Context) error { stampType = repository.StampTypeOriginal } - stamps, err := h.Repo.GetAllStamps(stampType) + stamps, err := h.Repo.GetAllStampsWithThumbnail(stampType) if err != nil { return herror.InternalServerError(err) } From c70583c16d0828a28d5f095c7ea425bc72279993 Mon Sep 17 00:00:00 2001 From: azbcww <1121hatsuyuki@gmail.com> Date: Mon, 27 Nov 2023 19:51:45 +0900 Subject: [PATCH 20/25] put StampThumbnailExists into loadFilteredStamps --- repository/gorm/stamp.go | 63 ++++++++++++++++++---------------------- 1 file changed, 29 insertions(+), 34 deletions(-) diff --git a/repository/gorm/stamp.go b/repository/gorm/stamp.go index 63dbd3e93..826ac70c2 100644 --- a/repository/gorm/stamp.go +++ b/repository/gorm/stamp.go @@ -54,7 +54,35 @@ func (r *stampRepository) loadFilteredStamps(ctx context.Context, stampType repo return nil, err } arr := make([]*model.StampWithThumbnail, 0, len(stamps)) - stampsWithThumbnail, err := r.StampThumbnailExists(stamps) + + IDs := make([]uuid.UUID, 0, len(stamps)) + stampsWithThumbnail := make([]*model.StampWithThumbnail, 0, len(stamps)) + for _, stamp := range stamps { + IDs = append(IDs, stamp.FileID) + } + + ts := []uuid.UUID{} + if err := r.db. + Table("files_thumbnails ft"). + Select("file_id"). + Where("file_id IN (?)", IDs). + Find(&ts). + Error; err != nil { + return stampsWithThumbnail, err + } + tm := make(map[uuid.UUID]struct{}, len(ts)) + for _, v := range ts { + tm[v] = struct{}{} + } + + for _, stamp := range stamps { + _, ok := tm[stamp.FileID] + stampsWithThumbnail = append(stampsWithThumbnail, &model.StampWithThumbnail{ + Stamp: stamp, + HasThumbnail: ok, + }) + } + if err != nil { return nil, err } @@ -344,36 +372,3 @@ func (r *stampRepository) GetStampStats(stampID uuid.UUID) (*repository.StampSta } return &stats, nil } - -func (r *stampRepository) StampThumbnailExists(stamps map[uuid.UUID]*model.Stamp) ([]*model.StampWithThumbnail, error) { - IDs := make([]uuid.UUID, len(stamps)) - stampsWithThumbnail := make([]*model.StampWithThumbnail, 0) - idx := 0 - for _, stamp := range stamps { - IDs[idx] = stamp.FileID - idx++ - } - - ts := []uuid.UUID{} - if err := r.db. - Table("files_thumbnails ft"). - Select("file_id"). - Where("file_id IN (?)", IDs). - Find(&ts). - Error; err != nil { - return stampsWithThumbnail, err - } - tm := make(map[uuid.UUID]struct{}, len(ts)) - for _, v := range ts { - tm[v] = struct{}{} - } - - for _, stamp := range stamps { - _, ok := tm[stamp.FileID] - stampsWithThumbnail = append(stampsWithThumbnail, &model.StampWithThumbnail{ - Stamp: stamp, - HasThumbnail: ok, - }) - } - return stampsWithThumbnail, nil -} From b2d6939756e39fb93f3b630380f4a170e20f000f Mon Sep 17 00:00:00 2001 From: azbcww <1121hatsuyuki@gmail.com> Date: Mon, 27 Nov 2023 20:07:18 +0900 Subject: [PATCH 21/25] use make([]uuid.UUID, 0, len(stamps)) to define ts --- repository/gorm/stamp.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/repository/gorm/stamp.go b/repository/gorm/stamp.go index 826ac70c2..1615ecc18 100644 --- a/repository/gorm/stamp.go +++ b/repository/gorm/stamp.go @@ -61,7 +61,7 @@ func (r *stampRepository) loadFilteredStamps(ctx context.Context, stampType repo IDs = append(IDs, stamp.FileID) } - ts := []uuid.UUID{} + ts := make([]uuid.UUID, 0, len(stamps)) if err := r.db. Table("files_thumbnails ft"). Select("file_id"). From b7a434d3f664928da106586db0b6230208810e0b Mon Sep 17 00:00:00 2001 From: azbcww <1121hatsuyuki@gmail.com> Date: Tue, 28 Nov 2023 21:07:38 +0900 Subject: [PATCH 22/25] correction of the part pointed out --- repository/gorm/stamp.go | 16 ++++++++-------- repository/stamp.go | 2 +- 2 files changed, 9 insertions(+), 9 deletions(-) diff --git a/repository/gorm/stamp.go b/repository/gorm/stamp.go index 1615ecc18..275c2bbd8 100644 --- a/repository/gorm/stamp.go +++ b/repository/gorm/stamp.go @@ -61,22 +61,22 @@ func (r *stampRepository) loadFilteredStamps(ctx context.Context, stampType repo IDs = append(IDs, stamp.FileID) } - ts := make([]uuid.UUID, 0, len(stamps)) + thumbnails := make([]uuid.UUID, 0, len(stamps)) if err := r.db. - Table("files_thumbnails ft"). + Table("files_thumbnails"). Select("file_id"). Where("file_id IN (?)", IDs). - Find(&ts). + Find(&thumbnails). Error; err != nil { - return stampsWithThumbnail, err + return nil, err } - tm := make(map[uuid.UUID]struct{}, len(ts)) - for _, v := range ts { - tm[v] = struct{}{} + thumbnailExists := make(map[uuid.UUID]struct{}, len(thumbnails)) + for _, v := range thumbnails { + thumbnailExists[v] = struct{}{} } for _, stamp := range stamps { - _, ok := tm[stamp.FileID] + _, ok := thumbnailExists[stamp.FileID] stampsWithThumbnail = append(stampsWithThumbnail, &model.StampWithThumbnail{ Stamp: stamp, HasThumbnail: ok, diff --git a/repository/stamp.go b/repository/stamp.go index dcb7d1509..003e73737 100644 --- a/repository/stamp.go +++ b/repository/stamp.go @@ -85,7 +85,7 @@ type StampRepository interface { // 引数にuuid.Nilを指定した場合、ErrNilIDを返します。 // DBによるエラーを返すことがあります。 DeleteStamp(id uuid.UUID) (err error) - // GetAllStampsWithThumbnail 全てのスタンプを取得します + // GetAllStampsWithThumbnail 全てのスタンプとサムネイルの有無を取得します // // 成功した場合、スタンプのIDでソートされた配列とnilを返します。 // DBによるエラーを返すことがあります。 From c84387f43fcfd581fa796ff85cc872a953aea473 Mon Sep 17 00:00:00 2001 From: azbcww <1121hatsuyuki@gmail.com> Date: Fri, 1 Dec 2023 18:45:13 +0900 Subject: [PATCH 23/25] add test --- repository/gorm/stamp_test.go | 40 ++++++++++++++++++++++++++++++----- 1 file changed, 35 insertions(+), 5 deletions(-) diff --git a/repository/gorm/stamp_test.go b/repository/gorm/stamp_test.go index 8e816d6f5..2a7614713 100644 --- a/repository/gorm/stamp_test.go +++ b/repository/gorm/stamp_test.go @@ -199,17 +199,47 @@ func TestRepositoryImpl_DeleteStamp(t *testing.T) { func TestRepositoryImpl_GetAllStampsWithThumbnail(t *testing.T) { t.Parallel() - repo, assert, _ := setup(t, ex1) + repo, assert, require := setup(t, ex1) n := 10 + for i := 0; i < 10; i++ { mustMakeStamp(t, repo, rand, uuid.Nil) } - - arr, err := repo.GetAllStampsWithThumbnail(repository.StampTypeAll) - if assert.NoError(err) { - assert.Len(arr, n) + for i := 0; i < 10; i++ { + stamp := mustMakeStamp(t, repo, rand, uuid.Nil) + err := repo.DeleteFileMeta(stamp.FileID) + require.NoError(err) } + + t.Run("without thumbnail", func(t *testing.T) { + t.Parallel() + arr, err := repo.GetAllStampsWithThumbnail(repository.StampTypeAll) + if assert.NoError(err) { + assert.Len(arr, n*2) + cnt := 0 + for _, s := range arr { + if !s.HasThumbnail { + cnt++ + } + } + assert.Equal(n, cnt) + } + }) + t.Run("with thumbnail", func(t *testing.T) { + t.Parallel() + arr, err := repo.GetAllStampsWithThumbnail(repository.StampTypeAll) + if assert.NoError(err) { + assert.Len(arr, n*2) + cnt := 0 + for _, s := range arr { + if s.HasThumbnail { + cnt++ + } + } + assert.Equal(n, cnt) + } + }) } func TestRepositoryImpl_StampExists(t *testing.T) { From d62fa7962532a8f0d29a57d5dd7d81d213490df6 Mon Sep 17 00:00:00 2001 From: azbcww <1121hatsuyuki@gmail.com> Date: Sun, 3 Dec 2023 15:34:29 +0900 Subject: [PATCH 24/25] edit swagger and fix nesting depth --- docs/v3-api.yaml | 4 ++++ repository/gorm/stamp_test.go | 34 ++++++++++++++++++---------------- 2 files changed, 22 insertions(+), 16 deletions(-) diff --git a/docs/v3-api.yaml b/docs/v3-api.yaml index 12fbb3aeb..19f880188 100644 --- a/docs/v3-api.yaml +++ b/docs/v3-api.yaml @@ -4765,6 +4765,9 @@ components: isUnicode: type: boolean description: Unicode絵文字か + hasThumbnail: + type: boolean + description: サムネイルの有無 required: - id - name @@ -4773,6 +4776,7 @@ components: - updatedAt - fileId - isUnicode + - hasThumbnail PostStampRequest: title: PostStampRequest type: object diff --git a/repository/gorm/stamp_test.go b/repository/gorm/stamp_test.go index 2a7614713..88b03ed66 100644 --- a/repository/gorm/stamp_test.go +++ b/repository/gorm/stamp_test.go @@ -215,30 +215,32 @@ func TestRepositoryImpl_GetAllStampsWithThumbnail(t *testing.T) { t.Run("without thumbnail", func(t *testing.T) { t.Parallel() arr, err := repo.GetAllStampsWithThumbnail(repository.StampTypeAll) - if assert.NoError(err) { - assert.Len(arr, n*2) - cnt := 0 - for _, s := range arr { - if !s.HasThumbnail { - cnt++ - } + if !assert.NoError(err) { + t.FailNow() + } + assert.Len(arr, n*2) + cnt := 0 + for _, s := range arr { + if !s.HasThumbnail { + cnt++ } - assert.Equal(n, cnt) } + assert.Equal(n, cnt) }) t.Run("with thumbnail", func(t *testing.T) { t.Parallel() arr, err := repo.GetAllStampsWithThumbnail(repository.StampTypeAll) - if assert.NoError(err) { - assert.Len(arr, n*2) - cnt := 0 - for _, s := range arr { - if s.HasThumbnail { - cnt++ - } + if !assert.NoError(err) { + t.FailNow() + } + assert.Len(arr, n*2) + cnt := 0 + for _, s := range arr { + if s.HasThumbnail { + cnt++ } - assert.Equal(n, cnt) } + assert.Equal(n, cnt) }) } From 47df0e89917b1daef62dd70a7fb805853501953b Mon Sep 17 00:00:00 2001 From: azbcww <1121hatsuyuki@gmail.com> Date: Tue, 5 Dec 2023 20:33:40 +0900 Subject: [PATCH 25/25] edit OpenAPI schema --- docs/v3-api.yaml | 50 +++++++++++++++++++++++++++++++++++++++++++----- 1 file changed, 45 insertions(+), 5 deletions(-) diff --git a/docs/v3-api.yaml b/docs/v3-api.yaml index 19f880188..6838edfe7 100644 --- a/docs/v3-api.yaml +++ b/docs/v3-api.yaml @@ -799,7 +799,7 @@ paths: schema: type: array items: - $ref: '#/components/schemas/Stamp' + $ref: '#/components/schemas/StampWithThumbnail' operationId: getStamps tags: - stamp @@ -4765,9 +4765,6 @@ components: isUnicode: type: boolean description: Unicode絵文字か - hasThumbnail: - type: boolean - description: サムネイルの有無 required: - id - name @@ -4776,7 +4773,6 @@ components: - updatedAt - fileId - isUnicode - - hasThumbnail PostStampRequest: title: PostStampRequest type: object @@ -4809,6 +4805,50 @@ components: required: - stampId - datetime + StampWithThumbnail: + title: StampWithThumbnail + type: object + description: スタンプ情報とサムネイルの有無 + properties: + id: + type: string + format: uuid + description: スタンプUUID + name: + type: string + description: スタンプ名 + pattern: '^[a-zA-Z0-9_-]{1,32}$' + creatorId: + type: string + description: 作成者UUID + format: uuid + createdAt: + type: string + description: 作成日時 + format: date-time + updatedAt: + type: string + description: 更新日時 + format: date-time + fileId: + type: string + format: uuid + description: ファイルUUID + isUnicode: + type: boolean + description: Unicode絵文字か + hasThumbnail: + type: boolean + description: サムネイルの有無 + required: + - id + - name + - creatorId + - createdAt + - updatedAt + - fileId + - isUnicode + - hasThumbnail User: title: User type: object