From 3483f1e91d460fd503e82cc0ffbdf65c3e2c4be5 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Tom=C3=A1=C5=A1?= <git@imaniti.org>
Date: Fri, 3 Feb 2023 13:13:58 +0900
Subject: [PATCH] fix max_lengths, dir structure, settings, foreign key
 ondelete & verbose names

---
 .gitignore                               |  2 +
 env.example                              |  1 +
 registry/manage.py => manage.py          |  0
 registry/{registry => }/__init__.py      |  0
 registry/{registry => }/asgi.py          |  0
 registry/registry/settings/production.py |  1 -
 registry/{registry => }/settings/base.py | 11 +++-
 registry/settings/dev.py                 |  3 +
 registry/settings/production.py          |  1 +
 registry/{registry => }/urls.py          |  0
 registry/{registry => }/wsgi.py          |  0
 shared/models.py                         | 79 ++++++++++++++----------
 webpack-stats.json                       | 30 ---------
 13 files changed, 63 insertions(+), 65 deletions(-)
 rename registry/manage.py => manage.py (100%)
 rename registry/{registry => }/__init__.py (100%)
 rename registry/{registry => }/asgi.py (100%)
 delete mode 100644 registry/registry/settings/production.py
 rename registry/{registry => }/settings/base.py (94%)
 create mode 100644 registry/settings/dev.py
 create mode 100644 registry/settings/production.py
 rename registry/{registry => }/urls.py (100%)
 rename registry/{registry => }/wsgi.py (100%)
 delete mode 100644 webpack-stats.json

diff --git a/.gitignore b/.gitignore
index d50a09f..d8265e7 100644
--- a/.gitignore
+++ b/.gitignore
@@ -1,2 +1,4 @@
 .env
 __pycache__/
+node_modules/*
+shared/static/*
diff --git a/env.example b/env.example
index f3ee301..9f408e5 100644
--- a/env.example
+++ b/env.example
@@ -1 +1,2 @@
+SECRET_KEY=supersecret
 DEFAULT_SIGNING_PARTY_REPRESENTATIVE="Česká pirátská strana\nNa Moráni 360/3\n128 00 Praha 2\nIČ: 71339698\nDIČ: CZ71339698"
diff --git a/registry/manage.py b/manage.py
similarity index 100%
rename from registry/manage.py
rename to manage.py
diff --git a/registry/registry/__init__.py b/registry/__init__.py
similarity index 100%
rename from registry/registry/__init__.py
rename to registry/__init__.py
diff --git a/registry/registry/asgi.py b/registry/asgi.py
similarity index 100%
rename from registry/registry/asgi.py
rename to registry/asgi.py
diff --git a/registry/registry/settings/production.py b/registry/registry/settings/production.py
deleted file mode 100644
index d8e79df..0000000
--- a/registry/registry/settings/production.py
+++ /dev/null
@@ -1 +0,0 @@
-from .base import * 
diff --git a/registry/registry/settings/base.py b/registry/settings/base.py
similarity index 94%
rename from registry/registry/settings/base.py
rename to registry/settings/base.py
index 6173ee2..815c3c1 100644
--- a/registry/registry/settings/base.py
+++ b/registry/settings/base.py
@@ -10,11 +10,18 @@ For the full list of settings and their values, see
 https://docs.djangoproject.com/en/4.0/ref/settings/
 """
 
-from pathlib import Path
+import os
+import pathlib
+
+import environ
+import dj_database_url
 
 # Build paths inside the project like this: BASE_DIR / 'subdir'.
-BASE_DIR = Path(__file__).resolve().parent.parent
+BASE_DIR = pathlib.Path(__file__).parents[2]
+
 
+env = environ.Env()
+environ.Env.read_env(os.path.join(BASE_DIR, ".env"))
 
 # Quick-start development settings - unsuitable for production
 # See https://docs.djangoproject.com/en/4.0/howto/deployment/checklist/
diff --git a/registry/settings/dev.py b/registry/settings/dev.py
new file mode 100644
index 0000000..3ac92de
--- /dev/null
+++ b/registry/settings/dev.py
@@ -0,0 +1,3 @@
+from .base import *
+
+DEBUG = True
diff --git a/registry/settings/production.py b/registry/settings/production.py
new file mode 100644
index 0000000..9b5ed21
--- /dev/null
+++ b/registry/settings/production.py
@@ -0,0 +1 @@
+from .base import *
diff --git a/registry/registry/urls.py b/registry/urls.py
similarity index 100%
rename from registry/registry/urls.py
rename to registry/urls.py
diff --git a/registry/registry/wsgi.py b/registry/wsgi.py
similarity index 100%
rename from registry/registry/wsgi.py
rename to registry/wsgi.py
diff --git a/shared/models.py b/shared/models.py
index 8349f55..8612a55 100644
--- a/shared/models.py
+++ b/shared/models.py
@@ -5,7 +5,9 @@ from django_countries.fields import CountryField
 from markdownx.models import MarkdownxField
 from pirates import models as pirates_models
 
-# Create your models here.
+
+class User(pirates_models.AbstractUser):
+    pass
 
 
 class ContractExternalSigner(models.Model):
@@ -129,7 +131,7 @@ class ContractLocalSigner(models.Model):
         verbose_name_plural = "Naše smlouvní strany"
 
 
-class ContractSubtypes(models.Model):
+class ContractSubtype(models.Model):
     name = models.CharField(
         max_length=32,
         verbose_name="Jméno",
@@ -172,12 +174,13 @@ class ContractFilingArea(models.Model):
 
 class Contract(models.Model):
     class ContractTypes(models.TextChoices):
-        PRIMARY = "Hlavní"
-        AMENDMENT = "Dodatek"
-        FRAMEWORK_ORDER = "Objednávka u rámcové smlouvy"
+        PRIMARY = "primary", "Hlavní"
+        AMENDMENT = "amendment", "Dodatek"
+        FRAMEWORK_ORDER = "framework_order", "Objednávka u rámcové smlouvy"
 
     type_ = models.CharField(
-        max_length=len(ContractTypes.FRAMEWORK_ORDER),
+        max_length=15,
+        choices=ContractTypes.choices,
         default=ContractTypes.PRIMARY,
         verbose_name="Typ",
     )
@@ -200,14 +203,20 @@ class Contract(models.Model):
     )  # WARNING: Seems to only be used for amendments
 
 
-    external_signer = models.ForeignKey(ContractExternalSigner)
+    external_signer = models.ForeignKey(
+        ContractExternalSigner,
+        on_delete=models.CASCADE,
+    )
 
     # NOTE: Should we allow these to be null, if a contract is logged before it is signed?
     external_signer_signature_date = models.DateField(
         verbose_name="Datum podpisu druhé strany",
     )
 
-    local_signer = models.ForeignKey(ContractLocalSigner)
+    local_signer = models.ForeignKey(
+        ContractLocalSigner,
+        on_delete=models.CASCADE,
+    )
 
     local_signer_signature_date = models.DateField(
         verbose_name="Datum podpisu naší strany",
@@ -227,50 +236,50 @@ class Contract(models.Model):
 
 
     uploaded_by = models.ForeignKey(
-        pirates_models.User,
+        User,
         on_delete=models.CASCADE,
         verbose_name="Nahráno uživatelem",
     )
 
 
     class LegalStates(models.TextChoices):
-        VALID = "Platná"
-        EFFECTIVE = "Účinná"
-        NOT_EFFECTIVE = "Neúčinná"
-        INVALID = "Neplatná"
+        VALID = "valid", "Platná"
+        EFFECTIVE = "effective", "Účinná"
+        NOT_EFFECTIVE = "not_effective", "Neúčinná"
+        INVALID = "invalid", "Neplatná"
 
     class PublicStates(models.TextChoices):
-        WAITING = "Nová"
-        YES = "Zveřejněná"
-        NO = "Neveřejná"
+        UNKNOWN = "unknown", "Nová"
+        YES = "yes", "Zveřejněná"
+        NO = "no", "Neveřejná"
 
     class PaperFormStates(models.TextChoices):
-        SENT = "Odeslaná"
-        STORED = "Uložená"
-        TO_SHRED = "Ke skartaci"
-        SHREDDED = "Skartovaná"
+        SENT = "sent", "Odeslaná"
+        STORED = "stored", "Uložená"
+        TO_SHRED = "to_shred", "Ke skartaci"
+        SHREDDED = "shredded", "Skartovaná"
 
     legal_state = models.CharField(
-        max_length=len(LegalStates.NOT_EFFECTIVE),  # longest choice
-        choices=LegalStates,
+        max_length=13,
+        choices=LegalStates.choices,
         verbose_name="Stav právního ujednání",
     )
 
     public_state = models.CharField(
-        max_length=len(PublicStates.YES),  # longest choice
-        choices=PublicStates,
+        max_length=7,
+        choices=PublicStates.choices,
         verbose_name="Veřejnost smlouvy",
     )
 
     paper_form_state = models.CharField(
-        max_length=len(PaperFormStates.TO_SHRED),  # longest choice
-        choices=PaperFormStates,
+        max_length=8,
+        choices=PaperFormStates.choices,
         verbose_name="Stav papírové formy",
     )
 
 
     public_status_set_by = models.ForeignKey(
-        pirates_models.User,
+        User,
         on_delete=models.CASCADE,
         verbose_name="Zveřejněno / nezveřejněno uživatelem",
     )
@@ -298,7 +307,7 @@ class Contract(models.Model):
     )
 
 
-    issues = modles.ManyToManyField(ContractIssue)
+    issues = models.ManyToManyField(ContractIssue)
 
 
     summary = models.CharField(
@@ -314,7 +323,8 @@ class Contract(models.Model):
     )
 
     primary_contract = models.ForeignKey(
-        Contract,
+        "Contract",
+        on_delete=models.CASCADE,
         blank=True,
         null=True,
         verbose_name="Hlavní smlouva",
@@ -355,6 +365,7 @@ class Contract(models.Model):
 
     filing_area = models.ForeignKey(
         ContractFilingArea,
+        on_delete=models.CASCADE,
         blank=True,
         null=True,
     )  # WARNING: Dependent on the type!
@@ -366,11 +377,15 @@ class Contract(models.Model):
 
 
 class ContractNote(models.Model):
-    contract = models.ForeignKey(Contract)
+    contract = models.ForeignKey(
+        Contract,
+        on_delete=models.CASCADE,
+    )
 
 
     author = models.ForeignKey(
-        pirates_models.User,
+        User,
+        on_delete=models.CASCADE,
         verbose_name="Autor",
     )
 
@@ -378,7 +393,7 @@ class ContractNote(models.Model):
         verbose_name="Datum vytvoření",
     )
 
-    content = models.MarkdownxField(
+    content = MarkdownxField(
         verbose_name="Obsah",
     )
 
diff --git a/webpack-stats.json b/webpack-stats.json
deleted file mode 100644
index 3e296a9..0000000
--- a/webpack-stats.json
+++ /dev/null
@@ -1,30 +0,0 @@
-{
-  "status": "done",
-  "assets": {
-    "base-1150289fada5f20f5bd0.js": {
-      "name": "base-1150289fada5f20f5bd0.js",
-      "path": "/home/user/Projects/contract-registry/shared/static/shared/base-1150289fada5f20f5bd0.js"
-    },
-    "runtime-1150289fada5f20f5bd0.js": {
-      "name": "runtime-1150289fada5f20f5bd0.js",
-      "path": "/home/user/Projects/contract-registry/shared/static/shared/runtime-1150289fada5f20f5bd0.js"
-    },
-    "shared-1150289fada5f20f5bd0.js": {
-      "name": "shared-1150289fada5f20f5bd0.js",
-      "path": "/home/user/Projects/contract-registry/shared/static/shared/shared-1150289fada5f20f5bd0.js"
-    },
-    "shared-1150289fada5f20f5bd0.js.LICENSE.txt": {
-      "name": "shared-1150289fada5f20f5bd0.js.LICENSE.txt",
-      "path": "/home/user/Projects/contract-registry/shared/static/shared/shared-1150289fada5f20f5bd0.js.LICENSE.txt"
-    }
-  },
-  "chunks": {
-    "base": [
-      "base-1150289fada5f20f5bd0.js"
-    ],
-    "shared": [
-      "runtime-1150289fada5f20f5bd0.js",
-      "shared-1150289fada5f20f5bd0.js"
-    ]
-  }
-}
\ No newline at end of file
-- 
GitLab