mirror of
https://github.com/narrrl/holy-flavor-rater.git
synced 2026-11-03 16:41:27 +01:00
Merge branch 'main' into narl.io
This commit is contained in:
commit
e806dffe9c
3 files changed
+17
-7
No files matched your search
@@ -599,6 +599,7 @@ class UserViewSet(viewsets.ModelViewSet):
|
|||||||
|
|
||||||
# Missing flavors with community avg and followed circle avg
|
# Missing flavors with community avg and followed circle avg
|
||||||
missing_flavors = Flavor.objects.exclude(id__in=rated_ids) \
|
missing_flavors = Flavor.objects.exclude(id__in=rated_ids) \
|
||||||
|
.exclude(category__name='Packs and other') \
|
||||||
.select_related('category') \
|
.select_related('category') \
|
||||||
.annotate(
|
.annotate(
|
||||||
average_rating=Avg('ratings__score'),
|
average_rating=Avg('ratings__score'),
|
||||||
|
|||||||
@@ -5,8 +5,13 @@ set -e
|
|||||||
|
|
||||||
# Apply database migrations
|
# Apply database migrations
|
||||||
echo "Applying database migrations..."
|
echo "Applying database migrations..."
|
||||||
|
python manage.py makemigrations
|
||||||
python manage.py migrate
|
python manage.py migrate
|
||||||
|
|
||||||
|
# Create cache table for ratelimiting
|
||||||
|
echo "Creating cache table..."
|
||||||
|
python manage.py createcachetable
|
||||||
|
|
||||||
# Collect static files
|
# Collect static files
|
||||||
echo "Collecting static files..."
|
echo "Collecting static files..."
|
||||||
python manage.py collectstatic --no-input
|
python manage.py collectstatic --no-input
|
||||||
@@ -20,6 +25,10 @@ chmod -R 777 django_cache
|
|||||||
echo "Syncing flavors..."
|
echo "Syncing flavors..."
|
||||||
python manage.py sync_flavors
|
python manage.py sync_flavors
|
||||||
|
|
||||||
|
# Seed legacy flavors if needed
|
||||||
|
echo "Seeding legacy flavors..."
|
||||||
|
python manage.py seed_legacy_flavors
|
||||||
|
|
||||||
# Start the server using Gunicorn
|
# Start the server using Gunicorn
|
||||||
echo "Starting Gunicorn..."
|
echo "Starting Gunicorn..."
|
||||||
exec gunicorn holy_backend.wsgi:application --bind 0.0.0.0:8000 --workers 3 --timeout 120
|
exec gunicorn holy_backend.wsgi:application --bind 0.0.0.0:8000 --workers 3 --timeout 120
|
||||||
@@ -139,7 +139,7 @@ const Dashboard: React.FC = () => {
|
|||||||
// Performance Optimization: Memoize categories and filtered lists
|
// Performance Optimization: Memoize categories and filtered lists
|
||||||
const exploreCategories = useMemo(() => {
|
const exploreCategories = useMemo(() => {
|
||||||
if (!data) return ['All'];
|
if (!data) return ['All'];
|
||||||
const cats = new Set(data.missing_flavors.map(f => f.category_name));
|
const cats = new Set(data.missing_flavors.filter(f => f.category_name !== 'Packs and other').map(f => f.category_name));
|
||||||
return ['All', ...Array.from(cats).sort()];
|
return ['All', ...Array.from(cats).sort()];
|
||||||
}, [data]);
|
}, [data]);
|
||||||
|
|
||||||
@@ -287,12 +287,12 @@ const Dashboard: React.FC = () => {
|
|||||||
</Grid>
|
</Grid>
|
||||||
|
|
||||||
<Grid size={{ xs: 12, lg: 'auto' }}>
|
<Grid size={{ xs: 12, lg: 'auto' }}>
|
||||||
<Box sx={{ bgcolor: 'background.paper', p: 0.5, borderRadius: 1, border: '1px solid', borderColor: 'divider', height: { xs: 48, lg: 40 }, display: 'flex', gap: 0.5 }}>
|
<Box sx={{ bgcolor: 'background.paper', p: 0.5, borderRadius: 1, border: '1px solid', borderColor: 'divider', minHeight: 40, display: 'flex', gap: 0.5, flexWrap: { xs: 'wrap', sm: 'nowrap' } }}>
|
||||||
<Button
|
<Button
|
||||||
fullWidth
|
fullWidth
|
||||||
size="small" variant={ratedSort === 'date' ? 'contained' : 'text'}
|
size="small" variant={ratedSort === 'date' ? 'contained' : 'text'}
|
||||||
onClick={() => setRatedSort('date')}
|
onClick={() => setRatedSort('date')}
|
||||||
sx={{ textTransform: 'none', fontWeight: 'bold', borderRadius: 0.8, height: { xs: 38, lg: 30 }, fontSize: '0.8rem' }}
|
sx={{ textTransform: 'none', fontWeight: 'bold', borderRadius: 0.8, height: 32, px: { xs: 1, sm: 2 }, fontSize: '0.8rem', whiteSpace: 'nowrap', minWidth: 'fit-content' }}
|
||||||
>
|
>
|
||||||
{t('dashboard.date')}
|
{t('dashboard.date')}
|
||||||
</Button>
|
</Button>
|
||||||
@@ -300,7 +300,7 @@ const Dashboard: React.FC = () => {
|
|||||||
fullWidth
|
fullWidth
|
||||||
size="small" variant={ratedSort === 'rating' ? 'contained' : 'text'}
|
size="small" variant={ratedSort === 'rating' ? 'contained' : 'text'}
|
||||||
onClick={() => setRatedSort('rating')}
|
onClick={() => setRatedSort('rating')}
|
||||||
sx={{ textTransform: 'none', fontWeight: 'bold', borderRadius: 0.8, height: { xs: 38, lg: 30 }, fontSize: '0.8rem' }}
|
sx={{ textTransform: 'none', fontWeight: 'bold', borderRadius: 0.8, height: 32, px: { xs: 1, sm: 2 }, fontSize: '0.8rem', whiteSpace: 'nowrap', minWidth: 'fit-content' }}
|
||||||
>
|
>
|
||||||
{t('dashboard.rating')}
|
{t('dashboard.rating')}
|
||||||
</Button>
|
</Button>
|
||||||
@@ -463,12 +463,12 @@ const Dashboard: React.FC = () => {
|
|||||||
</Grid>
|
</Grid>
|
||||||
|
|
||||||
<Grid size={{ xs: 12, lg: 'auto' }}>
|
<Grid size={{ xs: 12, lg: 'auto' }}>
|
||||||
<Box sx={{ bgcolor: 'background.paper', p: 0.5, borderRadius: 1, border: '1px solid', borderColor: 'divider', height: { xs: 48, lg: 40 }, display: 'flex', gap: 0.5 }}>
|
<Box sx={{ bgcolor: 'background.paper', p: 0.5, borderRadius: 1, border: '1px solid', borderColor: 'divider', minHeight: 40, display: 'flex', gap: 0.5, flexWrap: { xs: 'wrap', sm: 'nowrap' } }}>
|
||||||
<Button
|
<Button
|
||||||
fullWidth
|
fullWidth
|
||||||
size="small" variant={exploreSort === 'community' ? 'contained' : 'text'}
|
size="small" variant={exploreSort === 'community' ? 'contained' : 'text'}
|
||||||
onClick={() => setExploreSort('community')}
|
onClick={() => setExploreSort('community')}
|
||||||
sx={{ textTransform: 'none', fontWeight: 'bold', borderRadius: 0.8, height: { xs: 38, lg: 30 }, px: 2, fontSize: '0.8rem' }}
|
sx={{ textTransform: 'none', fontWeight: 'bold', borderRadius: 0.8, height: 32, px: { xs: 1, sm: 2 }, fontSize: '0.8rem', whiteSpace: 'nowrap', minWidth: 'fit-content' }}
|
||||||
>
|
>
|
||||||
{t('dashboard.communityRating')}
|
{t('dashboard.communityRating')}
|
||||||
</Button>
|
</Button>
|
||||||
@@ -476,7 +476,7 @@ const Dashboard: React.FC = () => {
|
|||||||
fullWidth
|
fullWidth
|
||||||
size="small" variant={exploreSort === 'circle' ? 'contained' : 'text'}
|
size="small" variant={exploreSort === 'circle' ? 'contained' : 'text'}
|
||||||
onClick={() => setExploreSort('circle')}
|
onClick={() => setExploreSort('circle')}
|
||||||
sx={{ textTransform: 'none', fontWeight: 'bold', borderRadius: 0.8, height: { xs: 38, lg: 30 }, px: 2, fontSize: '0.8rem' }}
|
sx={{ textTransform: 'none', fontWeight: 'bold', borderRadius: 0.8, height: 32, px: { xs: 1, sm: 2 }, fontSize: '0.8rem', whiteSpace: 'nowrap', minWidth: 'fit-content' }}
|
||||||
>
|
>
|
||||||
{t('dashboard.circleRating')}
|
{t('dashboard.circleRating')}
|
||||||
</Button>
|
</Button>
|
||||||
|
|||||||
Reference in new issue
Block a user