kop narsalar qoshildi

This commit is contained in:
behruz-dev
2025-11-22 16:17:06 +05:00
parent 6d8f5e3fec
commit 7723aad146
11 changed files with 212 additions and 3 deletions

View File

@@ -1 +1,2 @@
from .region import *
from .region import *
from .district import *

View File

@@ -0,0 +1,12 @@
from django.contrib import admin
# shared
from core.apps.shared.models import District
@admin.register(District)
class DistrictAdmin(admin.ModelAdmin):
list_display = ['name', 'user', 'created_at']
search_fields = ['name']

View File

@@ -0,0 +1,25 @@
# Generated by Django 5.2 on 2025-11-22 09:34
from django.db import migrations, models
class Migration(migrations.Migration):
dependencies = [
('shared', '0001_initial'),
]
operations = [
migrations.CreateModel(
name='District',
fields=[
('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
('created_at', models.DateTimeField(auto_now_add=True)),
('updated_at', models.DateTimeField(auto_now=True)),
('name', models.CharField(max_length=200, unique=True)),
],
options={
'abstract': False,
},
),
]

View File

@@ -0,0 +1,21 @@
# Generated by Django 5.2 on 2025-11-22 10:25
import django.db.models.deletion
from django.conf import settings
from django.db import migrations, models
class Migration(migrations.Migration):
dependencies = [
('shared', '0002_district'),
migrations.swappable_dependency(settings.AUTH_USER_MODEL),
]
operations = [
migrations.AddField(
model_name='district',
name='user',
field=models.ForeignKey(null=True, on_delete=django.db.models.deletion.CASCADE, related_name='districts', to=settings.AUTH_USER_MODEL),
),
]

View File

@@ -0,0 +1,33 @@
# Generated by Django 5.2 on 2025-11-22 11:16
import django.db.models.deletion
from django.conf import settings
from django.db import migrations, models
class Migration(migrations.Migration):
dependencies = [
('shared', '0003_district_user'),
migrations.swappable_dependency(settings.AUTH_USER_MODEL),
]
operations = [
migrations.CreateModel(
name='Place',
fields=[
('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
('created_at', models.DateTimeField(auto_now_add=True)),
('updated_at', models.DateTimeField(auto_now=True)),
('name', models.CharField(max_length=200, unique=True)),
('longitude', models.FloatField(default=0.0)),
('latitude', models.FloatField(default=0.0)),
('extra_location', models.JSONField()),
('district', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='places', to='shared.district')),
('user', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='places', to=settings.AUTH_USER_MODEL)),
],
options={
'abstract': False,
},
),
]

View File

@@ -1,2 +1,4 @@
from .base import *
from .region import Region
from .region import *
from .district import *
from .place import *

View File

@@ -0,0 +1,16 @@
from django.db import models
# shared
from core.apps.shared.models import BaseModel
# accounts
from core.apps.accounts.models import User
class District(BaseModel):
name = models.CharField(max_length=200, unique=True)
user = models.ForeignKey(
User, on_delete=models.CASCADE, related_name='districts', null=True
)
def __str__(self):
return self.name

View File

@@ -0,0 +1,18 @@
from django.db import models
# shared
from core.apps.shared.models import BaseModel, District
# accounts
from core.apps.accounts.models import User
class Place(BaseModel):
name = models.CharField(max_length=200, unique=True)
district = models.ForeignKey(District, on_delete=models.CASCADE, related_name='places')
user = models.ForeignKey(User, on_delete=models.CASCADE, related_name='places')
longitude = models.FloatField(default=0.00)
latitude = models.FloatField(default=0.00)
extra_location = models.JSONField()
def __str__(self):
return self.name

View File

@@ -0,0 +1,12 @@
from rest_framework import serializers
# shared
from core.apps.shared.models import District
class DistrictSerializer(serializers.ModelSerializer):
class Meta:
model = District
fields = [
'id', 'name', 'created_at'
]

View File

@@ -2,6 +2,8 @@ from django.urls import path, include
# shared region view
from core.apps.shared.views import region as region_view
# shared district view
from core.apps.shared.views import district as dis_view
urlpatterns = [
@@ -10,4 +12,10 @@ urlpatterns = [
path('list/', region_view.RegionListApiView.as_view(), name='region-list-api'),
],
)),
]
path('disctrict/', include(
[
path('list/', dis_view.DistrictListApiView.as_view(), name='district-list-api'),
path('create/', dis_view.DistrictCreateApiView.as_view(), name='district-create-api'),
],
)),
]

View File

@@ -0,0 +1,61 @@
# rest framework
from rest_framework import generics, permissions
# drf yasg
from drf_yasg.utils import swagger_auto_schema
# shared
from core.apps.shared.models import District
from core.apps.shared.serializers import base as base_serializers
from core.apps.shared.serializers import district as district_serializers
from core.apps.shared.utils.response_mixin import ResponseMixin
class DistrictListApiView(generics.GenericAPIView, ResponseMixin):
serializer_class = district_serializers.DistrictSerializer
queryset = District.objects.all()
permission_classes = [permissions.IsAuthenticated]
@swagger_auto_schema(
responses={
200: base_serializers.SuccessResponseSerializer(data_serializer=district_serializers.DistrictSerializer()),
400: base_serializers.BaseResponseSerializer(),
500: base_serializers.BaseResponseSerializer(),
}
)
def get(self, request):
try:
queryset = self.queryset.filter(user=request.user)
serializer = self.serializer_class(queryset, many=True)
return self.success_response(data=serializer.data, message='malumotlar fetch qilindi')
except Exception as e:
return self.error_response(data=str(e), message='xatolik')
class DistrictCreateApiView(generics.CreateAPIView, ResponseMixin):
serializer_class = district_serializers.DistrictSerializer
queryset = District.objects.all()
permission_classes = [permissions.IsAuthenticated]
@swagger_auto_schema(
responses={
201: base_serializers.SuccessResponseSerializer(data_serializer=district_serializers.DistrictSerializer()),
400: base_serializers.BaseResponseSerializer(),
500: base_serializers.BaseResponseSerializer(),
}
)
def post(self, request):
try:
serializer = self.serializer_class(data=request.data)
if serializer.is_valid(raise_exception=True):
name = serializer.validated_data.get('name')
obj = District.objects.create(name=name, user=request.user)
return self.success_response(
data=district_serializers.DistrictSerializer(obj),
message='malumot qoshildi',
status_code=201
)
return self.failure_response(data=serializer.errors, message='malumot qoshilmadi')
except Exception as e:
return self.error_response(data=str(e), message='xatolik')