Add database schema and migration tasks

This commit is contained in:
julien committed 2026-11-02 14:08:29 +01:00
1 parent 7a4805f749
commit cde8e13705
5 files changed
+94 -7

No files matched your search

+3
View File
@@ -8,6 +8,9 @@ group :development do
gem "dotenv"
end
# Tasks
gem "rake"
# Base
gem "roda"
gem "rackup"
+5 -2
View File
@@ -41,6 +41,7 @@ GEM
rack (3.2.7)
rackup (2.3.1)
rack (>= 3)
rake (13.4.2)
rbs (4.2.0)
logger
prism (>= 1.6.0)
@@ -68,7 +69,7 @@ PLATFORMS
x86_64-linux
DEPENDENCIES
bcrypt (~> 3.1)
bcrypt
commonmarker
dotenv
erubi
@@ -76,8 +77,9 @@ DEPENDENCIES
mail
puma
rackup
rake
roda
rodauth (~> 2.49)
rodauth
sequel
sqlite3
tilt
@@ -106,6 +108,7 @@ CHECKSUMS
puma (8.0.2) sha256=c8ed871dfbbe66448ea9ffd46692342d9804d4071522b52b5331b7b6e7b686fb
rack (3.2.7) sha256=93e13e1c24f93556671d85d2d79fa228c3485815c50d7e2f265b5330c6528fb7
rackup (2.3.1) sha256=6c79c26753778e90983761d677a48937ee3192b3ffef6bc963c0950f94688868
rake (13.4.2) sha256=cb825b2bd5f1f8e91ca37bddb4b9aaf345551b4731da62949be002fa89283701
rbs (4.2.0) sha256=51f7b886dcc05bc09e10b901daa6a81829f6adc03101d6ca9ea4aac6103e0674
rdoc (8.1.0) sha256=befc37880a5cfd36dcb176c748b5fd5ee39dd3536a75e81824e4972ce230f60a
reline (0.7.0) sha256=5b012d8e55dbf9d450f12bde2cf7d15ff546ae80b3f8f3b30e570d431815583d
+26 -5
View File
@@ -1,10 +1,10 @@
# netig.net
## TODO
## À faire
- ajouter une limite pour éviter les spams (/contact/send)
- limiter le spam sur `/contact/send`
- développer les comptes utilisateurs et leur interface
- ajouter l'affichage des recettes/dépenses sur la page d'accueil
- afficher les recettes et dépenses sur la page d'accueil
## Développement
@@ -21,7 +21,20 @@ SESSION_SECRET=...
SMTP_PASSWORD=...
```
Générer `SESSION_SECRET` avec `openssl rand -hex 64` et conserver la valeur dans `.env`.
Générer `SESSION_SECRET` avec `openssl rand -hex 64`.
Ne pas versionner le fichier `.env`.
Appliquer les migrations :
```sh
bundle exec rake db:migrate
```
Lister les tâches disponibles :
```sh
bundle exec rake -T
```
Démarrer le serveur de développement :
@@ -37,4 +50,12 @@ bundle exec irb -r dotenv/load -r ./netig.rb
## Production
Docker Compose fournit les variables avec `env_file` et définit `RACK_ENV=production`.
Docker Compose fournit les variables d'environnement via `env_file`
et définit `RACK_ENV=production`.
Exécuter les migrations dans le conteneur applicatif avant de
démarrer la nouvelle version :
```sh
bundle exec rake db:migrate
```
+25
View File
@@ -0,0 +1,25 @@
require "dotenv/load" if ENV.fetch("RACK_ENV", "development") == "development"
require_relative "lib/database"
Sequel.extension :migration
MIGRATIONS_PATH = File.expand_path("db/migrations", __dir__)
namespace :db do
desc "Apply pending database migrations"
task :migrate do
Sequel::Migrator.run(DB, MIGRATIONS_PATH)
end
desc "Display current migration version"
task :version do
version = if DB.tables.include?(:schema_info)
DB[:schema_info].get(:version) || 0
else
0
end
puts "Schema version: #{version}"
end
end
+35
View File
@@ -0,0 +1,35 @@
Sequel.migration do
up do
create_table(:members) do
primary_key :id, type: :Bignum
foreign_key :account_id, :accounts,
type: :Bignum,
null: false
String :kind, null: false
String :first_name
String :last_name
String :organization_name
index :account_id, unique: true
constraint :members_kind_valid,
Sequel.lit("kind IN ('individual', 'organization')")
constraint :members_identity_matches_kind,
Sequel.lit(
"(kind = 'individual' AND first_name IS NOT NULL " \
"AND trim(first_name) <> '' AND last_name IS NOT NULL " \
"AND trim(last_name) <> '' AND organization_name IS NULL) " \
"OR (kind = 'organization' AND first_name IS NULL " \
"AND last_name IS NULL AND organization_name IS NOT NULL " \
"AND trim(organization_name) <> '')"
)
end
end
down do
drop_table(:members)
end
end