Versionise API and cleanups

This commit is contained in:
Nico Schottelius 2020-05-02 20:31:36 +02:00
parent eea654a9f8
commit 927fb20671
5 changed files with 32 additions and 34 deletions

View file

@ -35,10 +35,10 @@ router = routers.DefaultRouter()
router.register(r'beta/vm', vmviews.NicoVMProductViewSet, basename='nicovmproduct') router.register(r'beta/vm', vmviews.NicoVMProductViewSet, basename='nicovmproduct')
# VM # VM
router.register(r'vm/snapshot', vmviews.VMSnapshotProductViewSet, basename='vmsnapshotproduct') router.register(r'v1/vm/snapshot', vmviews.VMSnapshotProductViewSet, basename='vmsnapshotproduct')
router.register(r'vm/diskimage', vmviews.VMDiskImageProductViewSet, basename='vmdiskimageproduct') router.register(r'v1/vm/diskimage', vmviews.VMDiskImageProductViewSet, basename='vmdiskimageproduct')
router.register(r'vm/disk', vmviews.VMDiskProductViewSet, basename='vmdiskproduct') router.register(r'v1/vm/disk', vmviews.VMDiskProductViewSet, basename='vmdiskproduct')
router.register(r'vm/vm', vmviews.VMProductViewSet, basename='vmproduct') router.register(r'v1/vm/vm', vmviews.VMProductViewSet, basename='vmproduct')
# creates VM from os image # creates VM from os image
@ -47,35 +47,35 @@ router.register(r'vm/vm', vmviews.VMProductViewSet, basename='vmproduct')
#router.register(r'vm/dualstackvm', vmviews.VMProductViewSet, basename='vmproduct') #router.register(r'vm/dualstackvm', vmviews.VMProductViewSet, basename='vmproduct')
# Services # Services
router.register(r'service/matrix', serviceviews.MatrixServiceProductViewSet, basename='matrixserviceproduct') router.register(r'v1/service/matrix', serviceviews.MatrixServiceProductViewSet, basename='matrixserviceproduct')
router.register(r'service/generic', serviceviews.GenericServiceProductViewSet, basename='genericserviceproduct') router.register(r'v1/service/generic', serviceviews.GenericServiceProductViewSet, basename='genericserviceproduct')
# Net # Net
router.register(r'net/vpn', netviews.VPNNetworkViewSet, basename='vpnnet') router.register(r'v1/net/vpn', netviews.VPNNetworkViewSet, basename='vpnnet')
router.register(r'net/vpnreservation', netviews.VPNNetworkReservationViewSet, basename='vpnnetreservation') router.register(r'v1/admin/vpnreservation', netviews.VPNNetworkReservationViewSet, basename='vpnnetreservation')
# Pay # Pay
router.register(r'address', payviews.BillingAddressViewSet, basename='address') router.register(r'v1/my/address', payviews.BillingAddressViewSet, basename='address')
router.register(r'bill', payviews.BillViewSet, basename='bill') router.register(r'v1/my/bill', payviews.BillViewSet, basename='bill')
router.register(r'order', payviews.OrderViewSet, basename='order') router.register(r'v1/my/order', payviews.OrderViewSet, basename='order')
router.register(r'payment', payviews.PaymentViewSet, basename='payment') router.register(r'v1/my/payment', payviews.PaymentViewSet, basename='payment')
router.register(r'payment-method', payviews.PaymentMethodViewSet, basename='payment-method') router.register(r'v1/my/payment-method', payviews.PaymentMethodViewSet, basename='payment-method')
# admin/staff urls # admin/staff urls
router.register(r'admin/bill', payviews.AdminBillViewSet, basename='admin/bill') router.register(r'v1/admin/bill', payviews.AdminBillViewSet, basename='admin/bill')
router.register(r'admin/payment', payviews.AdminPaymentViewSet, basename='admin/payment') router.register(r'v1/admin/payment', payviews.AdminPaymentViewSet, basename='admin/payment')
router.register(r'admin/order', payviews.AdminOrderViewSet, basename='admin/order') router.register(r'v1/admin/order', payviews.AdminOrderViewSet, basename='admin/order')
router.register(r'admin/vmhost', vmviews.VMHostViewSet) router.register(r'v1/admin/vmhost', vmviews.VMHostViewSet)
router.register(r'admin/vmcluster', vmviews.VMClusterViewSet) router.register(r'v1/admin/vmcluster', vmviews.VMClusterViewSet)
router.register(r'admin/vpnpool', netviews.VPNPoolViewSet) router.register(r'v1/admin/vpnpool', netviews.VPNPoolViewSet)
router.register(r'admin/opennebula', oneviews.VMViewSet, basename='opennebula') router.register(r'v1/admin/opennebula', oneviews.VMViewSet, basename='opennebula')
# User/Account # User/Account
router.register(r'user', authviews.UserViewSet, basename='user') router.register(r'v1/my/user', authviews.UserViewSet, basename='user')
router.register(r'admin/user', authviews.AdminUserViewSet, basename='useradmin') router.register(r'v1/admin/user', authviews.AdminUserViewSet, basename='useradmin')
urlpatterns = [ urlpatterns = [
path('', include(router.urls)), path('', include(router.urls)),

View file

@ -825,7 +825,11 @@ class Order(models.Model):
# Trigger initial bill generation at order creation. # Trigger initial bill generation at order creation.
def save(self, *args, **kwargs): def save(self, *args, **kwargs):
super(Order, self).save(*args, **kwargs) if self.ending_date and self.ending_date < self.starting_date:
raise ValidationError("End date cannot be before starting date")
super().save(*args, **kwargs)
Bill.generate_for(self.starting_date.year, self.starting_date.month, self.owner) Bill.generate_for(self.starting_date.year, self.starting_date.month, self.owner)
@property @property

View file

@ -69,9 +69,6 @@ class VMProduct(Product):
cores = models.IntegerField() cores = models.IntegerField()
ram_in_gb = models.FloatField() ram_in_gb = models.FloatField()
# Optional disk
primary_disk = models.ForeignKey('VMDiskProduct', on_delete=models.CASCADE, null=True)
# Default recurring price is PER_MONTH, see uncloud_pay.models.Product. # Default recurring price is PER_MONTH, see uncloud_pay.models.Product.
@property @property
def recurring_price(self): def recurring_price(self):
@ -175,6 +172,7 @@ class VMDiskProduct(Product):
super().save(*args, **kwargs) super().save(*args, **kwargs)
class VMNetworkCard(models.Model): class VMNetworkCard(models.Model):
vm = models.ForeignKey(VMProduct, on_delete=models.CASCADE) vm = models.ForeignKey(VMProduct, on_delete=models.CASCADE)

View file

@ -121,22 +121,17 @@ class OrderVMProductSerializer(VMProductSerializer):
# Nico's playground. # Nico's playground.
class NicoVMProductSerializer(serializers.ModelSerializer): class NicoVMProductSerializer(serializers.ModelSerializer):
primary_disk = CreateVMDiskProductSerializer()
snapshots = VMSnapshotProductSerializer(many=True, read_only=True) snapshots = VMSnapshotProductSerializer(many=True, read_only=True)
disks = VMDiskProductSerializer(many=True, read_only=True)
class Meta: class Meta:
model = VMProduct model = VMProduct
read_only_fields = ['uuid', 'order', 'owner', 'status', read_only_fields = ['uuid', 'order', 'owner', 'status',
'vmhost', 'vmcluster', 'vmhost', 'vmcluster', 'snapshots',
'extra_data' ] 'extra_data' ]
fields = read_only_fields + [ 'name', fields = read_only_fields + [ 'name',
'cores', 'cores',
'ram_in_gb', 'ram_in_gb'
'primary_disk', ]
'snapshots',
'disks' ]
class DCLVMProductSerializer(serializers.HyperlinkedModelSerializer): class DCLVMProductSerializer(serializers.HyperlinkedModelSerializer):

View file

@ -195,6 +195,7 @@ class NicoVMProductViewSet(ProductViewSet):
# Extract serializer data. # Extract serializer data.
serializer = self.get_serializer(data=request.data) serializer = self.get_serializer(data=request.data)
serializer.is_valid(raise_exception=True) serializer.is_valid(raise_exception=True)
order_recurring_period = serializer.validated_data.pop("recurring_period") order_recurring_period = serializer.validated_data.pop("recurring_period")
order_billing_address = serializer.validated_data.pop("billing_address") order_billing_address = serializer.validated_data.pop("billing_address")