Add database schema and migration tasks
This commit is contained in:
1 parent
7a4805f749
commit
cde8e13705
5 files changed
+94
-7
No files matched your search
@@ -8,6 +8,9 @@ group :development do
|
|||||||
gem "dotenv"
|
gem "dotenv"
|
||||||
end
|
end
|
||||||
|
|
||||||
|
# Tasks
|
||||||
|
gem "rake"
|
||||||
|
|
||||||
# Base
|
# Base
|
||||||
gem "roda"
|
gem "roda"
|
||||||
gem "rackup"
|
gem "rackup"
|
||||||
|
|||||||
+5
-2
@@ -41,6 +41,7 @@ GEM
|
|||||||
rack (3.2.7)
|
rack (3.2.7)
|
||||||
rackup (2.3.1)
|
rackup (2.3.1)
|
||||||
rack (>= 3)
|
rack (>= 3)
|
||||||
|
rake (13.4.2)
|
||||||
rbs (4.2.0)
|
rbs (4.2.0)
|
||||||
logger
|
logger
|
||||||
prism (>= 1.6.0)
|
prism (>= 1.6.0)
|
||||||
@@ -68,7 +69,7 @@ PLATFORMS
|
|||||||
x86_64-linux
|
x86_64-linux
|
||||||
|
|
||||||
DEPENDENCIES
|
DEPENDENCIES
|
||||||
bcrypt (~> 3.1)
|
bcrypt
|
||||||
commonmarker
|
commonmarker
|
||||||
dotenv
|
dotenv
|
||||||
erubi
|
erubi
|
||||||
@@ -76,8 +77,9 @@ DEPENDENCIES
|
|||||||
mail
|
mail
|
||||||
puma
|
puma
|
||||||
rackup
|
rackup
|
||||||
|
rake
|
||||||
roda
|
roda
|
||||||
rodauth (~> 2.49)
|
rodauth
|
||||||
sequel
|
sequel
|
||||||
sqlite3
|
sqlite3
|
||||||
tilt
|
tilt
|
||||||
@@ -106,6 +108,7 @@ CHECKSUMS
|
|||||||
puma (8.0.2) sha256=c8ed871dfbbe66448ea9ffd46692342d9804d4071522b52b5331b7b6e7b686fb
|
puma (8.0.2) sha256=c8ed871dfbbe66448ea9ffd46692342d9804d4071522b52b5331b7b6e7b686fb
|
||||||
rack (3.2.7) sha256=93e13e1c24f93556671d85d2d79fa228c3485815c50d7e2f265b5330c6528fb7
|
rack (3.2.7) sha256=93e13e1c24f93556671d85d2d79fa228c3485815c50d7e2f265b5330c6528fb7
|
||||||
rackup (2.3.1) sha256=6c79c26753778e90983761d677a48937ee3192b3ffef6bc963c0950f94688868
|
rackup (2.3.1) sha256=6c79c26753778e90983761d677a48937ee3192b3ffef6bc963c0950f94688868
|
||||||
|
rake (13.4.2) sha256=cb825b2bd5f1f8e91ca37bddb4b9aaf345551b4731da62949be002fa89283701
|
||||||
rbs (4.2.0) sha256=51f7b886dcc05bc09e10b901daa6a81829f6adc03101d6ca9ea4aac6103e0674
|
rbs (4.2.0) sha256=51f7b886dcc05bc09e10b901daa6a81829f6adc03101d6ca9ea4aac6103e0674
|
||||||
rdoc (8.1.0) sha256=befc37880a5cfd36dcb176c748b5fd5ee39dd3536a75e81824e4972ce230f60a
|
rdoc (8.1.0) sha256=befc37880a5cfd36dcb176c748b5fd5ee39dd3536a75e81824e4972ce230f60a
|
||||||
reline (0.7.0) sha256=5b012d8e55dbf9d450f12bde2cf7d15ff546ae80b3f8f3b30e570d431815583d
|
reline (0.7.0) sha256=5b012d8e55dbf9d450f12bde2cf7d15ff546ae80b3f8f3b30e570d431815583d
|
||||||
|
|||||||
@@ -1,10 +1,10 @@
|
|||||||
# netig.net
|
# 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
|
- 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
|
## Développement
|
||||||
|
|
||||||
@@ -21,7 +21,20 @@ SESSION_SECRET=...
|
|||||||
SMTP_PASSWORD=...
|
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 :
|
Démarrer le serveur de développement :
|
||||||
|
|
||||||
@@ -37,4 +50,12 @@ bundle exec irb -r dotenv/load -r ./netig.rb
|
|||||||
|
|
||||||
## Production
|
## 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
|
||||||
|
```
|
||||||
@@ -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
|
||||||
@@ -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
|
||||||
Reference in new issue
Block a user