✅ Step 1: models.py
class MinutePrice(models.Model):
country_code = models.CharField(max_length=10, unique=True)
price_per_minute = models.FloatField()
def __str__(self):
return f"{self.country_code} - {self.price_per_minute}"
✅ Step 2: serializers.py
from .models import MinutePrice
class MinutePriceSerializer(serializers.ModelSerializer):
class Meta:
model = MinutePrice
fields = '__all__'
✅ Step 3: views.py
from .models import MinutePrice
from .serializers import MinutePriceSerializer
from rest_framework.views import APIView
from rest_framework.response import Response
from rest_framework import status
# ✅ GET / POST / PUT for MinutePrice
class MinutePriceView(APIView):
def get(self, request):
prices = MinutePrice.objects.all()
serializer = MinutePriceSerializer(prices, many=True)
return Response(serializer.data)
def post(self, request):
serializer = MinutePriceSerializer(data=request.data)
if serializer.is_valid():
serializer.save()
return Response(serializer.data, status=status.HTTP_201_CREATED)
return Response(serializer.errors, status=status.HTTP_400_BAD_REQUEST)
def put(self, request):
country_code = request.data.get('country_code')
price = request.data.get('price_per_minute')
if not country_code or not price:
return Response({'error': 'country_code and price_per_minute required'}, status=400)
try:
mp = MinutePrice.objects.get(country_code=country_code)
mp.price_per_minute = price
mp.save()
return Response(MinutePriceSerializer(mp).data)
except MinutePrice.DoesNotExist:
return Response({'error': 'Country not found'}, status=404)
✅ Step 4: urls.py – অ্যাড করো:
from .views import MinutePriceView
urlpatterns += [
path('minute-price/', MinutePriceView.as_view()),
]
✅ Postman টেস্ট ডেটা:
🔹 POST /api/minute-price/
{
"country_code": "BD",
"price_per_minute": 0.5
}
🔹 PUT /api/minute-price/
{
"country_code": "BD",
"price_per_minute": 0.8
}
✅ সারসংক্ষেপ:
| Endpoint | Method | কাজ |
|---|---|---|
/api/minute-price/ | GET | সব রেট লিস্ট |
/api/minute-price/ | POST | নতুন রেট অ্যাড |
/api/minute-price/ | PUT | আগের রেট আপডেট |