Files
kakebo/app/api/serializers.py
Andros Fenollosa 1dc333eae6 Add REST API for expenses with token authentication
- New app/api with DRF: POST /api/v1/expenses/, GET categories
  and subcategories
- Token auth via API_TOKEN env var (Bearer header)
- Response format: type, data, errors, _links (HATEOAS)
- Validates subcategory belongs to category
- 11 tests covering auth, CRUD, and validation
- API documentation in README.md
2026-03-18 08:54:04 +01:00

42 lines
1.1 KiB
Python

from rest_framework import serializers
from app.expenses.models import Category, Expense, Subcategory
class SubcategorySerializer(serializers.ModelSerializer):
class Meta:
model = Subcategory
fields = ["id", "name", "order"]
class CategorySerializer(serializers.ModelSerializer):
subcategories = SubcategorySerializer(many=True, read_only=True)
class Meta:
model = Category
fields = ["id", "name", "order", "subcategories"]
class ExpenseReadSerializer(serializers.ModelSerializer):
category = serializers.StringRelatedField()
subcategory = serializers.StringRelatedField()
class Meta:
model = Expense
fields = ["id", "concept", "amount", "category", "subcategory", "created_at"]
class ExpenseWriteSerializer(serializers.ModelSerializer):
class Meta:
model = Expense
fields = ["concept", "amount", "category", "subcategory"]
def validate(self, data):
category = data.get("category")
subcategory = data.get("subcategory")
if subcategory and subcategory.category != category:
raise serializers.ValidationError(
{"subcategory": "Subcategory does not belong to the selected category."}
)
return data