Skip to content

Commit 12391aa

Browse files
committed
Merge branch 'develop' of https://github.com/pirogramming/Moodico into main-test
2 parents f91d9a3 + e055b54 commit 12391aa

9 files changed

Lines changed: 1049 additions & 100 deletions

File tree

moodico/main/views.py

Lines changed: 42 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,7 @@
11
from django.shortcuts import render
22
from moodico.products.views import get_top_liked_products
3+
from moodico.products.models import ProductLike
4+
import random
35

46
# Create your views here.
57

@@ -8,8 +10,47 @@ def main(request):
810
# 상위 3개의 인기 제품만 메인페이지에 표시
911
top_liked_products = get_top_liked_products(3)
1012

13+
# 오늘의 추천 제품 선택
14+
recommended_product = None
15+
16+
if request.user.is_authenticated:
17+
# 로그인한 사용자의 경우: 찜한 제품 중 랜덤 선택
18+
user_liked_products = ProductLike.objects.filter(user=request.user)
19+
if user_liked_products.exists():
20+
# 찜한 제품이 있으면 랜덤으로 하나 선택
21+
random_like = random.choice(user_liked_products)
22+
recommended_product = {
23+
'product_name': random_like.product_name,
24+
'product_brand': random_like.product_brand,
25+
'product_image': random_like.product_image,
26+
'like_count': 1, # 사용자가 찜한 제품이므로 1
27+
'is_user_liked': True
28+
}
29+
30+
if not recommended_product:
31+
# 사용자가 찜한 제품이 없거나 비로그인인 경우: 인기 제품 중 랜덤 선택
32+
if top_liked_products:
33+
random_product = random.choice(top_liked_products)
34+
recommended_product = {
35+
'product_name': random_product['product_name'],
36+
'product_brand': random_product['product_brand'],
37+
'product_image': random_product['product_image'],
38+
'like_count': random_product['like_count'],
39+
'is_user_liked': False
40+
}
41+
else:
42+
# 아무 제품도 없는 경우 기본값
43+
recommended_product = {
44+
'product_name': '추천 제품 준비 중',
45+
'product_brand': '',
46+
'product_image': '/static/images/test.jpg',
47+
'like_count': 0,
48+
'is_user_liked': False
49+
}
50+
1151
return render(request, 'main/main.html', {
12-
'top_liked_products': top_liked_products
52+
'top_liked_products': top_liked_products,
53+
'recommended_product': recommended_product
1354
})
1455

1556

Lines changed: 33 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,33 @@
1+
# Generated by Django 5.2.4 on 2025-08-16 14:31
2+
3+
import django.db.models.deletion
4+
import uuid
5+
from django.conf import settings
6+
from django.db import migrations, models
7+
8+
9+
class Migration(migrations.Migration):
10+
11+
dependencies = [
12+
('products', '0009_productratingimage'),
13+
migrations.swappable_dependency(settings.AUTH_USER_MODEL),
14+
]
15+
16+
operations = [
17+
migrations.CreateModel(
18+
name='ProductVote',
19+
fields=[
20+
('id', models.UUIDField(default=uuid.uuid4, editable=False, primary_key=True, serialize=False, verbose_name='투표 식별자')),
21+
('session_nickname', models.CharField(blank=True, max_length=100, null=True, verbose_name='세션 닉네임')),
22+
('product_id', models.CharField(max_length=255, verbose_name='제품 ID')),
23+
('product_name', models.CharField(max_length=255, verbose_name='제품명')),
24+
('product_brand', models.CharField(max_length=255, verbose_name='브랜드')),
25+
('created_at', models.DateTimeField(auto_now_add=True, verbose_name='투표 날짜')),
26+
('user', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, to=settings.AUTH_USER_MODEL, verbose_name='사용자')),
27+
],
28+
options={
29+
'ordering': ['-created_at'],
30+
'unique_together': {('user', 'product_id')},
31+
},
32+
),
33+
]

moodico/products/views.py

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,11 @@
1717
# Create your views here.
1818
def color_matrix_explore(request):
1919
"""색상 매트릭스 페이지 뷰"""
20+
# 로그인이 되어있다면, 찜한 제품 정보 불러오기
21+
liked_product_ids = set()
22+
if request.user.is_authenticated:
23+
liked_product_ids = set(ProductLike.objects.filter(user=request.user).values_list('product_id', flat=True))
24+
2025
static_cluster = os.path.join(settings.BASE_DIR, 'static','data', 'products_clustered.json')
2126
static_all = os.path.join(settings.BASE_DIR, 'static', 'data', 'all_products.json')
2227

@@ -29,6 +34,10 @@ def color_matrix_explore(request):
2934
with open(product_path, 'r', encoding='utf-8') as f:
3035
products = json.load(f)
3136

37+
# 찜 여부 추가
38+
for product in products:
39+
product['is_liked'] = product.get('id') in liked_product_ids
40+
3241
return render(request, 'recommendation/color_matrix.html', {'makeupProducts': products})
3342
from django.templatetags.static import static
3443
def product_detail(request, product_id):

0 commit comments

Comments
 (0)