Commit c46b936c authored by Mickaël Desfrênes's avatar Mickaël Desfrênes
Browse files

change models

parent f21f7761
Loading
Loading
Loading
Loading
+24 −6
Original line number Diff line number Diff line
@@ -49,12 +49,12 @@ class APIKey(models.Model):


class Project(models.Model):
    label = models.TextField()
    label = models.TextField(unique=True)
    description = models.TextField()


class Role(models.Model):
    label = models.TextField
    label = models.TextField(unique=True)


class ProjectMembership(models.Model):
@@ -63,11 +63,17 @@ class ProjectMembership(models.Model):
    role = models.ForeignKey(Role, on_delete=models.CASCADE)


def fetch_public_project() -> Project:
    project, created = Project.objects.get_or_create(label="public project")
    return project


class Tag(models.Model):
    uid = models.TextField()
    ark = models.TextField(null=True, blank=True)
    label = models.TextField(null=True, blank=True)  # pref label de SKOS
    owner = models.ForeignKey(User, on_delete=models.CASCADE)
    project = models.ForeignKey(Project, on_delete=models.CASCADE)

    def __str__(self):
        return self.label or self.uid
@@ -75,7 +81,10 @@ class Tag(models.Model):
    class Meta:
        verbose_name = "étiquette"
        verbose_name_plural = "étiquettes"
        unique_together = (("uid", "owner"),)
        unique_together = (
            ("uid", "owner"),
            ("uid", "project"),
        )


class FileExtension(models.Model):
@@ -106,6 +115,7 @@ class FileType(models.Model):
class MetadataSet(models.Model):
    title = models.CharField("titre", max_length=128)
    owner = models.ForeignKey(User, on_delete=models.CASCADE)
    project = models.ForeignKey(Project, on_delete=models.CASCADE)

    def __str__(self):
        return "{}".format(self.title)
@@ -113,7 +123,10 @@ class MetadataSet(models.Model):
    class Meta:
        verbose_name = "Groupe de meta-données"
        verbose_name_plural = "Groupes de meta-données"
        unique_together = (("title", "owner"),)
        unique_together = (
            ("title", "owner"),
            ("title", "project"),
        )


class MetadataType(models.Model):
@@ -128,6 +141,7 @@ class Metadata(models.Model):
    set = models.ForeignKey(MetadataSet, on_delete=models.CASCADE)
    rank = models.IntegerField("ordre", default=0)
    owner = models.ForeignKey(User, on_delete=models.CASCADE)
    project = models.ForeignKey(Project, on_delete=models.CASCADE)
    data_type = models.ForeignKey(MetadataType, null=True, on_delete=models.SET_NULL)
    expose = models.BooleanField(default=True)

@@ -137,7 +151,7 @@ class Metadata(models.Model):
    class Meta:
        verbose_name = "meta-donnée"
        verbose_name_plural = "meta-données"
        unique_together = (("title", "set", "owner"),)
        unique_together = (("title", "set", "owner"), ("title", "set", "project"))


class ResourceClass(models.Model):
@@ -169,6 +183,7 @@ class Resource(models.Model):
    # "ptr" stands for "pointer" since the Resource class should
    # not be used directly.
    ptr_owner = models.ForeignKey(User, on_delete=models.CASCADE, null=True)
    ptr_project = models.ForeignKey(Project, on_delete=models.CASCADE, null=True)

    def __str__(self):
        return "{}".format(self.title)
@@ -187,6 +202,7 @@ class File(Resource):
    # this duplicates "ptr_owner" from Resource class
    # (can't have unique constraints across tables unfortunately)
    owner = models.ForeignKey(User, on_delete=models.CASCADE)
    project = models.ForeignKey(Project, on_delete=models.CASCADE)
    hash = models.CharField("hachage", max_length=64)
    file_type = models.ForeignKey(FileType, on_delete=models.RESTRICT)
    size = models.BigIntegerField("taille")
@@ -201,7 +217,7 @@ class File(Resource):
    class Meta:
        verbose_name = "fichier"
        verbose_name_plural = "fichiers"
        unique_together = (("owner", "hash"),)
        unique_together = (("owner", "hash"), ("project", "hash"))

    def iiif_infos_url(self) -> str:
        if self.should_have_iiif():
@@ -320,6 +336,7 @@ class File(Resource):

    def save(self, *args, **kwargs):
        self.ptr_owner = self.owner
        self.ptr_project = self.project
        super(File, self).save(*args, **kwargs)


@@ -328,6 +345,7 @@ class Collection(models.Model):
    resources = models.ManyToManyField(Resource, through="CollectionMembership")
    tags = models.ManyToManyField(Tag)
    owner = models.ForeignKey(User, on_delete=models.CASCADE)
    project = models.ForeignKey(Project, on_delete=models.CASCADE)
    parent = models.ForeignKey("self", null=True, on_delete=models.CASCADE)
    created_at = models.DateTimeField(auto_now_add=True)
    updated_at = models.DateTimeField(auto_now=True)