-- 
-- Database: `time-tracker`
-- 

-- --------------------------------------------------------

-- 
-- Table structure for table `categories`
-- 

CREATE TABLE IF NOT EXISTS `categories` (
  `CategoryID` int(11) NOT NULL auto_increment,
  `Name` varchar(255) NOT NULL,
  `ProjectID` int(11) NOT NULL,
  `ParentCategoryID` int(11) default '0',
  `Abbreviation` varchar(255) default NULL,
  `EstimateDuration` float(10,2) default '0.00',
  PRIMARY KEY  (`CategoryID`),
  UNIQUE KEY `UniqueNamePerProject` (`Name`,`ProjectID`),
  KEY `ProjectID` (`ProjectID`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

-- 
-- Dumping data for table `categories`
-- 


-- --------------------------------------------------------

-- 
-- Table structure for table `project`
-- 

CREATE TABLE IF NOT EXISTS `project` (
  `ProjectID` int(11) NOT NULL auto_increment,
  `Name` varchar(255) NOT NULL,
  `Description` varchar(255) default NULL,
  `CreationDate` datetime NOT NULL,
  `CompletionDate` datetime NOT NULL,
  `Disabled` tinyint(1) NOT NULL default '0',
  `EstimateDuration` float(10,2) NOT NULL default '0.00',
  `CreatorID` varchar(50) NOT NULL,
  `ManagerID` varchar(50) default NULL,
  PRIMARY KEY  (`ProjectID`),
  KEY `Name` (`Name`),
  KEY `CreatorID` (`CreatorID`),
  KEY `ManagerID` (`ManagerID`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

-- 
-- Dumping data for table `project`
-- 


-- --------------------------------------------------------

-- 
-- Table structure for table `project_members`
-- 

CREATE TABLE IF NOT EXISTS `project_members` (
  `UserID` varchar(50) NOT NULL,
  `ProjectID` int(11) NOT NULL,
  PRIMARY KEY  (`UserID`,`ProjectID`),
  KEY `ProjectID` (`ProjectID`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

-- 
-- Dumping data for table `project_members`
-- 


-- --------------------------------------------------------

-- 
-- Table structure for table `role_types`
-- 

CREATE TABLE IF NOT EXISTS `role_types` (
  `RoleType` varchar(50) NOT NULL,
  `Description` varchar(255) NOT NULL,
  PRIMARY KEY  (`RoleType`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

-- 
-- Dumping data for table `role_types`
-- 

INSERT INTO `role_types` (`RoleType`, `Description`) VALUES ('admin', 'Project administrator may additionally view the list of all users.'),
('consultant', 'Consultant may log time entries only.'),
('manager', 'Project manager may additionally edit all projects and view reports.');

-- --------------------------------------------------------

-- 
-- Table structure for table `signon`
-- 

CREATE TABLE IF NOT EXISTS `signon` (
  `SessionToken` varchar(32) NOT NULL,
  `Username` varchar(50) NOT NULL,
  `LastSignOnDate` datetime NOT NULL,
  PRIMARY KEY  (`SessionToken`),
  KEY `Username` (`Username`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

-- 
-- Dumping data for table `signon`
-- 


-- --------------------------------------------------------

-- 
-- Table structure for table `time_entry`
-- 

CREATE TABLE IF NOT EXISTS `time_entry` (
  `EntryID` int(11) NOT NULL auto_increment,
  `EntryCreated` datetime NOT NULL,
  `Duration` float(10,2) NOT NULL default '0.00',
  `Description` varchar(1000) default NULL,
  `CategoryID` int(11) NOT NULL default '0',
  `EntryDate` datetime default NULL,
  `CreatorID` varchar(50) NOT NULL,
  `UserID` varchar(50) NOT NULL,
  PRIMARY KEY  (`EntryID`),
  KEY `CategoryID` (`CategoryID`),
  KEY `CreatorID` (`CreatorID`),
  KEY `UserID` (`UserID`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

-- 
-- Dumping data for table `time_entry`
-- 


-- --------------------------------------------------------

-- 
-- Table structure for table `user_roles`
-- 

CREATE TABLE IF NOT EXISTS `user_roles` (
  `UserID` varchar(50) NOT NULL,
  `RoleType` varchar(50) NOT NULL,
  PRIMARY KEY  (`UserID`,`RoleType`),
  KEY `RoleType` (`RoleType`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

-- 
-- Dumping data for table `user_roles`
-- 

INSERT INTO `user_roles` (`UserID`, `RoleType`) VALUES ('admin', 'admin'),
('admin', 'consultant'),
('consultant', 'consultant'),
('manager', 'consultant'),
('admin', 'manager'),
('manager', 'manager');

-- --------------------------------------------------------

-- 
-- Table structure for table `users`
-- 

CREATE TABLE IF NOT EXISTS `users` (
  `Username` varchar(50) NOT NULL,
  `Password` varchar(50) NOT NULL,
  `EmailAddress` varchar(100) NOT NULL,
  `Disabled` tinyint(1) NOT NULL default '0',
  PRIMARY KEY  (`Username`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

-- 
-- Dumping data for table `users`
-- 

INSERT INTO `users` (`Username`, `Password`, `EmailAddress`, `Disabled`) VALUES ('admin', '21232f297a57a5a743894a0e4a801fc3', 'admin@prado.local', 0),
('consultant', '7adfa4f2ba9323e6c1e024de375434b0', 'consultant@prado.local', 0),
('manager', '1d0258c2440a8d19e716292b231e3190', 'manager@prado.local', 0);

-- 
-- Constraints for dumped tables
-- 

-- 
-- Constraints for table `categories`
-- 
ALTER TABLE `categories`
  ADD CONSTRAINT `categories_ibfk_1` FOREIGN KEY (`ProjectID`) REFERENCES `project` (`ProjectID`) ON DELETE CASCADE;

-- 
-- Constraints for table `project`
-- 
ALTER TABLE `project`
  ADD CONSTRAINT `project_ibfk_6` FOREIGN KEY (`ManagerID`) REFERENCES `users` (`Username`),
  ADD CONSTRAINT `project_ibfk_5` FOREIGN KEY (`CreatorID`) REFERENCES `users` (`Username`);

-- 
-- Constraints for table `project_members`
-- 
ALTER TABLE `project_members`
  ADD CONSTRAINT `project_members_ibfk_6` FOREIGN KEY (`ProjectID`) REFERENCES `project` (`ProjectID`) ON DELETE CASCADE,
  ADD CONSTRAINT `project_members_ibfk_5` FOREIGN KEY (`UserID`) REFERENCES `users` (`Username`) ON DELETE CASCADE;

-- 
-- Constraints for table `signon`
-- 
ALTER TABLE `signon`
  ADD CONSTRAINT `signon_ibfk_1` FOREIGN KEY (`Username`) REFERENCES `users` (`Username`);

-- 
-- Constraints for table `time_entry`
-- 
ALTER TABLE `time_entry`
  ADD CONSTRAINT `time_entry_ibfk_8` FOREIGN KEY (`UserID`) REFERENCES `users` (`Username`),
  ADD CONSTRAINT `time_entry_ibfk_6` FOREIGN KEY (`CategoryID`) REFERENCES `categories` (`CategoryID`) ON DELETE CASCADE,
  ADD CONSTRAINT `time_entry_ibfk_7` FOREIGN KEY (`CreatorID`) REFERENCES `users` (`Username`);

-- 
-- Constraints for table `user_roles`
-- 
ALTER TABLE `user_roles`
  ADD CONSTRAINT `user_roles_ibfk_2` FOREIGN KEY (`RoleType`) REFERENCES `role_types` (`RoleType`),
  ADD CONSTRAINT `user_roles_ibfk_1` FOREIGN KEY (`UserID`) REFERENCES `users` (`Username`);
