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

add models

parent c46b936c
Loading
Loading
Loading
Loading
+23 −15
Original line number Diff line number Diff line
@@ -53,16 +53,6 @@ class Project(models.Model):
    description = models.TextField()


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


class ProjectMembership(models.Model):
    project = models.ForeignKey(Project, on_delete=models.CASCADE)
    user = models.ForeignKey(User, on_delete=models.CASCADE)
    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
@@ -73,7 +63,7 @@ class Tag(models.Model):
    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)
    project = models.ForeignKey(Project, on_delete=models.CASCADE, null=True)

    def __str__(self):
        return self.label or self.uid
@@ -115,7 +105,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)
    project = models.ForeignKey(Project, on_delete=models.CASCADE, null=True)

    def __str__(self):
        return "{}".format(self.title)
@@ -141,7 +131,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)
    project = models.ForeignKey(Project, on_delete=models.CASCADE, null=True)
    data_type = models.ForeignKey(MetadataType, null=True, on_delete=models.SET_NULL)
    expose = models.BooleanField(default=True)

@@ -202,7 +192,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)
    project = models.ForeignKey(Project, on_delete=models.CASCADE, null=True)
    hash = models.CharField("hachage", max_length=64)
    file_type = models.ForeignKey(FileType, on_delete=models.RESTRICT)
    size = models.BigIntegerField("taille")
@@ -345,7 +335,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)
    project = models.ForeignKey(Project, on_delete=models.CASCADE, null=True)
    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)
@@ -572,6 +562,24 @@ class CollectionMembership(models.Model):
        unique_together = (("resource", "collection"),)


class Permission(models.Model):
    label = models.TextField(unique=True)
    project = models.ForeignKey(Project, on_delete=models.CASCADE)

    class Meta:
        unique_together = (("label", "project"),)


class Role(models.Model):
    label = models.TextField(unique=True)
    project = models.ForeignKey(Project, on_delete=models.CASCADE)
    permissions = models.ManyToManyField(Permission)
    users = models.ManyToManyField(User)

    class Meta:
        unique_together = (("label", "project"),)


@receiver(post_save, sender=File)
def dump_file_infos_to_fs(sender, instance: File, **kwargs):
    instance.dump_infos_to_fs()