require "./src/dodb.cr"

class Voiture
	include JSON::Serializable

	property nom     : String
	property couleur : String
	property tags    : Array(String)

	def initialize(@nom, @couleur, @tags)
	end
end


voitures = DODB::DataBase(Voiture).new "db-voitures"

voiture_par_nom     = voitures.new_index     "nom",        &.nom
voiture_par_couleur = voitures.new_partition "couleur",    &.couleur
voiture_par_tag     = voitures.new_tags      "étiquettes", &.tags

voitures << Voiture.new "Corvet", "rouge", ["jolie", "classique"]
voitures << Voiture.new "Bullet-GT", "bleue", ["jolie", "rapide"]

# La Corvet devient bleue.
voiture = voiture_par_nom.get "Corvet"
voiture.couleur = "bleue"
voiture_par_nom.update voiture

# La Bullet-GT change de nom.
voiture = voiture_par_nom.get "Bullet-GT"
voiture.nom = "Not-So-Fast-Bullet-GT"
voiture_par_nom.update "Bullet-GT", voiture # Le nom (l'indice) a changé.

# Comme nous le savons tous, les jolies voitures sont également chères.
voiture_par_tag.get("jolie").each do |voiture|
	voiture.tags << "chère"
	voiture_par_nom.update voiture
end

# Suppression des voitures bleues et classiques.
voiture_par_couleur.delete "bleue", do |voiture|
	voiture.tags.includes? "classique"
end

voitures.each do |voiture|
	pp! voiture
end