Bez popisu

views.py 2.4KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970
  1. import json
  2. from django.http import JsonResponse, HttpResponseBadRequest
  3. from django.views.decorators.csrf import csrf_exempt
  4. from django.contrib.auth.decorators import login_required
  5. from commu.usecases.post_service import PostService
  6. from core.repositories.django_post_repository import DjangoPostRepository
  7. from core.repositories.django_user_repository import DjangoUserRepository
  8. # Service setup (could be moved to app config for larger apps)
  9. user_repo = DjangoUserRepository()
  10. post_repo = DjangoPostRepository()
  11. post_service = PostService(post_repo, user_repo)
  12. @csrf_exempt
  13. @login_required
  14. def create_post(request):
  15. if request.method != 'POST':
  16. return HttpResponseBadRequest("POST only")
  17. try:
  18. data = json.loads(request.body.decode())
  19. text = data.get("text")
  20. images = data.get("images", [])
  21. videos = data.get("videos", [])
  22. if not text:
  23. return JsonResponse({"error": "Missing post text"}, status=400)
  24. # Use logged-in Django user as author
  25. user_id = str(request.user.id)
  26. post = post_service.create_post(user_id, text, images, videos)
  27. return JsonResponse({
  28. "id": post.id,
  29. "text": post.text,
  30. "author_id": post.author_id,
  31. "images": post.images,
  32. "videos": post.videos
  33. })
  34. except Exception as e:
  35. return JsonResponse({"error": str(e)}, status=400)
  36. def search_posts(request):
  37. q = request.GET.get("q", "")
  38. results = post_service.search_posts(q)
  39. posts = [{
  40. "id": p.id,
  41. "text": p.text,
  42. "author_id": p.author_id,
  43. "images": p.images,
  44. "videos": p.videos,
  45. "avg_rating": p.average_rating()
  46. } for p in results]
  47. return JsonResponse({"results": posts})
  48. @csrf_exempt
  49. @login_required
  50. def rate_post(request):
  51. if request.method != 'POST':
  52. return HttpResponseBadRequest("POST only")
  53. try:
  54. data = json.loads(request.body.decode())
  55. post_id = data.get("post_id")
  56. rating = data.get("rating")
  57. if not post_id or rating is None:
  58. return JsonResponse({"error": "Missing post_id or rating"}, status=400)
  59. user_id = str(request.user.id)
  60. post_service.rate_post(post_id, user_id, int(rating))
  61. return JsonResponse({"ok": True})
  62. except Exception as e:
  63. return JsonResponse({"error": str(e)}, status=400)