diff --git a/backend/lib/controller/channelcontroller.php b/backend/lib/controller/channelcontroller.php index 89114f0..a1b4cce 100644 --- a/backend/lib/controller/channelcontroller.php +++ b/backend/lib/controller/channelcontroller.php @@ -32,9 +32,9 @@ class ChannelController extends Controller { public function add() { $channel = new Channel(); - // TODO add ucid generation or exception if no one has been passed via get + // TODO add uuid generation or exception if no one has been passed via get - if (substr($channel->ucid, 0, 19) == OneWireSensor::$ucidPrefix) { + if (substr($channel->uuid, 0, 19) == OneWireSensor::$uuidPrefix) { $channel->type = 'OneWireSensor'; $channel->description = OneWireSensor::getFamilyDescription($channel); } @@ -47,7 +47,7 @@ class ChannelController extends Controller { } public function delete() { // TODO untested - $channel = Channel::getByUcid($this->view->request->get['ucid']); + $channel = Channel::getByUuid($this->view->request->get['ucid']); $channel->delete(); } } diff --git a/backend/lib/controller/datacontroller.php b/backend/lib/controller/datacontroller.php index 0d51e18..cab7c08 100644 --- a/backend/lib/controller/datacontroller.php +++ b/backend/lib/controller/datacontroller.php @@ -22,7 +22,7 @@ class DataController extends Controller { public function add() { $ucid = $this->view->request->get['ucid']; - $channel = Channel::getByUcid($ucid); + $channel = Channel::getByUuid($ucid); $channel->addData($this->view->request->get); // array(timestamp, value, count) } diff --git a/backend/lib/controller/groupcontroller.php b/backend/lib/controller/groupcontroller.php index 37ea9fd..7615412 100644 --- a/backend/lib/controller/groupcontroller.php +++ b/backend/lib/controller/groupcontroller.php @@ -25,20 +25,20 @@ class GroupController extends Controller { $group->description = $this->view->request->get['description']; $group->save(); - // TODO generate ugid + // TODO generate uuid $this->view->addGroup($group); } public function delete() { - $group = Group::getByFilter(array('ugid' => $this->view->request->get['ugid'])); + $group = Group::getByUuid($this->view->request->get['ugid']); $group->delete(); } public function get() { - $user = User::getByFilter(array('uuid' => $this->view->request->get['uuid'])); - $groups = Group::getByFilter(array('user' => $user)); + $user = User::getByUuid($this->view->request->get['uuid']); + $groups = $user->getGroups(false); // TODO recursive or not? foreach ($groups as $group) { $this->view->addGroup($group); diff --git a/backend/lib/controller/usercontroller.php b/backend/lib/controller/usercontroller.php index b87f215..68b187b 100644 --- a/backend/lib/controller/usercontroller.php +++ b/backend/lib/controller/usercontroller.php @@ -31,7 +31,7 @@ class UserController extends Controller { } public function delete() { - $user = User::getByFilter(array('uuid' => $this->view->request->get['uuid'])); + $user = User::getByUuid($this->view->request->get['uuid']); $user->delete(); } @@ -39,15 +39,15 @@ class UserController extends Controller { // TODO implement UserController::edit(); } - public function login() { - $user = User::getByFilter(array('uuid' => $this->view->request->get['uuid'])); + public function login() { // TODO add session handling + $user = User::getByUuid($this->view->request->get['uuid']); if ($user->checkPasswort($this->view->request->get['password'])) { - $_SESSION['user_id'] = $user->id; // TODO add session handling + $_SESSION['user_id'] = $user->id; } } - public function logout() { + public function logout() { // TODO add session handling if ($_SESSION['user_id']) { unset($_SESSION['user_id']); } diff --git a/backend/lib/model/channel.php b/backend/lib/model/channel.php index 06cca9f..f9adea8 100644 --- a/backend/lib/model/channel.php +++ b/backend/lib/model/channel.php @@ -136,19 +136,6 @@ abstract class Channel extends DatabaseObject implements ChannelInterface { return array_reverse($packages); // start with oldest ts and ends with newest ts (reverse array order due to descending order in sql statement) } - /* - * simple self::getByFilter() wrapper - */ - static public function getByUcid($ucid) { - $channel = current(self::getByFilter(array('ucid' => $ucid))); - - if ($channel === false) { - throw new InvalidArgumentException('No such channel!'); - } - - return $channel; - } - /* * simple self::getByFilter() wrapper */ diff --git a/backend/lib/model/channel/sensor/onewiresensor.php b/backend/lib/model/channel/sensor/onewiresensor.php index 4972186..ad6b587 100644 --- a/backend/lib/model/channel/sensor/onewiresensor.php +++ b/backend/lib/model/channel/sensor/onewiresensor.php @@ -27,16 +27,16 @@ class OneWireSensor extends Sensor { const unit = 'todo'; /* - * all 1-wire sensor should use a ucid with this prefix followed by their unique rom id + * all 1-wire sensor should use a uuid with this prefix followed by their unique rom id */ - static public $ucidPrefix = '07506920-6e7a-11df-'; + static public $uuidPrefix = '07506920-6e7a-11df-'; /* * the first byte of the rom id contains the family id describing the type of the sensors - * the rom id should be included in the ucid of the sensor. so we can determine the family out of the ucid. + * the rom id should be included in the uuid of the sensor. so we can determine the family out of the uuid. */ static function getFamilyDescription($channel) { - $family = base_convert(substr($channel->ucid, 19, 2), 16, 10); + $family = base_convert(substr($channel->uuid, 19, 2), 16, 10); switch($family) { case 0x01: diff --git a/backend/lib/model/databaseobject.php b/backend/lib/model/databaseobject.php index a9233d9..0ec16c0 100644 --- a/backend/lib/model/databaseobject.php +++ b/backend/lib/model/databaseobject.php @@ -114,6 +114,19 @@ abstract class DatabaseObject { $this->dbh->execute('DELETE FROM ' . static::table . ' WHERE id = ' . (int) $this->id); // delete from database unset($this->data['id']); } + + /* + * simple self::getByFilter() wrapper + */ + public static function getByUuid($uuid) { + $obj = current(self::getByFilter(array('uuid' => $uuid))); + + if ($obj === false) { + throw new InvalidArgumentException('No such object!'); + } + + return $obj; + } /* * data filtering diff --git a/backend/lib/model/group.php b/backend/lib/model/group.php index 56b2fed..1c5dc95 100644 --- a/backend/lib/model/group.php +++ b/backend/lib/model/group.php @@ -37,16 +37,6 @@ class Group extends DatabaseObject { return $groups; } - public static function getByUgid($ugid) { - $group = current(self::getByFilter(array('ugid' => $ugid))); - - if ($group === false) { - throw new InvalidArgumentException('No such group!'); - } - - return $group; - } - public function getUsers($recursive = false) { $groups[$this->id] = $this; if ($recursive === true) { diff --git a/backend/lib/model/user.php b/backend/lib/model/user.php index 9f3de77..e910799 100644 --- a/backend/lib/model/user.php +++ b/backend/lib/model/user.php @@ -25,19 +25,6 @@ class User extends DatabaseObject { const table = 'users'; - /* - * simple self::getByFilter() wrapper - */ - public static function getByUuid($uuid) { - $user = current(self::getByFilter(array('uuid' => $uuid))); - - if ($user === false) { - throw new InvalidArgumentException('No such user!'); - } - - return $user; - } - public static function getByEMail($email) { $user = current(self::getByFilter(array('email' => $email))); diff --git a/backend/lib/view/jsonview.php b/backend/lib/view/jsonview.php index 4d3d78a..2b9427a 100644 --- a/backend/lib/view/jsonview.php +++ b/backend/lib/view/jsonview.php @@ -52,7 +52,7 @@ class JsonView extends View { public function addChannel(Channel $obj, $data = NULL) { $channel['id'] = (int) $obj->id; - $channel['ucid'] = $obj->ucid; + $channel['uuid'] = $obj->uuid; $channel['type'] = $obj->type; $channel['unit'] = $obj->unit; $channel['description'] = $obj->description; @@ -78,7 +78,7 @@ class JsonView extends View { public function addGroup(Group $obj) { $group['id'] = (int) $obj->id; - $group['ugid'] = $obj->ugid; + $group['uuid'] = $obj->uuid; $group['description'] = $obj->description; // TODO include sub groups? diff --git a/backend/lib/view/xmlview.php b/backend/lib/view/xmlview.php index fa4ef85..7aefac6 100644 --- a/backend/lib/view/xmlview.php +++ b/backend/lib/view/xmlview.php @@ -51,7 +51,7 @@ class XmlView extends View { $xmlChannel = $this->xmlDoc->createElement('channel'); $xmlChannel->setAttribute('id', (int) $obj->id); - $xmlChannel->appendChild($this->xmlDoc->createElement('ucid', $obj->ucid)); + $xmlChannel->appendChild($this->xmlDoc->createElement('uuid', $obj->uuid)); $xmlChannel->appendChild($this->xmlDoc->createElement('type', $obj->type)); $xmlChannel->appendChild($this->xmlDoc->createElement('unit', $obj->unit)); $xmlChannel->appendChild($this->xmlDoc->createElement('description', $obj->description)); @@ -88,7 +88,7 @@ class XmlView extends View { public function addGroup(Group $obj) { $xmlGroup = $this->xmlDoc->createElement('group'); $xmlGroup->setAttribute('id', (int) $obj->id); - $xmlGroup->appendChild($this->xmlDoc->createElement('ugid', $obj->uuid)); + $xmlGroup->appendChild($this->xmlDoc->createElement('uuid', $obj->uuid)); $xmlGroup->appendChild($this->xmlDoc->createElement('description', $obj->description)); // TODO include sub groups? diff --git a/share/sql/demo/data.structure.dummy.sql b/share/sql/demo/data.structure.dummy.sql index d5d6b4d..716f6b3 100644 --- a/share/sql/demo/data.structure.dummy.sql +++ b/share/sql/demo/data.structure.dummy.sql @@ -3,7 +3,7 @@ -- http://www.phpmyadmin.net -- -- Host: localhost --- Erstellungszeit: 08. Juni 2010 um 01:55 +-- Erstellungszeit: 13. Juni 2010 um 14:22 -- Server Version: 5.1.41 -- PHP-Version: 5.3.2-1ubuntu4.2 @@ -27,20 +27,20 @@ SET SQL_MODE="NO_AUTO_VALUE_ON_ZERO"; CREATE TABLE IF NOT EXISTS `channels` ( `id` int(11) NOT NULL AUTO_INCREMENT, - `ucid` varchar(36) CHARACTER SET latin1 NOT NULL COMMENT 'globally Unique Channel ID', + `uuid` varchar(36) CHARACTER SET latin1 NOT NULL COMMENT 'Universally Unique Identifier', `type` varchar(255) COLLATE utf8_unicode_ci DEFAULT 'Channel' COMMENT 'maps meter to classname (caseinsensitive)', `resolution` int(11) DEFAULT NULL, `cost` int(11) DEFAULT '0', `description` varchar(255) CHARACTER SET latin1 DEFAULT NULL, PRIMARY KEY (`id`), - UNIQUE KEY `ucid` (`ucid`) + UNIQUE KEY `ucid` (`uuid`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci COMMENT='channels with detailed data' AUTO_INCREMENT=22 ; -- -- Daten für Tabelle `channels` -- -INSERT INTO `channels` (`id`, `ucid`, `type`, `resolution`, `cost`, `description`) VALUES +INSERT INTO `channels` (`id`, `uuid`, `type`, `resolution`, `cost`, `description`) VALUES (1, '12345678-1234-1234-1234-123456789012', 'PowerMeter', 2000, 0, 'test2'), (2, '12345678-1234-1234-1234-123456789013', 'PowerMeter', 2000, 0, 'Demo Meter'), (17, '07506920-6e7a-11df-1012-6D300080077', 'OneWireSensor', NULL, 0, 'DS1820/DS18S20/DS1920 Temperature Sensor'), @@ -59,7 +59,7 @@ CREATE TABLE IF NOT EXISTS `data` ( `channel_id` int(11) NOT NULL, `timestamp` bigint(20) NOT NULL COMMENT 'in seconds since 1970', `value` float NOT NULL COMMENT 'absolute sensor value or pulse since last timestamp (dependening on "meters.type")', - KEY `meter_id` (`channel_id`) + KEY `channel_id` (`channel_id`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci COMMENT='data for all meters, regardless of which type they are'; -- @@ -6115,321 +6115,321 @@ INSERT INTO `data` (`channel_id`, `timestamp`, `value`) VALUES (19, 1275812705000, 24.6875), (20, 1275812706000, 34.375), (21, 1275812707000, 23.8125), -(17, 1275813002, 25.3125), -(18, 1275813004, 25.3125), -(19, 1275813005, 24.75), -(20, 1275813006, 35.4375), -(21, 1275813007, 24.125), -(17, 1275813303, 25.3125), -(18, 1275813305, 25.375), -(19, 1275813306, 24.75), -(20, 1275813307, 36.875), -(21, 1275813309, 24.1875), -(17, 1275813602, 25.4375), -(18, 1275813603, 25.375), -(19, 1275813605, 24.8125), -(20, 1275813606, 37.4375), -(21, 1275813607, 24.25), -(17, 1275813902, 25.3125), -(18, 1275813904, 25.3125), -(19, 1275813905, 24.875), -(20, 1275813906, 37.9375), -(21, 1275813908, 24.6875), -(17, 1275814202, 25.4375), -(18, 1275814204, 25.3125), -(19, 1275814205, 24.9375), -(20, 1275814206, 38.4375), -(21, 1275814208, 25.1875), -(17, 1275814502, 25.4375), -(18, 1275814504, 25.375), -(19, 1275814505, 24.875), -(20, 1275814506, 38.3125), -(21, 1275814508, 25.375), -(17, 1275814802, 25.4375), -(18, 1275814804, 25.4375), -(19, 1275814805, 24.8125), -(20, 1275814806, 38.3125), -(21, 1275814808, 25.4375), -(17, 1275815102, 25.4375), -(18, 1275815104, 25.375), -(19, 1275815105, 24.75), -(20, 1275815106, 38.4375), -(21, 1275815108, 25.5), -(17, 1275815402, 25.5625), -(18, 1275815403, 25.4375), -(19, 1275815405, 24.9375), -(20, 1275815406, 38.625), -(21, 1275815407, 25.75), -(17, 1275815703, 25.625), -(18, 1275815704, 25.4375), -(19, 1275815705, 25.0625), -(20, 1275815706, 39.0625), -(21, 1275815708, 26), -(17, 1275816003, 25.625), -(18, 1275816004, 25.4375), -(19, 1275816005, 25), -(20, 1275816007, 39.3125), -(21, 1275816008, 26.125), -(17, 1275816303, 25.5625), -(18, 1275816305, 25.4375), -(19, 1275816306, 24.9375), -(20, 1275816307, 39.3125), -(21, 1275816309, 26.625), -(17, 1275816603, 25.625), -(18, 1275816604, 25.5), -(19, 1275816606, 24.9375), -(20, 1275816607, 39.5), -(21, 1275816608, 26.5625), -(17, 1275816902, 25.75), -(18, 1275816904, 25.4375), -(19, 1275816905, 25.0625), -(20, 1275816906, 39.625), -(21, 1275816908, 26.9375), -(17, 1275817203, 25.75), -(18, 1275817204, 25.4375), -(19, 1275817205, 25.0625), -(20, 1275817207, 39.5625), -(21, 1275817208, 27.125), -(17, 1275817503, 25.5625), -(18, 1275817504, 25.4375), -(19, 1275817505, 24.9375), -(20, 1275817507, 39.625), -(21, 1275817508, 27.1875), -(17, 1275817803, 25.625), -(18, 1275817805, 25.4375), -(19, 1275817806, 24.9375), -(20, 1275817807, 39.625), -(21, 1275817809, 27.625), -(17, 1275818103, 25.625), -(18, 1275818105, 25.5), -(19, 1275818106, 24.9375), -(20, 1275818107, 39.625), -(21, 1275818109, 27.75), -(17, 1275818404, 25.875), -(18, 1275818405, 25.5), -(19, 1275818406, 25.1875), -(20, 1275818408, 39.625), -(21, 1275818409, 28.3125), -(17, 1275818703, 25.75), -(18, 1275818704, 25.5), -(19, 1275818706, 25), -(20, 1275818707, 39.75), -(21, 1275818708, 27.9375), -(17, 1275819003, 25.8125), -(18, 1275819004, 25.5), -(19, 1275819005, 25.0625), -(20, 1275819007, 39.8125), -(21, 1275819008, 28.125), -(17, 1275819302, 25.75), -(18, 1275819304, 25.5625), -(19, 1275819305, 25), -(20, 1275819306, 39.625), -(21, 1275819308, 28.5625), -(17, 1275819603, 25.75), -(18, 1275819604, 25.5625), -(19, 1275819605, 25), -(20, 1275819607, 39.6875), -(21, 1275819608, 29), -(17, 1275819902, 25.6875), -(18, 1275819904, 25.75), -(19, 1275819905, 25), -(20, 1275819906, 40.25), -(21, 1275819908, 29.25), -(17, 1275820203, 25.6875), -(18, 1275820204, 25.5625), -(19, 1275820205, 25), -(20, 1275820206, 40.5625), -(21, 1275820208, 28.8125), -(17, 1275820503, 25.6875), -(18, 1275820505, 25.5625), -(19, 1275820506, 24.9375), -(20, 1275820507, 40.4375), -(21, 1275820509, 29.1875), -(17, 1275820802, 25.6875), -(18, 1275820804, 25.6875), -(19, 1275820805, 25), -(20, 1275820806, 40.125), -(21, 1275820808, 29.5), -(17, 1275821103, 25.875), -(18, 1275821104, 25.625), -(19, 1275821105, 25.1875), -(20, 1275821107, 39.6875), -(21, 1275821108, 30.6875), -(17, 1275821402, 26), -(18, 1275821403, 25.6875), -(19, 1275821404, 25.25), -(20, 1275821406, 39.5), -(21, 1275821407, 30.625), -(17, 1275821702, 26.1875), -(18, 1275821704, 25.9375), -(19, 1275821705, 25.5), -(20, 1275821706, 39.4375), -(21, 1275821708, 31.1875), -(17, 1275822003, 26.0625), -(18, 1275822004, 25.9375), -(19, 1275822005, 25.375), -(20, 1275822007, 39.625), -(21, 1275822008, 31.0625), -(17, 1275822303, 26), -(18, 1275822304, 25.9375), -(19, 1275822306, 25.3125), -(20, 1275822307, 39.6875), -(21, 1275822308, 31.4375), -(17, 1275822603, 26.125), -(18, 1275822604, 25.9375), -(19, 1275822606, 25.375), -(20, 1275822607, 39.6875), -(21, 1275822608, 31.625), -(17, 1275822902, 26), -(18, 1275822904, 25.875), -(19, 1275822905, 25.3125), -(20, 1275822906, 39.9375), -(21, 1275822908, 31.375), -(17, 1275823202, 26.0625), -(18, 1275823203, 26.1875), -(19, 1275823205, 25.3125), -(20, 1275823206, 40.1875), -(21, 1275823207, 31.5), -(17, 1275823503, 26), -(18, 1275823504, 26.1875), -(19, 1275823505, 25.3125), -(20, 1275823507, 40.125), -(21, 1275823508, 31.375), -(17, 1275823803, 26), -(18, 1275823804, 26.25), -(19, 1275823805, 25.3125), -(20, 1275823807, 40.125), -(21, 1275823808, 32), -(17, 1275824103, 26.1875), -(18, 1275824104, 26.25), -(19, 1275824105, 25.5), -(20, 1275824107, 40.4375), -(21, 1275824108, 33.5), -(17, 1275824403, 26.4375), -(18, 1275824404, 26.375), -(19, 1275824405, 25.75), -(20, 1275824407, 40.5), -(21, 1275824408, 35.0625), -(17, 1275824703, 26.375), -(18, 1275824705, 26.4375), -(19, 1275824706, 25.625), -(20, 1275824707, 40.375), -(21, 1275824709, 35.125), -(17, 1275825002, 26.5625), -(18, 1275825004, 26.5), -(19, 1275825005, 25.875), -(20, 1275825006, 40.8125), -(21, 1275825008, 36.1875), -(17, 1275825303, 26.5625), -(18, 1275825304, 26.625), -(19, 1275825305, 25.9375), -(20, 1275825307, 40.625), -(21, 1275825308, 36.5), -(17, 1275825603, 26.6875), -(18, 1275825605, 27), -(19, 1275825606, 26), -(20, 1275825607, 40), -(21, 1275825608, 36.5), -(17, 1275825902, 26.8125), -(18, 1275825904, 27.0625), -(19, 1275825905, 26.1875), -(20, 1275825906, 39.75), -(21, 1275825908, 37.75), -(17, 1275826202, 26.9375), -(18, 1275826203, 27.125), -(19, 1275826205, 26.25), -(20, 1275826206, 39.6875), -(21, 1275826207, 36.625), -(17, 1275826503, 26.875), -(18, 1275826504, 27.0625), -(19, 1275826505, 26.125), -(20, 1275826507, 39.625), -(21, 1275826508, 34.0625), -(17, 1275826802, 26.625), -(18, 1275826804, 26.75), -(19, 1275826805, 25.875), -(20, 1275826806, 39.8125), -(21, 1275826808, 32.5), -(17, 1275827103, 26.6875), -(18, 1275827104, 26.9375), -(19, 1275827105, 25.9375), -(20, 1275827107, 40.25), -(21, 1275827108, 32.4375), -(17, 1275827403, 26.5625), -(18, 1275827405, 26.75), -(19, 1275827406, 25.8125), -(20, 1275827407, 40.3125), -(21, 1275827408, 31.75), -(17, 1275827702, 26.625), -(18, 1275827704, 26.625), -(19, 1275827705, 25.8125), -(20, 1275827706, 40.4375), -(21, 1275827708, 31), -(17, 1275828002, 26.6875), -(18, 1275828003, 26.6875), -(19, 1275828005, 25.875), -(20, 1275828006, 40.3125), -(21, 1275828007, 31.9375), -(17, 1275828302, 26.875), -(18, 1275828304, 26.8125), -(19, 1275828305, 26.0625), -(20, 1275828306, 40.375), -(21, 1275828308, 32.6875), -(17, 1275828603, 26.6875), -(18, 1275828604, 26.625), -(19, 1275828605, 25.875), -(20, 1275828607, 40.3125), -(21, 1275828608, 31.375), -(17, 1275828902, 26.625), -(18, 1275828903, 26.625), -(19, 1275828905, 25.75), -(20, 1275828906, 40.125), -(21, 1275828907, 30.375), -(17, 1275829203, 26.5625), -(18, 1275829204, 26.375), -(19, 1275829205, 25.6875), -(20, 1275829207, 40.125), -(21, 1275829208, 30.5625), -(17, 1275829503, 26.5625), -(18, 1275829504, 26.3125), -(19, 1275829505, 25.75), -(20, 1275829507, 40.4375), -(21, 1275829508, 30.3125), -(17, 1275829803, 26.6875), -(18, 1275829804, 26.125), -(19, 1275829805, 25.9375), -(20, 1275829807, 40.375), -(21, 1275829808, 29.8125), -(17, 1275830103, 26.4375), -(18, 1275830105, 26.125), -(19, 1275830106, 25.5625), -(20, 1275830107, 40.1875), -(21, 1275830108, 29.375), -(17, 1275830403, 26.125), -(18, 1275830404, 26), -(19, 1275830405, 25.375), -(20, 1275830407, 40), -(21, 1275830408, 28.8125), -(17, 1275830704, 26.125), -(18, 1275830705, 26), -(19, 1275830707, 25.3125), -(20, 1275830708, 39.9375), -(21, 1275830709, 26.3125), -(17, 1275831004, 26), -(18, 1275831005, 25.9375), -(19, 1275831007, 25.25), -(20, 1275831008, 40), -(21, 1275831009, 23), -(17, 1275831302, 26), -(18, 1275831303, 25.9375), -(19, 1275831305, 25.25), -(20, 1275831306, 40), -(21, 1275831307, 21.5), -(17, 1275831603, 26.125), -(18, 1275831604, 25.875), -(19, 1275831605, 25.375), -(20, 1275831606, 39.9375), -(21, 1275831608, 20.5); +(17, 1275813002000, 25.3125), +(18, 1275813004000, 25.3125), +(19, 1275813005000, 24.75), +(20, 1275813006000, 35.4375), +(21, 1275813007000, 24.125), +(17, 1275813303000, 25.3125), +(18, 1275813305000, 25.375), +(19, 1275813306000, 24.75), +(20, 1275813307000, 36.875), +(21, 1275813309000, 24.1875), +(17, 1275813602000, 25.4375), +(18, 1275813603000, 25.375), +(19, 1275813605000, 24.8125), +(20, 1275813606000, 37.4375), +(21, 1275813607000, 24.25), +(17, 1275813902000, 25.3125), +(18, 1275813904000, 25.3125), +(19, 1275813905000, 24.875), +(20, 1275813906000, 37.9375), +(21, 1275813908000, 24.6875), +(17, 1275814202000, 25.4375), +(18, 1275814204000, 25.3125), +(19, 1275814205000, 24.9375), +(20, 1275814206000, 38.4375), +(21, 1275814208000, 25.1875), +(17, 1275814502000, 25.4375), +(18, 1275814504000, 25.375), +(19, 1275814505000, 24.875), +(20, 1275814506000, 38.3125), +(21, 1275814508000, 25.375), +(17, 1275814802000, 25.4375), +(18, 1275814804000, 25.4375), +(19, 1275814805000, 24.8125), +(20, 1275814806000, 38.3125), +(21, 1275814808000, 25.4375), +(17, 1275815102000, 25.4375), +(18, 1275815104000, 25.375), +(19, 1275815105000, 24.75), +(20, 1275815106000, 38.4375), +(21, 1275815108000, 25.5), +(17, 1275815402000, 25.5625), +(18, 1275815403000, 25.4375), +(19, 1275815405000, 24.9375), +(20, 1275815406000, 38.625), +(21, 1275815407000, 25.75), +(17, 1275815703000, 25.625), +(18, 1275815704000, 25.4375), +(19, 1275815705000, 25.0625), +(20, 1275815706000, 39.0625), +(21, 1275815708000, 26), +(17, 1275816003000, 25.625), +(18, 1275816004000, 25.4375), +(19, 1275816005000, 25), +(20, 1275816007000, 39.3125), +(21, 1275816008000, 26.125), +(17, 1275816303000, 25.5625), +(18, 1275816305000, 25.4375), +(19, 1275816306000, 24.9375), +(20, 1275816307000, 39.3125), +(21, 1275816309000, 26.625), +(17, 1275816603000, 25.625), +(18, 1275816604000, 25.5), +(19, 1275816606000, 24.9375), +(20, 1275816607000, 39.5), +(21, 1275816608000, 26.5625), +(17, 1275816902000, 25.75), +(18, 1275816904000, 25.4375), +(19, 1275816905000, 25.0625), +(20, 1275816906000, 39.625), +(21, 1275816908000, 26.9375), +(17, 1275817203000, 25.75), +(18, 1275817204000, 25.4375), +(19, 1275817205000, 25.0625), +(20, 1275817207000, 39.5625), +(21, 1275817208000, 27.125), +(17, 1275817503000, 25.5625), +(18, 1275817504000, 25.4375), +(19, 1275817505000, 24.9375), +(20, 1275817507000, 39.625), +(21, 1275817508000, 27.1875), +(17, 1275817803000, 25.625), +(18, 1275817805000, 25.4375), +(19, 1275817806000, 24.9375), +(20, 1275817807000, 39.625), +(21, 1275817809000, 27.625), +(17, 1275818103000, 25.625), +(18, 1275818105000, 25.5), +(19, 1275818106000, 24.9375), +(20, 1275818107000, 39.625), +(21, 1275818109000, 27.75), +(17, 1275818404000, 25.875), +(18, 1275818405000, 25.5), +(19, 1275818406000, 25.1875), +(20, 1275818408000, 39.625), +(21, 1275818409000, 28.3125), +(17, 1275818703000, 25.75), +(18, 1275818704000, 25.5), +(19, 1275818706000, 25), +(20, 1275818707000, 39.75), +(21, 1275818708000, 27.9375), +(17, 1275819003000, 25.8125), +(18, 1275819004000, 25.5), +(19, 1275819005000, 25.0625), +(20, 1275819007000, 39.8125), +(21, 1275819008000, 28.125), +(17, 1275819302000, 25.75), +(18, 1275819304000, 25.5625), +(19, 1275819305000, 25), +(20, 1275819306000, 39.625), +(21, 1275819308000, 28.5625), +(17, 1275819603000, 25.75), +(18, 1275819604000, 25.5625), +(19, 1275819605000, 25), +(20, 1275819607000, 39.6875), +(21, 1275819608000, 29), +(17, 1275819902000, 25.6875), +(18, 1275819904000, 25.75), +(19, 1275819905000, 25), +(20, 1275819906000, 40.25), +(21, 1275819908000, 29.25), +(17, 1275820203000, 25.6875), +(18, 1275820204000, 25.5625), +(19, 1275820205000, 25), +(20, 1275820206000, 40.5625), +(21, 1275820208000, 28.8125), +(17, 1275820503000, 25.6875), +(18, 1275820505000, 25.5625), +(19, 1275820506000, 24.9375), +(20, 1275820507000, 40.4375), +(21, 1275820509000, 29.1875), +(17, 1275820802000, 25.6875), +(18, 1275820804000, 25.6875), +(19, 1275820805000, 25), +(20, 1275820806000, 40.125), +(21, 1275820808000, 29.5), +(17, 1275821103000, 25.875), +(18, 1275821104000, 25.625), +(19, 1275821105000, 25.1875), +(20, 1275821107000, 39.6875), +(21, 1275821108000, 30.6875), +(17, 1275821402000, 26), +(18, 1275821403000, 25.6875), +(19, 1275821404000, 25.25), +(20, 1275821406000, 39.5), +(21, 1275821407000, 30.625), +(17, 1275821702000, 26.1875), +(18, 1275821704000, 25.9375), +(19, 1275821705000, 25.5), +(20, 1275821706000, 39.4375), +(21, 1275821708000, 31.1875), +(17, 1275822003000, 26.0625), +(18, 1275822004000, 25.9375), +(19, 1275822005000, 25.375), +(20, 1275822007000, 39.625), +(21, 1275822008000, 31.0625), +(17, 1275822303000, 26), +(18, 1275822304000, 25.9375), +(19, 1275822306000, 25.3125), +(20, 1275822307000, 39.6875), +(21, 1275822308000, 31.4375), +(17, 1275822603000, 26.125), +(18, 1275822604000, 25.9375), +(19, 1275822606000, 25.375), +(20, 1275822607000, 39.6875), +(21, 1275822608000, 31.625), +(17, 1275822902000, 26), +(18, 1275822904000, 25.875), +(19, 1275822905000, 25.3125), +(20, 1275822906000, 39.9375), +(21, 1275822908000, 31.375), +(17, 1275823202000, 26.0625), +(18, 1275823203000, 26.1875), +(19, 1275823205000, 25.3125), +(20, 1275823206000, 40.1875), +(21, 1275823207000, 31.5), +(17, 1275823503000, 26), +(18, 1275823504000, 26.1875), +(19, 1275823505000, 25.3125), +(20, 1275823507000, 40.125), +(21, 1275823508000, 31.375), +(17, 1275823803000, 26), +(18, 1275823804000, 26.25), +(19, 1275823805000, 25.3125), +(20, 1275823807000, 40.125), +(21, 1275823808000, 32), +(17, 1275824103000, 26.1875), +(18, 1275824104000, 26.25), +(19, 1275824105000, 25.5), +(20, 1275824107000, 40.4375), +(21, 1275824108000, 33.5), +(17, 1275824403000, 26.4375), +(18, 1275824404000, 26.375), +(19, 1275824405000, 25.75), +(20, 1275824407000, 40.5), +(21, 1275824408000, 35.0625), +(17, 1275824703000, 26.375), +(18, 1275824705000, 26.4375), +(19, 1275824706000, 25.625), +(20, 1275824707000, 40.375), +(21, 1275824709000, 35.125), +(17, 1275825002000, 26.5625), +(18, 1275825004000, 26.5), +(19, 1275825005000, 25.875), +(20, 1275825006000, 40.8125), +(21, 1275825008000, 36.1875), +(17, 1275825303000, 26.5625), +(18, 1275825304000, 26.625), +(19, 1275825305000, 25.9375), +(20, 1275825307000, 40.625), +(21, 1275825308000, 36.5), +(17, 1275825603000, 26.6875), +(18, 1275825605000, 27), +(19, 1275825606000, 26), +(20, 1275825607000, 40), +(21, 1275825608000, 36.5), +(17, 1275825902000, 26.8125), +(18, 1275825904000, 27.0625), +(19, 1275825905000, 26.1875), +(20, 1275825906000, 39.75), +(21, 1275825908000, 37.75), +(17, 1275826202000, 26.9375), +(18, 1275826203000, 27.125), +(19, 1275826205000, 26.25), +(20, 1275826206000, 39.6875), +(21, 1275826207000, 36.625), +(17, 1275826503000, 26.875), +(18, 1275826504000, 27.0625), +(19, 1275826505000, 26.125), +(20, 1275826507000, 39.625), +(21, 1275826508000, 34.0625), +(17, 1275826802000, 26.625), +(18, 1275826804000, 26.75), +(19, 1275826805000, 25.875), +(20, 1275826806000, 39.8125), +(21, 1275826808000, 32.5), +(17, 1275827103000, 26.6875), +(18, 1275827104000, 26.9375), +(19, 1275827105000, 25.9375), +(20, 1275827107000, 40.25), +(21, 1275827108000, 32.4375), +(17, 1275827403000, 26.5625), +(18, 1275827405000, 26.75), +(19, 1275827406000, 25.8125), +(20, 1275827407000, 40.3125), +(21, 1275827408000, 31.75), +(17, 1275827702000, 26.625), +(18, 1275827704000, 26.625), +(19, 1275827705000, 25.8125), +(20, 1275827706000, 40.4375), +(21, 1275827708000, 31), +(17, 1275828002000, 26.6875), +(18, 1275828003000, 26.6875), +(19, 1275828005000, 25.875), +(20, 1275828006000, 40.3125), +(21, 1275828007000, 31.9375), +(17, 1275828302000, 26.875), +(18, 1275828304000, 26.8125), +(19, 1275828305000, 26.0625), +(20, 1275828306000, 40.375), +(21, 1275828308000, 32.6875), +(17, 1275828603000, 26.6875), +(18, 1275828604000, 26.625), +(19, 1275828605000, 25.875), +(20, 1275828607000, 40.3125), +(21, 1275828608000, 31.375), +(17, 1275828902000, 26.625), +(18, 1275828903000, 26.625), +(19, 1275828905000, 25.75), +(20, 1275828906000, 40.125), +(21, 1275828907000, 30.375), +(17, 1275829203000, 26.5625), +(18, 1275829204000, 26.375), +(19, 1275829205000, 25.6875), +(20, 1275829207000, 40.125), +(21, 1275829208000, 30.5625), +(17, 1275829503000, 26.5625), +(18, 1275829504000, 26.3125), +(19, 1275829505000, 25.75), +(20, 1275829507000, 40.4375), +(21, 1275829508000, 30.3125), +(17, 1275829803000, 26.6875), +(18, 1275829804000, 26.125), +(19, 1275829805000, 25.9375), +(20, 1275829807000, 40.375), +(21, 1275829808000, 29.8125), +(17, 1275830103000, 26.4375), +(18, 1275830105000, 26.125), +(19, 1275830106000, 25.5625), +(20, 1275830107000, 40.1875), +(21, 1275830108000, 29.375), +(17, 1275830403000, 26.125), +(18, 1275830404000, 26), +(19, 1275830405000, 25.375), +(20, 1275830407000, 40), +(21, 1275830408000, 28.8125), +(17, 1275830704000, 26.125), +(18, 1275830705000, 26), +(19, 1275830707000, 25.3125), +(20, 1275830708000, 39.9375), +(21, 1275830709000, 26.3125), +(17, 1275831004000, 26), +(18, 1275831005000, 25.9375), +(19, 1275831007000, 25.25), +(20, 1275831008000, 40), +(21, 1275831009000, 23), +(17, 1275831302000, 26), +(18, 1275831303000, 25.9375), +(19, 1275831305000, 25.25), +(20, 1275831306000, 40), +(21, 1275831307000, 21.5), +(17, 1275831603000, 26.125), +(18, 1275831604000, 25.875), +(19, 1275831605000, 25.375), +(20, 1275831606000, 39.9375), +(21, 1275831608000, 20.5); -- -------------------------------------------------------- @@ -6439,17 +6439,17 @@ INSERT INTO `data` (`channel_id`, `timestamp`, `value`) VALUES CREATE TABLE IF NOT EXISTS `groups` ( `id` int(11) NOT NULL AUTO_INCREMENT, - `ugid` varchar(36) COLLATE utf8_unicode_ci NOT NULL, + `uuid` varchar(36) COLLATE utf8_unicode_ci NOT NULL COMMENT 'Universally Unique Identifier', `description` varchar(255) COLLATE utf8_unicode_ci NOT NULL, PRIMARY KEY (`id`), - UNIQUE KEY `ugid` (`ugid`) + UNIQUE KEY `ugid` (`uuid`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci AUTO_INCREMENT=6 ; -- -- Daten für Tabelle `groups` -- -INSERT INTO `groups` (`id`, `ugid`, `description`) VALUES +INSERT INTO `groups` (`id`, `uuid`, `description`) VALUES (1, '6185b05b-72b8-4d14-bbcf-cacadb2e35ec', 'Zähler von Steffen'), (2, '530171f0-34aa-4787-bc86-0c3ee1a55398', 'Temperatursensoren'), (3, 'efe83f57-3d41-4cde-9c6b-77783112891b', '1-Wire Sensoren mit digitemp'), @@ -6513,6 +6513,7 @@ INSERT INTO `group_group` (`parent_id`, `child_id`) VALUES CREATE TABLE IF NOT EXISTS `group_user` ( `group_id` int(11) NOT NULL, `user_id` int(11) NOT NULL, + `role` enum('member','owner') NOT NULL, KEY `user_id` (`user_id`), KEY `group_id` (`group_id`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8; @@ -6521,10 +6522,10 @@ CREATE TABLE IF NOT EXISTS `group_user` ( -- Daten für Tabelle `group_user` -- -INSERT INTO `group_user` (`group_id`, `user_id`) VALUES -(1, 1), -(2, 1), -(2, 2); +INSERT INTO `group_user` (`group_id`, `user_id`, `role`) VALUES +(1, 1, 'member'), +(2, 1, 'member'), +(2, 2, 'member'); -- -------------------------------------------------------- @@ -6534,7 +6535,7 @@ INSERT INTO `group_user` (`group_id`, `user_id`) VALUES CREATE TABLE IF NOT EXISTS `users` ( `id` int(11) NOT NULL AUTO_INCREMENT, - `uuid` varchar(36) COLLATE utf8_unicode_ci NOT NULL, + `uuid` varchar(36) COLLATE utf8_unicode_ci NOT NULL COMMENT 'Universally Unique Identifier', `email` varchar(255) CHARACTER SET latin1 NOT NULL COMMENT 'also used for login', `password` varchar(40) CHARACTER SET latin1 NOT NULL COMMENT 'SHA1() hashed', PRIMARY KEY (`id`), @@ -6564,19 +6565,19 @@ ALTER TABLE `data` -- Constraints der Tabelle `group_channel` -- ALTER TABLE `group_channel` - ADD CONSTRAINT `group_channel_ibfk_4` FOREIGN KEY (`group_id`) REFERENCES `groups` (`id`) ON DELETE CASCADE, - ADD CONSTRAINT `group_channel_ibfk_3` FOREIGN KEY (`channel_id`) REFERENCES `channels` (`id`) ON DELETE CASCADE; + ADD CONSTRAINT `group_channel_ibfk_3` FOREIGN KEY (`channel_id`) REFERENCES `channels` (`id`) ON DELETE CASCADE, + ADD CONSTRAINT `group_channel_ibfk_4` FOREIGN KEY (`group_id`) REFERENCES `groups` (`id`) ON DELETE CASCADE; -- -- Constraints der Tabelle `group_group` -- ALTER TABLE `group_group` - ADD CONSTRAINT `group_group_ibfk_4` FOREIGN KEY (`child_id`) REFERENCES `groups` (`id`) ON DELETE CASCADE, - ADD CONSTRAINT `group_group_ibfk_3` FOREIGN KEY (`parent_id`) REFERENCES `groups` (`id`) ON DELETE CASCADE; + ADD CONSTRAINT `group_group_ibfk_3` FOREIGN KEY (`parent_id`) REFERENCES `groups` (`id`) ON DELETE CASCADE, + ADD CONSTRAINT `group_group_ibfk_4` FOREIGN KEY (`child_id`) REFERENCES `groups` (`id`) ON DELETE CASCADE; -- -- Constraints der Tabelle `group_user` -- ALTER TABLE `group_user` - ADD CONSTRAINT `group_user_ibfk_4` FOREIGN KEY (`user_id`) REFERENCES `users` (`id`) ON DELETE CASCADE, - ADD CONSTRAINT `group_user_ibfk_3` FOREIGN KEY (`group_id`) REFERENCES `groups` (`id`) ON DELETE CASCADE; + ADD CONSTRAINT `group_user_ibfk_3` FOREIGN KEY (`group_id`) REFERENCES `groups` (`id`) ON DELETE CASCADE, + ADD CONSTRAINT `group_user_ibfk_4` FOREIGN KEY (`user_id`) REFERENCES `users` (`id`) ON DELETE CASCADE; diff --git a/share/sql/mysql.sql b/share/sql/mysql.sql index 99be838..04c5d51 100644 --- a/share/sql/mysql.sql +++ b/share/sql/mysql.sql @@ -3,7 +3,7 @@ -- http://www.phpmyadmin.net -- -- Host: localhost --- Erstellungszeit: 08. Juni 2010 um 01:54 +-- Erstellungszeit: 13. Juni 2010 um 14:23 -- Server Version: 5.1.41 -- PHP-Version: 5.3.2-1ubuntu4.2 @@ -25,15 +25,16 @@ SET SQL_MODE="NO_AUTO_VALUE_ON_ZERO"; -- Tabellenstruktur für Tabelle `channels` -- -CREATE TABLE IF NOT EXISTS `channels` ( +DROP TABLE IF EXISTS `channels`; +CREATE TABLE `channels` ( `id` int(11) NOT NULL AUTO_INCREMENT, - `ucid` varchar(36) CHARACTER SET latin1 NOT NULL COMMENT 'globally Unique Channel ID', + `uuid` varchar(36) CHARACTER SET latin1 NOT NULL COMMENT 'Universally Unique Identifier', `type` varchar(255) COLLATE utf8_unicode_ci DEFAULT 'Channel' COMMENT 'maps meter to classname (caseinsensitive)', `resolution` int(11) DEFAULT NULL, `cost` int(11) DEFAULT '0', `description` varchar(255) CHARACTER SET latin1 DEFAULT NULL, PRIMARY KEY (`id`), - UNIQUE KEY `ucid` (`ucid`) + UNIQUE KEY `ucid` (`uuid`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci COMMENT='channels with detailed data'; -- -------------------------------------------------------- @@ -42,11 +43,12 @@ CREATE TABLE IF NOT EXISTS `channels` ( -- Tabellenstruktur für Tabelle `data` -- -CREATE TABLE IF NOT EXISTS `data` ( +DROP TABLE IF EXISTS `data`; +CREATE TABLE `data` ( `channel_id` int(11) NOT NULL, `timestamp` bigint(20) NOT NULL COMMENT 'in seconds since 1970', `value` float NOT NULL COMMENT 'absolute sensor value or pulse since last timestamp (dependening on "meters.type")', - KEY `meter_id` (`channel_id`) + KEY `channel_id` (`channel_id`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci COMMENT='data for all meters, regardless of which type they are'; -- -------------------------------------------------------- @@ -55,12 +57,13 @@ CREATE TABLE IF NOT EXISTS `data` ( -- Tabellenstruktur für Tabelle `groups` -- -CREATE TABLE IF NOT EXISTS `groups` ( +DROP TABLE IF EXISTS `groups`; +CREATE TABLE `groups` ( `id` int(11) NOT NULL AUTO_INCREMENT, - `ugid` varchar(36) COLLATE utf8_unicode_ci NOT NULL, + `uuid` varchar(36) COLLATE utf8_unicode_ci NOT NULL COMMENT 'Universally Unique Identifier', `description` varchar(255) COLLATE utf8_unicode_ci NOT NULL, PRIMARY KEY (`id`), - UNIQUE KEY `ugid` (`ugid`) + UNIQUE KEY `ugid` (`uuid`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci; -- -------------------------------------------------------- @@ -69,7 +72,8 @@ CREATE TABLE IF NOT EXISTS `groups` ( -- Tabellenstruktur für Tabelle `group_channel` -- -CREATE TABLE IF NOT EXISTS `group_channel` ( +DROP TABLE IF EXISTS `group_channel`; +CREATE TABLE `group_channel` ( `channel_id` int(11) NOT NULL, `group_id` int(11) NOT NULL, KEY `channel_id` (`channel_id`), @@ -82,7 +86,8 @@ CREATE TABLE IF NOT EXISTS `group_channel` ( -- Tabellenstruktur für Tabelle `group_group` -- -CREATE TABLE IF NOT EXISTS `group_group` ( +DROP TABLE IF EXISTS `group_group`; +CREATE TABLE `group_group` ( `parent_id` int(11) NOT NULL, `child_id` int(11) NOT NULL, KEY `parent_id` (`parent_id`), @@ -95,9 +100,11 @@ CREATE TABLE IF NOT EXISTS `group_group` ( -- Tabellenstruktur für Tabelle `group_user` -- -CREATE TABLE IF NOT EXISTS `group_user` ( +DROP TABLE IF EXISTS `group_user`; +CREATE TABLE `group_user` ( `group_id` int(11) NOT NULL, `user_id` int(11) NOT NULL, + `role` enum('member','owner') NOT NULL, KEY `user_id` (`user_id`), KEY `group_id` (`group_id`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8; @@ -108,9 +115,10 @@ CREATE TABLE IF NOT EXISTS `group_user` ( -- Tabellenstruktur für Tabelle `users` -- -CREATE TABLE IF NOT EXISTS `users` ( +DROP TABLE IF EXISTS `users`; +CREATE TABLE `users` ( `id` int(11) NOT NULL AUTO_INCREMENT, - `uuid` varchar(36) COLLATE utf8_unicode_ci NOT NULL, + `uuid` varchar(36) COLLATE utf8_unicode_ci NOT NULL COMMENT 'Universally Unique Identifier', `email` varchar(255) CHARACTER SET latin1 NOT NULL COMMENT 'also used for login', `password` varchar(40) CHARACTER SET latin1 NOT NULL COMMENT 'SHA1() hashed', PRIMARY KEY (`id`), @@ -132,19 +140,19 @@ ALTER TABLE `data` -- Constraints der Tabelle `group_channel` -- ALTER TABLE `group_channel` - ADD CONSTRAINT `group_channel_ibfk_4` FOREIGN KEY (`group_id`) REFERENCES `groups` (`id`) ON DELETE CASCADE, - ADD CONSTRAINT `group_channel_ibfk_3` FOREIGN KEY (`channel_id`) REFERENCES `channels` (`id`) ON DELETE CASCADE; + ADD CONSTRAINT `group_channel_ibfk_3` FOREIGN KEY (`channel_id`) REFERENCES `channels` (`id`) ON DELETE CASCADE, + ADD CONSTRAINT `group_channel_ibfk_4` FOREIGN KEY (`group_id`) REFERENCES `groups` (`id`) ON DELETE CASCADE; -- -- Constraints der Tabelle `group_group` -- ALTER TABLE `group_group` - ADD CONSTRAINT `group_group_ibfk_4` FOREIGN KEY (`child_id`) REFERENCES `groups` (`id`) ON DELETE CASCADE, - ADD CONSTRAINT `group_group_ibfk_3` FOREIGN KEY (`parent_id`) REFERENCES `groups` (`id`) ON DELETE CASCADE; + ADD CONSTRAINT `group_group_ibfk_3` FOREIGN KEY (`parent_id`) REFERENCES `groups` (`id`) ON DELETE CASCADE, + ADD CONSTRAINT `group_group_ibfk_4` FOREIGN KEY (`child_id`) REFERENCES `groups` (`id`) ON DELETE CASCADE; -- -- Constraints der Tabelle `group_user` -- ALTER TABLE `group_user` - ADD CONSTRAINT `group_user_ibfk_4` FOREIGN KEY (`user_id`) REFERENCES `users` (`id`) ON DELETE CASCADE, - ADD CONSTRAINT `group_user_ibfk_3` FOREIGN KEY (`group_id`) REFERENCES `groups` (`id`) ON DELETE CASCADE; + ADD CONSTRAINT `group_user_ibfk_3` FOREIGN KEY (`group_id`) REFERENCES `groups` (`id`) ON DELETE CASCADE, + ADD CONSTRAINT `group_user_ibfk_4` FOREIGN KEY (`user_id`) REFERENCES `users` (`id`) ON DELETE CASCADE;