| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970 |
- import json
- from django.http import JsonResponse, HttpResponseBadRequest
- from django.views.decorators.csrf import csrf_exempt
- from django.contrib.auth.decorators import login_required
- from commu.usecases.post_service import PostService
- from core.repositories.django_post_repository import DjangoPostRepository
- from core.repositories.django_user_repository import DjangoUserRepository
- # Service setup (could be moved to app config for larger apps)
- user_repo = DjangoUserRepository()
- post_repo = DjangoPostRepository()
- post_service = PostService(post_repo, user_repo)
- @csrf_exempt
- @login_required
- def create_post(request):
- if request.method != 'POST':
- return HttpResponseBadRequest("POST only")
- try:
- data = json.loads(request.body.decode())
- text = data.get("text")
- images = data.get("images", [])
- videos = data.get("videos", [])
- if not text:
- return JsonResponse({"error": "Missing post text"}, status=400)
- # Use logged-in Django user as author
- user_id = str(request.user.id)
- post = post_service.create_post(user_id, text, images, videos)
- return JsonResponse({
- "id": post.id,
- "text": post.text,
- "author_id": post.author_id,
- "images": post.images,
- "videos": post.videos
- })
- except Exception as e:
- return JsonResponse({"error": str(e)}, status=400)
- def search_posts(request):
- q = request.GET.get("q", "")
- results = post_service.search_posts(q)
- posts = [{
- "id": p.id,
- "text": p.text,
- "author_id": p.author_id,
- "images": p.images,
- "videos": p.videos,
- "avg_rating": p.average_rating()
- } for p in results]
- return JsonResponse({"results": posts})
- @csrf_exempt
- @login_required
- def rate_post(request):
- if request.method != 'POST':
- return HttpResponseBadRequest("POST only")
- try:
- data = json.loads(request.body.decode())
- post_id = data.get("post_id")
- rating = data.get("rating")
- if not post_id or rating is None:
- return JsonResponse({"error": "Missing post_id or rating"}, status=400)
- user_id = str(request.user.id)
- post_service.rate_post(post_id, user_id, int(rating))
- return JsonResponse({"ok": True})
- except Exception as e:
- return JsonResponse({"error": str(e)}, status=400)
|