Skip to content

Commit 4595335

Browse files
committed
feat: 숨겨진 상품 관련 필드 및 로직 제거
1 parent eb7259b commit 4595335

11 files changed

Lines changed: 16 additions & 39 deletions

File tree

app/admin_api/filtersets/shop/products.py

Lines changed: 4 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,6 @@ class ProductAdminFilterSet(filters.FilterSet):
1010
name = MultiFieldOrCharInFilter(field_names=["name_ko", "name_en"], lookup_expr="icontains")
1111
category = filters.BaseInFilter(field_name="category_id")
1212
category_group = filters.BaseInFilter(field_name="category__group_id")
13-
hidden = filters.BooleanFilter(field_name="hidden")
1413
tag = filters.BaseInFilter(field_name="tag_set", distinct=True)
1514

1615
price_min = filters.NumberFilter(field_name="price", lookup_expr="gte")
@@ -22,21 +21,17 @@ def filter_by_status(self, queryset, name, values):
2221
now = now_aware()
2322
q = Q()
2423
for value in values:
25-
if value == Product.CurrentStatus.HIDDEN:
26-
q |= Q(hidden=True)
27-
elif value == Product.CurrentStatus.OUT_OF_VISIBLE_PERIOD:
28-
q |= Q(hidden=False) & (Q(visible_starts_at__gt=now) | Q(visible_ends_at__lt=now))
24+
if value == Product.CurrentStatus.OUT_OF_VISIBLE_PERIOD:
25+
q |= Q(visible_starts_at__gt=now) | Q(visible_ends_at__lt=now)
2926
elif value == Product.CurrentStatus.OUT_OF_ORDERABLE_PERIOD:
3027
q |= (
31-
Q(hidden=False)
32-
& Q(visible_starts_at__lte=now)
28+
Q(visible_starts_at__lte=now)
3329
& Q(visible_ends_at__gte=now)
3430
& (Q(orderable_starts_at__gt=now) | Q(orderable_ends_at__lt=now))
3531
)
3632
elif value == Product.CurrentStatus.ACTIVE:
3733
q |= (
38-
Q(hidden=False)
39-
& Q(visible_starts_at__lte=now)
34+
Q(visible_starts_at__lte=now)
4035
& Q(visible_ends_at__gte=now)
4136
& Q(orderable_starts_at__lte=now)
4237
& Q(orderable_ends_at__gte=now)
@@ -50,7 +45,6 @@ class Meta:
5045
"name",
5146
"category",
5247
"category_group",
53-
"hidden",
5448
"tag",
5549
"price_min",
5650
"price_max",

app/admin_api/serializers/shop/products.py

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -129,7 +129,6 @@ class Meta:
129129
"image",
130130
"price",
131131
"stock",
132-
"hidden",
133132
"max_quantity_per_user",
134133
"visible_starts_at",
135134
"visible_ends_at",

app/admin_api/test/shop/products_api_test.py

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -63,7 +63,6 @@ def test_admin_product_create_returns_201(api_client, product):
6363
"name_en": "New Product",
6464
"price": 1000,
6565
"stock": 10,
66-
"hidden": False,
6766
"visible_starts_at": FAR_PAST.isoformat(),
6867
"visible_ends_at": FAR_FUTURE.isoformat(),
6968
"orderable_starts_at": FAR_PAST.isoformat(),

app/shop/conftest.py

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -156,7 +156,6 @@ def products_by_status(product) -> dict[Product.CurrentStatus, Product]:
156156
}
157157
return {
158158
Product.CurrentStatus.ACTIVE: product,
159-
Product.CurrentStatus.HIDDEN: Product.objects.create(name="hidden", hidden=True, **common),
160159
Product.CurrentStatus.OUT_OF_VISIBLE_PERIOD: Product.objects.create(
161160
**{**common, "visible_starts_at": FAR_FUTURE}, name="oov"
162161
),

app/shop/order/views/carts.py

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -80,8 +80,6 @@ def get_queryset(self) -> QuerySet[Order]:
8080
~Exists(PaymentHistory.objects.filter(order=OuterRef("order"))),
8181
order__deleted_at__isnull=True,
8282
order__user=self.request.user,
83-
# 숨겨진 상품(추가 후원, 배송비 등)은 별도의 API를 통해서만 추가/삭제가 가능합니다.
84-
product__hidden=False,
8583
single_product_cart__isnull=True,
8684
status=OrderProductRelation.OrderProductStatus.pending,
8785
).all()
Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,11 @@
1+
# Generated by Django 6.0.5 on 2026-05-24 07:46
2+
3+
from django.db import migrations
4+
5+
6+
class Migration(migrations.Migration):
7+
dependencies = [("product", "0002_image_to_publicfile")]
8+
operations = [
9+
migrations.RemoveField(model_name="historicalproduct", name="hidden"),
10+
migrations.RemoveField(model_name="product", name="hidden"),
11+
]

app/shop/product/models.py

Lines changed: 0 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -106,7 +106,6 @@ def get_user_taken_stock_count(
106106

107107
class Product(BaseAbstractModel):
108108
class CurrentStatus(models.TextChoices):
109-
HIDDEN = "hidden", "비공개"
110109
OUT_OF_VISIBLE_PERIOD = "out_of_visible_period", "노출 기간 아님"
111110
OUT_OF_ORDERABLE_PERIOD = "out_of_orderable_period", "판매 기간 아님"
112111
ACTIVE = "active", "노출 중"
@@ -124,7 +123,6 @@ class CurrentStatus(models.TextChoices):
124123

125124
price = models.PositiveIntegerField()
126125
stock = models.IntegerField(default=0)
127-
hidden = models.BooleanField(default=False)
128126

129127
max_quantity_per_user = models.IntegerField(default=0)
130128
visible_starts_at = models.DateTimeField(default=datetime.datetime.min)
@@ -154,9 +152,6 @@ def __str__(self) -> str: # pragma: no cover
154152

155153
@property
156154
def current_status(self) -> "Product.CurrentStatus":
157-
if self.hidden:
158-
return self.CurrentStatus.HIDDEN
159-
160155
now = now_aware()
161156
if (self.visible_starts_at and now < self.visible_starts_at) or (
162157
self.visible_ends_at and now > self.visible_ends_at

app/shop/product/test/product_api_test.py

Lines changed: 0 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -22,15 +22,6 @@ def test_product_list_returns_visible_products(anon_client, product):
2222
assert response.json() == ProductDto(instance=expected_qs, many=True).data
2323

2424

25-
@pytest.mark.django_db
26-
def test_product_list_excludes_hidden_products(anon_client, product):
27-
product.hidden = True
28-
product.save()
29-
response = ProductsApi(http_client=anon_client).list()
30-
assert response.status_code == HTTP_200_OK
31-
assert response.json() == []
32-
33-
3425
@freeze_time(datetime(2010, 1, 1, tzinfo=timezone.utc))
3526
@pytest.mark.django_db
3627
def test_product_list_excludes_products_outside_visible_window(anon_client, product):

app/shop/product/test/stock_test.py

Lines changed: 0 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -6,14 +6,6 @@
66
from shop.product.models import Option, Product, Tag
77

88

9-
@pytest.mark.django_db
10-
def test_product_current_status_returns_hidden_when_hidden_flag_set(product):
11-
# hidden=True 는 모든 datetime 분기보다 우선.
12-
product.hidden = True
13-
product.save()
14-
assert product.current_status == Product.CurrentStatus.HIDDEN
15-
16-
179
@freeze_time(datetime(2010, 1, 1, tzinfo=timezone.utc))
1810
@pytest.mark.django_db
1911
def test_product_current_status_returns_out_of_visible_period_when_before_visible_window(product):

app/shop/product/views.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -45,7 +45,7 @@ class ProductViewSet(mixins.ListModelMixin, mixins.RetrieveModelMixin, viewsets.
4545
def get_queryset(self) -> QuerySet[Product]:
4646
# 현재 노출 가능한 상품만 보여야 합니다.
4747
now = now_aware()
48-
filter = Q(visible_starts_at__lte=now, visible_ends_at__gte=now, hidden=False)
48+
filter = Q(visible_starts_at__lte=now, visible_ends_at__gte=now)
4949

5050
if self.action == "retrieve" and isinstance(self.request.user, UserExt):
5151
# 단, 사용자가 구매한 상품인 경우, 노출 기간에 상관없이 상세 정보를 조회할 수 있어야 합니다.

0 commit comments

Comments
 (0)