From a6a320f527c09e78acbf99d9096c91f884f4665c Mon Sep 17 00:00:00 2001
From: Robert Metcalf <metcalfr@cardiff.ac.uk>
Date: Fri, 19 Nov 2021 10:57:19 +0000
Subject: [PATCH] add initial database with workspace support

---
 .gitignore         |   1 +
 database.py        | 100 +++++++++++++++++++++++++++++++++++++++++++++
 import_database.py |  14 +++++++
 3 files changed, 115 insertions(+)
 create mode 100644 database.py
 create mode 100644 import_database.py

diff --git a/.gitignore b/.gitignore
index 38da6d9..98feee9 100644
--- a/.gitignore
+++ b/.gitignore
@@ -1,2 +1,3 @@
 __pycache__/
 .vscode/
+database.db
diff --git a/database.py b/database.py
new file mode 100644
index 0000000..80ca1c6
--- /dev/null
+++ b/database.py
@@ -0,0 +1,100 @@
+import os
+import sqlite3
+from typing import List
+
+DATABASE = os.path.join(os.path.dirname(os.path.abspath(__file__)), "database.db")
+
+class Connection:
+	def __init__(self):
+		self.connection = sqlite3.connect(DATABASE)
+		self.cursor = self.connection.cursor()
+		self.do_rollback = False
+
+	def commit(self):
+		self.connection.commit()
+		self.do_rollback = False
+
+	def execute(self, sql: str, tuple = ()):
+		self.do_rollback = True
+		self.cursor.execute(sql, tuple)
+
+	def fetch_all(self):
+		return self.cursor.fetchall()
+
+	def close(self):
+		if self.do_rollback:
+			self.connection.rollback()
+
+		self.connection.close()
+
+	def __enter__(self):
+		return self
+
+	def __exit__(self, *args):
+		self.close()
+
+with Connection() as conn:
+	conn.execute('''CREATE TABLE IF NOT EXISTS Workspaces (
+		id integer NOT NULL PRIMARY KEY AUTOINCREMENT,
+		name text NOT NULL,
+		address text NOT NULL,
+		main_photo text NOT NULL,
+		description text NOT NULL,
+		website text NOT NULL,
+		email text NOT NULL,
+		phone_number text NOT NULL,
+		opening_hours text,
+		checkin_instructions text)''')
+	conn.execute('''CREATE TABLE IF NOT EXISTS AdditionalPhotos (
+		id integer NOT NULL PRIMARY KEY AUTOINCREMENT,
+		url text NOT NULL,
+		workspace_id integer NOT NULL,
+		FOREIGN KEY (workspace_id) REFERENCES Workspaces(id))''')
+	conn.commit()
+
+class Workspace:
+	def __init__(self, name: str,
+		address: str, main_photo: str, additional_photos: List[str], description: str,
+		website: str, email: str, phone_number: str, opening_hours: str, checkin_instructions: str):
+		self.id = None
+		self.name = name
+		self.address = address
+		self.main_photo = main_photo
+		self.additional_photos = additional_photos
+		self.description = description
+		self.website = website
+		self.email = email
+		self.phone_number = phone_number
+		self.opening_hours = opening_hours
+		self.checkin_instructions = checkin_instructions
+
+	def from_query(conn, tuple):
+		(id, name, address, main_photo, description, website, email, phone_number, opening_hours, checkin_instructions) = tuple
+		additional_photos = []
+		
+		conn.execute("SELECT url FROM AdditionalPhotos WHERE workspace_id = ?", ("1"))
+		for x in conn.cursor.fetchall():
+			additional_photos.append(x[0])
+
+		workspace = Workspace(name, address, main_photo, additional_photos, description, website, email, phone_number, opening_hours, checkin_instructions)
+		workspace.id = id
+		return workspace
+
+def add_workspace(workspace: Workspace):
+	with Connection() as conn:
+		conn.execute(
+			"INSERT INTO Workspaces (name, address, main_photo, description, website, email, phone_number, opening_hours, checkin_instructions) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?)",
+			(workspace.name, workspace.address, workspace.main_photo, workspace.description, workspace.website, workspace.email, workspace.phone_number, workspace.opening_hours, workspace.checkin_instructions)
+		)
+		id = conn.cursor.lastrowid
+		for url in workspace.additional_photos:
+			conn.execute("INSERT INTO AdditionalPhotos (url, workspace_id) VALUES (?, ?)", (url, id))
+		conn.commit()
+		return id
+
+def get_workspaces():
+	with Connection() as conn:
+		conn.execute("SELECT * FROM Workspaces")
+		return [Workspace.from_query(conn, x) for x in conn.cursor.fetchall()]
+
+print(get_workspaces())
\ No newline at end of file
diff --git a/import_database.py b/import_database.py
new file mode 100644
index 0000000..deceed4
--- /dev/null
+++ b/import_database.py
@@ -0,0 +1,14 @@
+import database
+
+print(database.add_workspace(database.Workspace(
+	"CodeBase",
+	"CodeBase Edinburgh, 37a Castle Terrace, Edinburgh, EH1 2EL",
+	"https://images.squarespace-cdn.com/content/v1/55439320e4b0f92b5d6c4c8b/1505921023376-PAHUDHVOOKIYF4XQPHOO/5951229048_3e3d50fcb1_o.jpg?format=750w",
+	["https://images.squarespace-cdn.com/content/v1/55439320e4b0f92b5d6c4c8b/1636387943314-W9JWMS6ZX4DEZSPUV7T0/Copy+of+Unfiltered_square+%281%29.png?format=500w"],
+	"We've been exploring the world of startups...",
+	"https://www.thisiscodebase.com",
+	"hannah@thisiscodebase.com",
+	"+44 131 560 2003",
+	"Monday - Friday, 9am - 5pm",
+	"Tramsched members should contact Hannah using the email address listed."
+)))
-- 
GitLab