diff --git a/sust.hcl b/sust.hcl new file mode 100644 index 0000000..1e9194f --- /dev/null +++ b/sust.hcl @@ -0,0 +1,329 @@ +table "deliveries" { + schema = schema.sust + column "id" { + null = false + type = serial + } + column "delivery_date" { + null = true + type = timestamp + } + column "member_id" { + null = true + type = integer + } + column "delivered_by_id" { + null = true + type = integer + } + column "delivery_year" { + null = true + type = date + } + primary_key { + columns = [column.id] + } + foreign_key "deliveries_member_id_delivered_by_fkey" { + columns = [column.delivered_by_id] + ref_columns = [table.members.column.id] + on_update = NO_ACTION + on_delete = NO_ACTION + } + foreign_key "deliveries_member_id_fkey" { + columns = [column.member_id] + ref_columns = [table.members.column.id] + on_update = NO_ACTION + on_delete = NO_ACTION + } + index "ix_deliveries_delivery_date" { + columns = [column.delivery_date] + } + index "ix_deliveries_id" { + columns = [column.id] + } + unique "deliveries_ukey_member_year" { + columns = [column.member_id, column.delivery_year] + } +} +table "member_sections" { + schema = schema.sust + column "member_id" { + null = false + type = integer + } + column "section_id" { + null = false + type = integer + } + primary_key { + columns = [column.member_id, column.section_id] + } + foreign_key "member_sections_member_id_fkey" { + columns = [column.member_id] + ref_columns = [table.members.column.id] + on_update = NO_ACTION + on_delete = CASCADE + } + foreign_key "member_sections_section_id_fkey" { + columns = [column.section_id] + ref_columns = [table.sections.column.id] + on_update = NO_ACTION + on_delete = CASCADE + } +} +table "members" { + schema = schema.sust + column "id" { + null = false + type = serial + } + column "member_count" { + null = true + type = integer + default = 1 + } + column "member_firstname" { + null = true + type = character_varying + } + column "member_firstname_spouse" { + null = true + type = character_varying + } + column "member_surname" { + null = true + type = character_varying + } + column "member_suffix" { + null = true + type = character_varying + } + column "member_street" { + null = true + type = character_varying + } + column "member_streetnumber" { + null = true + type = character_varying + } + column "member_email" { + null = true + type = character_varying(255) + } + column "member_zip" { + null = true + type = integer + } + column "member_city" { + null = true + type = character_varying + } + column "member_active" { + null = true + type = boolean + default = true + } + column "member_connected" { + null = true + type = integer + } + column "created_date" { + null = true + type = timestamp + default = sql("CURRENT_TIMESTAMP") + } + column "updated_date" { + null = true + type = timestamp + } + column "member_gender" { + null = true + type = enum.gender + } + column "member_died" { + null = true + type = timestamp + } + column "member_printed" { + null = true + type = boolean + } + column "member_coordinates" { + null = true + type = point + comment = "UNUSED" + } + column "member_geo_latitude" { + null = true + type = numeric + } + column "member_geo_longitude" { + null = true + type = numeric + } + column "member_membership_start" { + null = true + type = timestamp + } + column "member_phone" { + null = true + type = sql("sust.phone_number") + } + primary_key { + columns = [column.id] + } + foreign_key "members_member_connected_fkey" { + columns = [column.member_connected] + ref_columns = [table.members.column.id] + on_update = NO_ACTION + on_delete = NO_ACTION + } + index "ix_members_id" { + columns = [column.id] + } + index "ix_members_member_city" { + columns = [column.member_city] + } + index "ix_members_member_email" { + columns = [column.member_email] + } + index "ix_members_member_firstname" { + columns = [column.member_firstname] + } + index "ix_members_member_street" { + columns = [column.member_street] + } + index "ix_members_member_surname" { + columns = [column.member_surname] + } + index "ix_members_member_zip" { + columns = [column.member_zip] + } + check "cc_members_email_lowercase" { + expr = "((member_email)::text = lower((member_email)::text))" + } + unique "members_member_phone_key" { + columns = [column.member_phone] + } +} +table "payments" { + schema = schema.sust + column "id" { + null = false + type = serial + } + column "payment_date" { + null = true + type = date + } + column "member_id" { + null = true + type = integer + } + column "payment_amount" { + null = true + type = numeric + } + column "payment_year" { + null = true + type = date + comment = "Year, for which the payment is intended for." + } + primary_key { + columns = [column.id] + } + foreign_key "payments_member_id_fkey" { + columns = [column.member_id] + ref_columns = [table.members.column.id] + on_update = NO_ACTION + on_delete = NO_ACTION + } + index "ix_payments_id" { + columns = [column.id] + } + index "ix_payments_payment_date" { + columns = [column.payment_date] + } + index "payments_ukey_member_year" { + unique = true + columns = [column.member_id, column.payment_year] + } +} +table "payments_csv" { + schema = schema.sust + column "id" { + null = false + type = serial + } + column "pc_valuta_date" { + null = true + type = date + } + column "pc_client" { + null = true + type = character_varying(50) + } + column "pc_reference" { + null = true + type = character_varying(50) + } + column "pc_intended" { + null = true + type = character_varying(100) + } + column "pc_iban" { + null = true + type = character_varying(50) + } + column "pc_entry_date" { + null = true + type = date + } + column "pc_amount" { + null = true + type = numeric + } + column "pc_currency" { + null = true + type = character_varying(3) + } + column "pc_timestamp" { + null = true + type = timestamp + } + column "pc_processed" { + null = true + type = boolean + default = false + } + primary_key { + columns = [column.id] + } +} +table "sections" { + schema = schema.sust + column "id" { + null = false + type = serial + } + column "section_name" { + null = false + type = character_varying + } + primary_key { + columns = [column.id] + } + index "ix_sections_id" { + columns = [column.id] + } + unique "sections_section_name_key" { + columns = [column.section_name] + } +} +enum "gender" { + schema = schema.sust + values = ["male", "female", "divers"] +} +schema "sust" { + comment = "standard public schema" +}