From 34de783e4124b6d9fbe692f1591ca3230fffbbf3 Mon Sep 17 00:00:00 2001 From: LiquidLemon Date: Fri, 22 Mar 2024 01:23:25 +0100 Subject: [PATCH 1/3] feat: add migrations via atlas --- DEVELOPMENT.md | 10 ++++++++++ Makefile | 0 atlas.hcl | 21 +++++++++++++++++++++ helpers/db_schema.sh | 4 ++++ migrations/20240321230454_init.sql | 19 +++++++++++++++++++ migrations/atlas.sum | 2 ++ whois/db_schema.py | 14 ++++++++++++++ 7 files changed, 70 insertions(+) create mode 100644 DEVELOPMENT.md create mode 100644 Makefile create mode 100644 atlas.hcl create mode 100755 helpers/db_schema.sh create mode 100644 migrations/20240321230454_init.sql create mode 100644 migrations/atlas.sum create mode 100644 whois/db_schema.py diff --git a/DEVELOPMENT.md b/DEVELOPMENT.md new file mode 100644 index 0000000..25f1449 --- /dev/null +++ b/DEVELOPMENT.md @@ -0,0 +1,10 @@ +# Development + +## Migrations + +If you make changes to the database schema, you need to generate a new migration. +To do this you need to install [atlas](https://atlasgo.io/). + +```shell +atlas migrate diff --env=local +``` diff --git a/Makefile b/Makefile new file mode 100644 index 0000000..e69de29 diff --git a/atlas.hcl b/atlas.hcl new file mode 100644 index 0000000..fffe3a0 --- /dev/null +++ b/atlas.hcl @@ -0,0 +1,21 @@ +data "external_schema" "peewee" { + program = [ + "helpers/db_schema.sh" + ] +} + +env "local" { + src = data.external_schema.peewee.url + dev = "sqlite://dev?mode=memory" + url = "sqlite://whoisdevices.db" + + migration { + dir = "file://migrations" + } + + format { + migrate { + diff = format("{{ sql . \" \" }}") + } + } +} diff --git a/helpers/db_schema.sh b/helpers/db_schema.sh new file mode 100755 index 0000000..64e3801 --- /dev/null +++ b/helpers/db_schema.sh @@ -0,0 +1,4 @@ +#!/bin/bash +export PYTHONPATH=. + +poetry run python whois/db_schema.py diff --git a/migrations/20240321230454_init.sql b/migrations/20240321230454_init.sql new file mode 100644 index 0000000..cfbefea --- /dev/null +++ b/migrations/20240321230454_init.sql @@ -0,0 +1,19 @@ +-- Create "device" table +CREATE TABLE `device` ( + `mac_address` char NOT NULL, + `hostname` varchar NULL, + `last_seen` datetime NOT NULL, + `user_id` integer NULL, + `flags` integer NULL, + PRIMARY KEY (`mac_address`), + CONSTRAINT `0` FOREIGN KEY (`user_id`) REFERENCES `user` (`id`) ON UPDATE NO ACTION ON DELETE NO ACTION +); +-- Create "user" table +CREATE TABLE `user` ( + `id` integer NOT NULL, + `username` varchar NOT NULL, + `password` varchar NOT NULL, + `display_name` varchar NOT NULL, + `flags` integer NULL, + PRIMARY KEY (`id`) +); diff --git a/migrations/atlas.sum b/migrations/atlas.sum new file mode 100644 index 0000000..31bdf80 --- /dev/null +++ b/migrations/atlas.sum @@ -0,0 +1,2 @@ +h1:EMRfUNLQLucjfPsImSG2fyQeY/BZRZ/LVYOtJAfHzf8= +20240321230454_init.sql h1:+0SqLh3omTCq19IGAYbyECsORj2cicbwW9rOqVwh6VQ= diff --git a/whois/db_schema.py b/whois/db_schema.py new file mode 100644 index 0000000..b266146 --- /dev/null +++ b/whois/db_schema.py @@ -0,0 +1,14 @@ +import peewee +from playhouse.reflection import print_table_sql + +from whois.database import Device, User + + +def print_schema(): + for model in [Device, User]: + print_table_sql(model) + print(";") + + +if __name__ == "__main__": + print_schema() From 2959e6d8c42a9e6910287b363c26774ddaa87d07 Mon Sep 17 00:00:00 2001 From: LiquidLemon Date: Fri, 22 Mar 2024 01:24:20 +0100 Subject: [PATCH 2/3] chore: remove unused empty Makefile --- Makefile | 0 1 file changed, 0 insertions(+), 0 deletions(-) delete mode 100644 Makefile diff --git a/Makefile b/Makefile deleted file mode 100644 index e69de29..0000000 From e3ab7a8092200df999377621a23881c2bfcb8a27 Mon Sep 17 00:00:00 2001 From: LiquidLemon Date: Fri, 22 Mar 2024 01:25:08 +0100 Subject: [PATCH 3/3] chore: mark atlas.sum as binary --- .gitattributes | 1 + 1 file changed, 1 insertion(+) create mode 100644 .gitattributes diff --git a/.gitattributes b/.gitattributes new file mode 100644 index 0000000..6f799f8 --- /dev/null +++ b/.gitattributes @@ -0,0 +1 @@ +migrations/atlas.sum binary