Skip to content

Develop #38

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Merged
merged 5 commits into from
Jul 3, 2024
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
16 changes: 12 additions & 4 deletions debt/services/debt_services.py
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@
from django.contrib.auth import get_user_model
from datetime import timedelta
from django.utils import timezone
from django.db.models import Q

User = get_user_model()

Expand Down Expand Up @@ -64,15 +65,22 @@ def toggle_debt_payment(debt_id):
raise ValueError("Debt not found")


def get_unpaid_debts_by_week(user_id):
def get_unpaid_debts_by_week(user_id, piggy_id):
now = timezone.now()
start_of_week = (now - timedelta(days=now.weekday())).replace(hour=0, minute=0, second=0, microsecond=0)
start_of_last_week = start_of_week - timedelta(weeks=1)

present_week_debts = Debt.objects.filter(user__user_id=user_id, is_paid=False, created_at__gte=start_of_week)
present_week_debts = Debt.objects.filter(
(Q(user__user_id=user_id) | Q(user__user_id=piggy_id)), is_paid=False, created_at__gte=start_of_week
)
last_week_debts = Debt.objects.filter(
user__user_id=user_id, is_paid=False, created_at__gte=start_of_last_week, created_at__lt=start_of_week
(Q(user__user_id=user_id) | Q(user__user_id=piggy_id)),
is_paid=False,
created_at__gte=start_of_last_week,
created_at__lt=start_of_week,
)
previous_debts = Debt.objects.filter(
(Q(user__user_id=user_id) | Q(user__user_id=piggy_id)), is_paid=False, created_at__lt=start_of_last_week
)
previous_debts = Debt.objects.filter(user__user_id=user_id, is_paid=False, created_at__lt=start_of_last_week)

return present_week_debts, last_week_debts, previous_debts
2 changes: 1 addition & 1 deletion debt/views.py
Original file line number Diff line number Diff line change
Expand Up @@ -77,7 +77,7 @@ def toggle_payment(self, request, debt_id=None):
@action(detail=False, methods=["get"], url_path="unpaid-history/(?P<other_user_id>[^/.]+)")
def unpaid_history(self, request, other_user_id=None):
user_id = get_user_id_from_token(request)
present_week_debts, last_week_debts, previous_debts = get_unpaid_debts_by_week(user_id)
present_week_debts, last_week_debts, previous_debts = get_unpaid_debts_by_week(user_id, other_user_id)

response_data = {
"present_week": UnpaidDebtsHistorySerializer(present_week_debts, many=True).data,
Expand Down
20 changes: 20 additions & 0 deletions piggies/admin.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,20 @@
from django.contrib import admin
from .models import Piggies


@admin.register(Piggies)
class PiggiesAdmin(admin.ModelAdmin):
list_display = (
"user_first_name",
"piggy_first_name",
)

def user_first_name(self, obj):
return obj.username.first_name

user_first_name.short_description = "User First Name"

def piggy_first_name(self, obj):
return obj.piggy.first_name

piggy_first_name.short_description = "Piggy First Name"
54 changes: 12 additions & 42 deletions piggies/views.py
Original file line number Diff line number Diff line change
Expand Up @@ -4,35 +4,17 @@
from django.contrib.auth import get_user_model

from authentication.decorators import cognito_authenticated
from authentication.utils import get_user_id_from_token

from .models import Piggies
from .serializers import PiggiesSerializer


class PiggiesViewSet(viewsets.ViewSet):
def get_user_id_from_token(self, request):
try:
authorization_header = request.headers.get("Authorization")
if not authorization_header:
raise Exception("Authorization header not found")

token = authorization_header.split()[1]
decoded_token = jwt.decode(token, options={"verify_signature": False})
username = decoded_token.get("username")
if not username:
raise Exception("User ID not found in token")
return username
except jwt.DecodeError:
raise Exception("Invalid token")
except jwt.ExpiredSignatureError:
raise Exception("Expired token")
except Exception as e:
raise Exception(f"Error decoding token: {e}")

@cognito_authenticated
def list(self, request):
try:
username = self.get_user_id_from_token(request)
username = get_user_id_from_token(request)
User = get_user_model()
users = [{"user_id": str(x.user_id), "first_name": x.first_name} for x in User.objects.all()]

Expand Down Expand Up @@ -60,46 +42,34 @@ def list(self, request):
@cognito_authenticated
def create(self, request):
try:
username = self.get_user_id_from_token(request)
username = get_user_id_from_token(request)
data = request.data.copy()
data["username"] = username

serializer = PiggiesSerializer(data=data)

if serializer.is_valid():
serializer.save()
response = {
"username": serializer.data["username"],
"piggy": serializer.data["piggy"],
}
return Response(data=response, status=status.HTTP_201_CREATED)

serializer = PiggiesSerializer(data={"username": data["piggy"], "piggy": username})

if serializer.is_valid():
serializer.save()

return Response(data=response, status=status.HTTP_201_CREATED)
return Response(serializer.errors, status=status.HTTP_400_BAD_REQUEST)
except Exception as e:
return Response({"error": str(e)}, status=status.HTTP_500_INTERNAL_SERVER_ERROR)


class NotPiggiesViewSet(viewsets.ViewSet):
def get_user_id_from_token(self, request):
try:
authorization_header = request.headers.get("Authorization")
if not authorization_header:
raise Exception("Authorization header not found")

token = authorization_header.split()[1]
decoded_token = jwt.decode(token, options={"verify_signature": False})
username = decoded_token.get("username")
if not username:
raise Exception("User ID not found in token")
return username
except jwt.DecodeError:
raise Exception("Invalid token")
except jwt.ExpiredSignatureError:
raise Exception("Expired token")
except Exception as e:
raise Exception(f"Error decoding token: {e}")

def users(self, request):
try:
username = self.get_user_id_from_token(request)
username = get_user_id_from_token(request)
User = get_user_model()
users = [
{"user_id": str(x.user_id), "first_name": x.first_name, "email": x.email} for x in User.objects.all()
Expand Down
Loading