CREATE TABLE reg_users (
  username varchar(30) not null,
  passwd varchar(30) not null,	

  PRIMARY KEY (username)
);


CREATE TABLE groups (
	groupname varchar(30) not null,
	
	PRIMARY KEY (groupname)
);

CREATE TABLE user_groups (
	username  varchar(30) not null,
	groupname  varchar(30) not null,
	
	FOREIGN KEY(username) references reg_users(username),
	FOREIGN KEY(groupname) references groups (groupname)
);

CREATE TABLE dirs (
	parent_id  integer not null,
	dir_id	   integer not null GENERATED ALWAYS AS IDENTITY (START WITH 1, INCREMENT BY 1),
	dir_name   varchar(255) not null,
	groupname  varchar(30) not null,
	other_mode smallint not null,
	group_mode smallint not null,
	isroot 	   smallint not null,

	PRIMARY KEY (dir_id),
	UNIQUE (dir_name,parent_id),
	FOREIGN KEY (groupname) references groups (groupname)
);

CREATE TABLE files (
 	parent_id  integer not null,
	file_id    integer not null GENERATED ALWAYS AS IDENTITY (START WITH 1, INCREMENT BY 1),
	file_name  varchar(256) not null,
	extension  varchar(256) not null,
	size 	   bigint not null,
	groupname  varchar(30) not null,
	other_mode smallint not null,
	group_mode smallint not null,
	isroot 	   smallint not null,

	PRIMARY KEY (file_id),
	UNIQUE (file_name,parent_id,extension),
	FOREIGN KEY (groupname) references groups(groupname),
	FOREIGN KEY (parent_id) references dirs(dir_id)
);




CREATE TABLE friends (
	friend_id integer not null,
	name varchar(60) not null,
	ip    integer not null,
	port  integer not null,
	description varchar(300),

	PRIMARY KEY (friend_id),
	UNIQUE(name,ip,port)
);


INSERT INTO groups VALUES ('general');

