Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Add catalog entry model #1172

Merged
merged 3 commits into from
Jan 19, 2024
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
41 changes: 41 additions & 0 deletions gateway/api/migrations/0013_program_groups_catalogentry.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,41 @@
# Generated by Django 4.2.9 on 2024-01-18 20:39

from django.db import migrations, models
import django.db.models.deletion


class Migration(migrations.Migration):

dependencies = [
("api", "0012_jobconfig_python_version"),
]

operations = [
migrations.CreateModel(
name="CatalogEntry",
fields=[
(
"id",
models.BigAutoField(
auto_created=True,
primary_key=True,
serialize=False,
verbose_name="ID",
),
),
("title", models.CharField(max_length=255)),
("description", models.TextField()),
("tags", models.TextField(blank=True, default="[]")),
("created", models.DateTimeField(auto_now_add=True)),
("updated", models.DateTimeField(auto_now=True, null=True)),
(
"program",
models.ForeignKey(
null=True,
on_delete=django.db.models.deletion.SET_NULL,
to="api.program",
),
),
],
),
]
11 changes: 11 additions & 0 deletions gateway/api/models.py
Original file line number Diff line number Diff line change
Expand Up @@ -161,3 +161,14 @@ def __str__(self):
def in_terminal_state(self):
"""Returns true if job is in terminal state."""
return self.status in self.TERMINAL_STATES


class CatalogEntry(models.Model):
"""Catalog Entry model."""

title = models.CharField(max_length=255)
description = models.TextField()
tags = models.TextField(null=False, blank=True, default="[]")
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

thinking outloud: if in the future (not that distant) we want to filter / search by tag would that be better if we have Tag as separate model and in ManyTomany relationship? then all search queries will be something like CatalogEntry.objects.filter(tags__in=["chemistry", "finance", ...])

Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I'm not sure about performance, though 🤔

Copy link
Collaborator Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Model = table, right? (still learning what the django abstractions are)
If so, I think for performance we might be better with multiple rows in the catalog (one for each tag), as usually its quicker to search the DB than do joins... but it also somewhat depends on how what type of queries we expect to be doing most frequently ...
All that said, I also don't expect the catalog to be so large that changing the data model a few months down the line ends up being prohibitive either...

created = models.DateTimeField(auto_now_add=True)
updated = models.DateTimeField(auto_now=True, null=True)
program = models.ForeignKey(to=Program, on_delete=models.SET_NULL, null=True)