40240-vm/core/models.py
Flatlogic Bot 41cce00390 A
2026-06-09 23:09:44 +00:00

79 lines
2.9 KiB
Python

from django.db import models
from django.urls import reverse
from django.utils import timezone
class JobSource(models.Model):
class Family(models.TextChoices):
PORTAL = "portal", "National portal"
AGENCY = "agency", "Interim agency"
COMPANY = "company", "Company careers"
class Status(models.TextChoices):
PLANNED = "planned", "Planned"
ACTIVE = "active", "Active"
PAUSED = "paused", "Paused"
ERROR = "error", "Needs attention"
name = models.CharField(max_length=160)
family = models.CharField(max_length=24, choices=Family.choices)
url = models.URLField(unique=True)
status = models.CharField(max_length=24, choices=Status.choices, default=Status.PLANNED)
owner = models.CharField(max_length=120, blank=True)
notes = models.TextField(blank=True)
last_checked_at = models.DateTimeField(null=True, blank=True)
created_at = models.DateTimeField(auto_now_add=True)
updated_at = models.DateTimeField(auto_now=True)
class Meta:
ordering = ["family", "name"]
indexes = [
models.Index(fields=["family", "status"]),
models.Index(fields=["name"]),
]
def __str__(self):
return self.name
def get_absolute_url(self):
return reverse("source_success", args=[self.pk])
class JobPosting(models.Model):
class ContractType(models.TextChoices):
CDI = "cdi", "CDI"
CDD = "cdd", "CDD"
INTERIM = "interim", "Interim"
APPRENTICESHIP = "apprenticeship", "Apprenticeship"
FREELANCE = "freelance", "Freelance"
OTHER = "other", "Other"
source = models.ForeignKey(JobSource, on_delete=models.PROTECT, related_name="jobs")
title = models.CharField(max_length=220)
company = models.CharField(max_length=180)
location = models.CharField(max_length=160, default="Dijon, Bourgogne-Franche-Comté")
contract_type = models.CharField(max_length=24, choices=ContractType.choices, default=ContractType.CDI)
remote = models.BooleanField(default=False)
salary = models.CharField(max_length=120, blank=True)
apply_url = models.URLField(blank=True)
published_at = models.DateField(default=timezone.localdate)
description = models.TextField()
is_active = models.BooleanField(default=True)
duplicate_score = models.DecimalField(max_digits=5, decimal_places=2, default=0)
created_at = models.DateTimeField(auto_now_add=True)
updated_at = models.DateTimeField(auto_now=True)
class Meta:
ordering = ["-published_at", "-created_at"]
indexes = [
models.Index(fields=["is_active", "published_at"]),
models.Index(fields=["company", "title"]),
models.Index(fields=["contract_type"]),
]
def __str__(self):
return f"{self.title}{self.company}"
def get_absolute_url(self):
return reverse("job_detail", args=[self.pk])