CREATE TABLE `Printer` (
  `id` int UNIQUE PRIMARY KEY,
  `name` text,
  `description` text,
  `status` int COMMENT '0: OPERATIONAL
1: OUT_OF_ORDER',
  `created_at` timestamp,
  `updated_at` timestamp
);

CREATE TABLE `PrintJob` (
  `id` int UNIQUE PRIMARY KEY,
  `printer_id` int,
  `user_id` int,
  `start_at` timestamp,
  `duration_in_minutes` int,
  `comments` text,
  `aborted` boolean DEFAULT false,
  `abort_reason` text COMMENT 'Error code displayed on printer'
);

CREATE TABLE `Account` (
  `id` text UNIQUE PRIMARY KEY,
  `userId` text,
  `type` text,
  `provider` text,
  `providerAccountId` text,
  `refresh_token` text,
  `access_token` text,
  `expires_at` int,
  `token_type` text,
  `scope` text,
  `id_token` text,
  `session_state` text
);

CREATE TABLE `Session` (
  `id` text UNIQUE PRIMARY KEY,
  `sessionToken` text UNIQUE,
  `userId` text,
  `expires` datetime
);

CREATE TABLE `User` (
  `id` text PRIMARY KEY,
  `name` text,
  `email` text UNIQUE,
  `role` text COMMENT 'ADMIN,USER,GUEST'
);

ALTER TABLE `User` ADD FOREIGN KEY (`id`) REFERENCES `PrintJob` (`user_id`);

ALTER TABLE `User` ADD FOREIGN KEY (`id`) REFERENCES `Account` (`userId`);

ALTER TABLE `User` ADD FOREIGN KEY (`id`) REFERENCES `Session` (`userId`);

ALTER TABLE `Printer` ADD FOREIGN KEY (`id`) REFERENCES `PrintJob` (`printer_id`);