mirror of
https://github.com/seanmorley15/AdventureLog.git
synced 2025-07-23 06:49:37 +02:00
Implement user-specific category filtering in AdventureViewSet and update AdventureCard to display category details
This commit is contained in:
parent
ae92fc2027
commit
42f07dc2fb
4 changed files with 21 additions and 6 deletions
|
@ -109,15 +109,18 @@ class AdventureViewSet(viewsets.ModelViewSet):
|
||||||
|
|
||||||
# Handle case where types is all
|
# Handle case where types is all
|
||||||
if 'all' in types:
|
if 'all' in types:
|
||||||
types = [t[0] for t in ADVENTURE_TYPES]
|
types = Category.objects.filter(user_id=request.user).values_list('name', flat=True)
|
||||||
valid_types = [t[0] for t in ADVENTURE_TYPES]
|
|
||||||
types = [t for t in types if t in valid_types]
|
else:
|
||||||
|
for type in types:
|
||||||
|
if not Category.objects.filter(user_id=request.user, name=type).exists():
|
||||||
|
return Response({"error": f"Category {type} does not exist"}, status=400)
|
||||||
|
|
||||||
if not types:
|
if not types:
|
||||||
return Response({"error": "No valid types provided"}, status=400)
|
return Response({"error": "No valid types provided"}, status=400)
|
||||||
|
|
||||||
queryset = Adventure.objects.filter(
|
queryset = Adventure.objects.filter(
|
||||||
type__in=types,
|
category__in=Category.objects.filter(name__in=types, user_id=request.user),
|
||||||
user_id=request.user.id
|
user_id=request.user.id
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|
|
@ -129,7 +129,9 @@
|
||||||
</button>
|
</button>
|
||||||
</div>
|
</div>
|
||||||
<div>
|
<div>
|
||||||
<div class="badge badge-primary">{$t(`adventures.activities.${adventure.type}`)}</div>
|
<div class="badge badge-primary">
|
||||||
|
{`${adventure.category.display_name} ${adventure.category.icon}`}
|
||||||
|
</div>
|
||||||
<div class="badge badge-success">
|
<div class="badge badge-success">
|
||||||
{adventure.is_visited ? $t('adventures.visited') : $t('adventures.planned')}
|
{adventure.is_visited ? $t('adventures.visited') : $t('adventures.planned')}
|
||||||
</div>
|
</div>
|
||||||
|
|
|
@ -28,7 +28,10 @@
|
||||||
let newVisit: VisitedRegion = {
|
let newVisit: VisitedRegion = {
|
||||||
id: visit_id,
|
id: visit_id,
|
||||||
region: region_id,
|
region: region_id,
|
||||||
user_id: user_id
|
user_id: user_id,
|
||||||
|
longitude: 0,
|
||||||
|
latitude: 0,
|
||||||
|
name: ''
|
||||||
};
|
};
|
||||||
addToast('success', `Visit to ${region.name} marked`);
|
addToast('success', `Visit to ${region.name} marked`);
|
||||||
dispatch('visit', newVisit);
|
dispatch('visit', newVisit);
|
||||||
|
|
|
@ -38,6 +38,13 @@ export type Adventure = {
|
||||||
created_at?: string | null;
|
created_at?: string | null;
|
||||||
updated_at?: string | null;
|
updated_at?: string | null;
|
||||||
is_visited?: boolean;
|
is_visited?: boolean;
|
||||||
|
category: {
|
||||||
|
id: string;
|
||||||
|
name: string;
|
||||||
|
display_name: string;
|
||||||
|
icon: string;
|
||||||
|
user_id: number;
|
||||||
|
};
|
||||||
};
|
};
|
||||||
|
|
||||||
export type Country = {
|
export type Country = {
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue