Skip to content

Commit

Permalink
Merge pull request #250 from kmc-jp/fix-tag-name-collation
Browse files Browse the repository at this point in the history
タグ名のひらがな・カタカナを区別して保存する
  • Loading branch information
utgwkk committed Jan 23, 2024
2 parents f675295 + 0effdf1 commit 77d615c
Show file tree
Hide file tree
Showing 3 changed files with 46 additions and 3 deletions.
6 changes: 3 additions & 3 deletions api/src/goduploader/model/tag.py
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
from typing import List
import unicodedata
from datetime import datetime
from typing import List
from urllib.parse import urljoin

from goduploader.config import app_config
Expand All @@ -25,12 +25,12 @@ class Tag(Base):

# 正規化した (小文字に統一した) タグ名
canonical_name = Column(
String(255),
String(255, collation='utf8mb4_general_ci'),
nullable=False,
unique=True,
)
# 表示されるタグ名
name = Column(String(255), nullable=False)
name = Column(String(255, collation='utf8mb4_general_ci'), nullable=False)
artworks_count = Column(Integer, nullable=False, default=0)

index_artworks_count = Index("tag_artworks_count", artworks_count)
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,30 @@
"""change tag name collation to utf8mb4_general_ci
Revision ID: 4f308d092386
Revises: aa084f2c60f6
Create Date: 2024-01-23 21:18:51.543256
"""
from alembic import op
import sqlalchemy as sa


# revision identifiers, used by Alembic.
revision = '4f308d092386'
down_revision = 'aa084f2c60f6'
branch_labels = None
depends_on = None


def upgrade():
# ### commands auto generated by Alembic - please adjust! ###
op.alter_column('tag', 'canonical_name', type_=sa.types.VARCHAR(255, collation='utf8mb4_general_ci'))
op.alter_column('tag', 'name', type_=sa.types.VARCHAR(255, collation='utf8mb4_general_ci'))
# ### end Alembic commands ###


def downgrade():
# ### commands auto generated by Alembic - please adjust! ###
op.alter_column('tag', 'canonical_name', type_=sa.types.VARCHAR(255))
op.alter_column('tag', 'name', type_=sa.types.VARCHAR(255))
# ### end Alembic commands ###
13 changes: 13 additions & 0 deletions api/tests/model/test_tag.py
Original file line number Diff line number Diff line change
Expand Up @@ -30,6 +30,19 @@ def test_find_or_create():
assert created_tags[1].name == "BBB"
assert created_tags[1].canonical_name == "bbb"

# COLLATE=utf8mb4_0900_ai_ci でひらがなカタカナを区別せず、タグが作れていなかったことに対するリグレッションテスト
created_tags = Tag.find_or_create(["ロリ"])
session.commit()

assert created_tags[0].name == "ロリ"
assert created_tags[0].canonical_name == "ロリ"

created_tags = Tag.find_or_create(["ろり"])
session.commit()

assert created_tags[0].name == "ろり"
assert created_tags[0].canonical_name == "ろり"


@pytest.mark.parametrize(
"tag_name, expected",
Expand Down

0 comments on commit 77d615c

Please sign in to comment.