MOD regroupement des fonctions de la BD
[euphorik.git] / modules / erl / euphorik_bd.erl
1 % Module de création de la base de données euphorik.
2 % @author G.Burri
3
4 -module(euphorik_bd).
5 -export([
6 create/0,
7 create_tables/0,
8 vers_version/1,
9 peupler/0
10 ]).
11
12 -include("../include/euphorik_bd.hrl").
13
14
15 % Instructions pour créer une nouvelle base :
16 % $erl -sname yaws -mnesia dir '"/projets/euphorik/BD"'
17 % voir doc/installation.txt
18 % >l(euphorik_bd).
19 % >euphorik_bd:create().
20 create() ->
21 mnesia:stop(),
22 mnesia:delete_schema([node()]),
23 mnesia:create_schema([node()]), % nécessaire pour les tables sur disc
24 mnesia:start(),
25 create_tables().
26
27
28 create_tables() ->
29 mnesia:create_table(counter, [
30 {attributes, record_info(fields, counter)},
31 {disc_copies, [node()]}
32 ]),
33 mnesia:create_table(minichat, [
34 {attributes, record_info(fields, minichat)},
35 {index, [auteur_id]},
36 {disc_copies, [node()]}
37 ]),
38 mnesia:create_table(reponse_minichat, [
39 {type, bag},
40 {attributes, record_info(fields, reponse_minichat)},
41 {index, [cible]},
42 {disc_copies, [node()]}
43 ]),
44 mnesia:create_table(user, [
45 {attributes, record_info(fields, user)},
46 {index, [cookie, login]},
47 {disc_copies, [node()]}
48 ]),
49 mnesia:create_table(ip_table, [
50 {attributes, record_info(fields, ip_table)},
51 {disc_copies, [node()]}
52 ]),
53 mnesia:create_table(troll, [
54 {attributes, record_info(fields, troll)},
55 {disc_copies, [node()]}
56 ]).
57
58
59 vers_version(2) ->
60 mnesia:transform_table(
61 user,
62 fun({user, Id, Cookie, Pseudo, Date_creation, Date_derniere_connexion, Css}) ->
63 {user, Id, Cookie, Pseudo, "", "", "", Date_creation, Date_derniere_connexion, Css}
64 end,
65 record_info(fields, user),
66 user
67 );
68 vers_version(3) ->
69 mnesia:transform_table(
70 user,
71 fun({user, Id, Cookie, Pseudo, Login, Password, Email, Date_creation, Date_derniere_connexion, Css}) ->
72 {user, Id, Cookie, Pseudo, Login, Password, Email, Date_creation, Date_derniere_connexion, Css, 0}
73 end,
74 record_info(fields, user),
75 user
76 );
77 vers_version(4) ->
78 mnesia:transform_table(
79 user,
80 fun({user, Id, Cookie, Pseudo, Login, Password, Email, Date_creation, Date_derniere_connexion, Css, Indice_flood}) ->
81 {user, Id, Cookie, Pseudo, Login, Password, Email, Date_creation, Date_derniere_connexion, Css, Indice_flood, []}
82 end,
83 record_info(fields, user),
84 user
85 );
86 % Ajout du numéro de page de la conv principale
87 vers_version(5) ->
88 mnesia:transform_table(
89 user,
90 fun({user, Id, Cookie, Pseudo, Login, Password, Email, Date_creation, Date_derniere_connexion, Css, Indice_flood, Conversations}) ->
91 {user, Id, Cookie, Pseudo, Login, Password, Email, Date_creation, Date_derniere_connexion, Css, Indice_flood, 1, Conversations}
92 end,
93 record_info(fields, user),
94 user
95 );
96 % Ajout le format d'affichage des pseudos
97 vers_version(6) ->
98 mnesia:transform_table(
99 user,
100 fun({user, Id, Cookie, Pseudo, Login, Password, Email, Date_creation, Date_derniere_connexion, Css, Indice_flood, Page_Principale, Conversations}) ->
101 {user, Id, Cookie, Pseudo, Login, Password, Email, Date_creation, Date_derniere_connexion, Css, nick, Indice_flood, Page_Principale, Conversations}
102 end,
103 record_info(fields, user),
104 user
105 );
106 % Ajout de la table 'ip_table'
107 % Ajout du statut 'ek_master' pour les users
108 vers_version(7) ->
109 mnesia:transform_table(
110 user,
111 fun({user, Id, Cookie, Pseudo, Login, Password, Email, Date_creation, Date_derniere_connexion, Css, Nick_format, Indice_flood, Page_Principale, Conversations}) ->
112 {user, Id, Cookie, Pseudo, Login, Password, Email, Date_creation, Date_derniere_connexion, Css, Nick_format, Indice_flood, Page_Principale, Conversations, false, undefined}
113 end,
114 record_info(fields, user),
115 user
116 ),
117 mnesia:create_table(ip_table, [
118 {attributes, record_info(fields, ip_table)},
119 {disc_copies, [node()]}
120 ]),
121 mnesia:create_table(troll, [
122 {attributes, record_info(fields, troll)},
123 {disc_copies, [node()]}
124 ]);
125 vers_version(8) ->
126 mnesia:transform_table(
127 ip_table,
128 fun() -> null end,
129 record_info(fields, ip_table),
130 ip_table
131 ).
132
133
134
135 % exemple de peuplage de la BD, utilisé pour les tests
136 peupler() ->
137 mnesia:transaction(
138 fun() ->
139 mnesia:write({minichat, now(), "Pierre", "Salut tout le monde"}),
140 mnesia:write({minichat, now(), "Paul", "Salut à toi !"})
141 end
142 ).