
/* drop tables */

drop table i3geousr_grupotema;
drop table i3geousr_grupousuario;
drop table i3geousr_grupos;
drop table i3geousr_operacoespapeis;
drop table i3geousr_operacoes;
drop table i3geousr_papelusuario;
drop table i3geousr_papeis;
drop table i3geousr_usuarios;




/* create tables */

-- grupos de usuários
create table i3geousr_grupos
(
	-- identificador único do grupo
	id_grupo integer not null unique primary key autoincrement,
	-- nome do grupo
	nome text,
	-- descricao do grupo
	descricao text
);


-- define os grupos que podem utilizar os temas (mapfiles)
create table i3geousr_grupotema
(
	-- identificador único do grupo
	id_grupo integer not null,
	-- código do tema na tabela i3geoadmin_temas
	id_tema integer not null,
	foreign key (id_grupo)
	references i3geousr_grupos (id_grupo)
);


-- cadastro de usuários
create table i3geousr_usuarios
(
	id_usuario integer not null unique primary key autoincrement,
	-- 0 ou 1 indicando se o usuário está ativo ou não
	ativo numeric not null,
	-- data do cadastro do usuário
	data_cadastro text,
	email text,
	-- login do usuário
	login text not null,
	-- nome real do usuário
	nome_usuario text,
	senha text not null
);


create table i3geousr_grupousuario
(
	id_usuario integer not null,
	-- identificador único do grupo
	id_grupo integer not null,
	foreign key (id_usuario)
	references i3geousr_usuarios (id_usuario),
	foreign key (id_grupo)
	references i3geousr_grupos (id_grupo)
);


-- cadastro de operações do sistema
create table i3geousr_operacoes
(
	id_operacao integer not null unique primary key autoincrement,
	-- código da operação
	codigo text,
	descricao text
);


-- cadastro de papéis que permitem definir as operações
create table i3geousr_papeis
(
	id_papel integer not null unique,
	nome text not null unique,
	descricao text
);


create table i3geousr_operacoespapeis
(
	id_operacao integer not null,
	id_papel integer not null,
	foreign key (id_operacao)
	references i3geousr_operacoes (id_operacao),
	foreign key (id_papel)
	references i3geousr_papeis (id_papel)
);


create table i3geousr_papelusuario
(
	id_usuario integer not null,
	id_papel integer not null,
	foreign key (id_papel)
	references i3geousr_papeis (id_papel),
	foreign key (id_usuario)
	references i3geousr_usuarios (id_usuario)
);



