feat: added mlscore app

This commit is contained in:
ITQ
2025-02-16 12:40:41 +03:00
parent bdafd96d94
commit 2aa93a2b51
7 changed files with 150 additions and 0 deletions
@@ -0,0 +1,16 @@
from django.contrib import admin
from apps.mlscore.models import Mlscore
class MlscoreAdmin(admin.ModelAdmin):
readonly_fields = (Mlscore.id.field.name,)
fields = (
Mlscore.id.field.name,
Mlscore.advertiser.field.name,
Mlscore.client.field.name,
Mlscore.score.field.name,
)
admin.site.register(Mlscore, MlscoreAdmin)
@@ -0,0 +1,6 @@
from django.apps import AppConfig
class MlscoreConfig(AppConfig):
name = "apps.mlscore"
label = "mlscore"
@@ -0,0 +1,30 @@
# Generated by Django 5.1.6 on 2025-02-14 16:40
import django.db.models.deletion
import uuid
from django.db import migrations, models
class Migration(migrations.Migration):
initial = True
dependencies = [
('advertiser', '0001_initial'),
('client', '0001_initial'),
]
operations = [
migrations.CreateModel(
name='Mlscore',
fields=[
('id', models.UUIDField(default=uuid.uuid4, editable=False, primary_key=True, serialize=False)),
('score', models.PositiveIntegerField()),
('advertiser', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='mlscores', to='advertiser.advertiser')),
('client', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='mlscores', to='client.client')),
],
options={
'unique_together': {('advertiser', 'client')},
},
),
]
@@ -0,0 +1,28 @@
from django.db import models
from apps.advertiser.models import Advertiser
from apps.client.models import Client
from apps.core.models import BaseModel
class Mlscore(BaseModel):
advertiser = models.ForeignKey(
Advertiser,
on_delete=models.CASCADE,
related_name="mlscores",
)
client = models.ForeignKey(
Client,
on_delete=models.CASCADE,
related_name="mlscores",
)
score = models.PositiveIntegerField()
def __str__(self) -> str:
return f"{self.advertiser.name} | {self.client.login}"
class Meta:
unique_together = (
"advertiser",
"client",
)
@@ -0,0 +1,70 @@
from django.test import TestCase
from django.db.utils import IntegrityError
from django.core.exceptions import ValidationError
from config.errors import ConflictError
from apps.advertiser.models import Advertiser
from apps.client.models import Client
from apps.mlscore.models import Mlscore
class MlscoreModelTest(TestCase):
def setUp(self):
self.advertiser = Advertiser.objects.create(name="Test Advertiser")
self.client_obj = Client.objects.create(
login="test_client",
age=25,
location="test_location",
gender=Client.GenderChoices.MALE,
)
def test_create_mlscore(self):
mlscore = Mlscore.objects.create(
advertiser=self.advertiser,
client=self.client_obj,
score=95,
)
self.assertEqual(mlscore.score, 95)
self.assertEqual(str(mlscore), "Test Advertiser | test_client")
def test_mlscore_unique_together_constraint(self):
Mlscore.objects.create(
advertiser=self.advertiser,
client=self.client_obj,
score=80,
)
with self.assertRaises(ConflictError):
Mlscore.objects.create(
advertiser=self.advertiser,
client=self.client_obj,
score=85,
)
def test_delete_advertiser_cascades(self):
mlscore = Mlscore.objects.create(
advertiser=self.advertiser,
client=self.client_obj,
score=90,
)
self.advertiser.delete()
self.assertFalse(Mlscore.objects.filter(id=mlscore.id).exists())
def test_delete_client_cascades(self):
mlscore = Mlscore.objects.create(
advertiser=self.advertiser,
client=self.client_obj,
score=90,
)
self.client_obj.delete()
self.assertFalse(Mlscore.objects.filter(id=mlscore.id).exists())
def test_score_positive_integer_constraint(self):
with self.assertRaises(ValidationError):
Mlscore.objects.create(
advertiser=self.advertiser,
client=self.client_obj,
score=-5,
)