enabled syntax highlighting for queries
This commit is contained in:
3
server/.gitignore
vendored
3
server/.gitignore
vendored
@@ -175,4 +175,5 @@ pyrightconfig.json
|
|||||||
|
|
||||||
# End of https://www.toptal.com/developers/gitignore/api/python
|
# End of https://www.toptal.com/developers/gitignore/api/python
|
||||||
|
|
||||||
*.log
|
*.log
|
||||||
|
.vscode/
|
||||||
@@ -50,7 +50,7 @@ class EventController(BaseController):
|
|||||||
:raises HTTPException: If any error occurs (status code 500)
|
:raises HTTPException: If any error occurs (status code 500)
|
||||||
:return list[EventSeries]: A list of EventSeries objects suitable for a response body
|
:return list[EventSeries]: A list of EventSeries objects suitable for a response body
|
||||||
"""
|
"""
|
||||||
series_data = self.db.select_all_series()
|
series_data = self.db.select_all()
|
||||||
|
|
||||||
try:
|
try:
|
||||||
return [series for series in self._all_series(series_data).values()]
|
return [series for series in self._all_series(series_data).values()]
|
||||||
|
|||||||
@@ -32,7 +32,7 @@ class MusicianController(BaseController):
|
|||||||
:raises HTTPException: If any error occurs during the retrieval process (status code 500)
|
:raises HTTPException: If any error occurs during the retrieval process (status code 500)
|
||||||
:return list[Musician]: A list of Musician objects suitable for a response body
|
:return list[Musician]: A list of Musician objects suitable for a response body
|
||||||
"""
|
"""
|
||||||
data = self.db.select_all_series()
|
data = self.db.select_all()
|
||||||
try:
|
try:
|
||||||
return [Musician(**m) for m in data]
|
return [Musician(**m) for m in data]
|
||||||
except Exception as e:
|
except Exception as e:
|
||||||
|
|||||||
@@ -30,7 +30,7 @@ class UserController(BaseController):
|
|||||||
:raises HTTPException: If any error occurs during the retrieval process (status code 500)
|
:raises HTTPException: If any error occurs during the retrieval process (status code 500)
|
||||||
:return list[User]: A list of User objects suitable for a response body
|
:return list[User]: A list of User objects suitable for a response body
|
||||||
"""
|
"""
|
||||||
data = self.db.select_all_series()
|
data = self.db.select_all()
|
||||||
try:
|
try:
|
||||||
return [User(**e) for e in data]
|
return [User(**e) for e in data]
|
||||||
except Exception as e:
|
except Exception as e:
|
||||||
|
|||||||
@@ -1,6 +1,8 @@
|
|||||||
from typing import Callable
|
from typing import Callable
|
||||||
|
|
||||||
from icecream import ic
|
from icecream import ic
|
||||||
|
from mysql.connector.connection import MySQLConnection
|
||||||
|
from mysql.connector.cursor import MySQLCursor
|
||||||
|
|
||||||
from app.db.conn import connect_db
|
from app.db.conn import connect_db
|
||||||
|
|
||||||
@@ -15,25 +17,39 @@ class BaseQueries:
|
|||||||
|
|
||||||
def __init__(self) -> None:
|
def __init__(self) -> None:
|
||||||
self.table: str = None # type: ignore
|
self.table: str = None # type: ignore
|
||||||
self.connect_db: Callable = connect_db
|
self.connect_db: Callable[[], MySQLConnection] = connect_db
|
||||||
|
|
||||||
def select_all_series(self) -> list[dict]:
|
def select_all(self) -> list[dict]:
|
||||||
query = f"SELECT * FROM {self.table}"
|
query = f"""-- sql
|
||||||
db = connect_db()
|
SELECT * FROM {self.table}
|
||||||
cursor = db.cursor(dictionary=True)
|
"""
|
||||||
|
cursor, conn = self.get_cursor_and_conn()
|
||||||
cursor.execute(query)
|
cursor.execute(query)
|
||||||
data = cursor.fetchall()
|
data: list[dict] = cursor.fetchall() # type: ignore
|
||||||
cursor.close()
|
self.close_cursor_and_conn(cursor, conn)
|
||||||
db.close()
|
|
||||||
return data # type: ignore
|
fake_query = f"""-- sql
|
||||||
|
select * from dogs
|
||||||
|
"""
|
||||||
|
|
||||||
|
return data
|
||||||
|
|
||||||
def select_one_by_id(self, id: int) -> dict | None:
|
def select_one_by_id(self, id: int) -> dict | None:
|
||||||
query = f"SELECT * FROM {self.table} WHERE id = %s"
|
query = f"""-- sql
|
||||||
db = self.connect_db()
|
SELECT * FROM {self.table} WHERE id = %s
|
||||||
cursor = db.cursor(dictionary=True)
|
"""
|
||||||
|
cursor, conn = self.get_cursor_and_conn()
|
||||||
cursor.execute(query, (id,))
|
cursor.execute(query, (id,))
|
||||||
data = cursor.fetchone()
|
data: dict | None = cursor.fetchone() # type: ignore
|
||||||
cursor.close()
|
self.close_cursor_and_conn(cursor, conn)
|
||||||
db.close()
|
|
||||||
|
|
||||||
return data # type: ignore
|
return data
|
||||||
|
|
||||||
|
def get_cursor_and_conn(self) -> tuple[MySQLCursor, MySQLConnection]:
|
||||||
|
conn = self.connect_db()
|
||||||
|
cursor = conn.cursor(dictionary=True)
|
||||||
|
return cursor, conn
|
||||||
|
|
||||||
|
def close_cursor_and_conn(self, cursor: MySQLCursor, conn: MySQLConnection) -> None:
|
||||||
|
cursor.close()
|
||||||
|
conn.close()
|
||||||
|
|||||||
@@ -1,5 +1,3 @@
|
|||||||
from asyncio import gather
|
|
||||||
|
|
||||||
from icecream import ic
|
from icecream import ic
|
||||||
|
|
||||||
from app.constants import EVENT_TABLE, SERIES_TABLE
|
from app.constants import EVENT_TABLE, SERIES_TABLE
|
||||||
@@ -15,52 +13,46 @@ class EventQueries(BaseQueries):
|
|||||||
|
|
||||||
def __init__(self) -> None:
|
def __init__(self) -> None:
|
||||||
super().__init__()
|
super().__init__()
|
||||||
self.table = SERIES_TABLE
|
|
||||||
|
|
||||||
def select_one_by_id(self, series_id: int) -> list[dict] | None:
|
def select_one_by_id(self, series_id: int) -> list[dict] | None:
|
||||||
query = f"""
|
query = f"""-- sql
|
||||||
SELECT s.series_id , s.name , s.description , s.poster_id , e.event_id , e.location , e.`time` , e.ticket_url , e.map_url
|
SELECT s.series_id , s.name , s.description , s.poster_id , e.event_id , e.location , e.`time` , e.ticket_url , e.map_url
|
||||||
FROM {SERIES_TABLE} s
|
FROM {SERIES_TABLE} s
|
||||||
LEFT JOIN {EVENT_TABLE} e
|
LEFT JOIN {EVENT_TABLE} e
|
||||||
ON s.series_id = e.series_id
|
ON s.series_id = e.series_id
|
||||||
WHERE s.series_id = %s
|
WHERE s.series_id = %s
|
||||||
"""
|
"""
|
||||||
db = self.connect_db()
|
cursor, conn = self.get_cursor_and_conn()
|
||||||
cursor = db.cursor(dictionary=True)
|
|
||||||
cursor.execute(query, (series_id,))
|
cursor.execute(query, (series_id,))
|
||||||
data = cursor.fetchall()
|
data: list[dict] = cursor.fetchall() # type: ignore
|
||||||
cursor.close()
|
self.close_cursor_and_conn(cursor, conn)
|
||||||
db.close()
|
|
||||||
return data
|
return data
|
||||||
|
|
||||||
def select_all_series(self) -> list[dict]:
|
def select_all(self) -> list[dict]:
|
||||||
"""
|
"""
|
||||||
Queries for all Series and Event info and returns a list of dictionaries.
|
Queries for all Series and Event info and returns a list of dictionaries.
|
||||||
Data is gathered with a LEFT JOIN on the Event table to ensure all Series are returned.
|
Data is gathered with a LEFT JOIN on the Event table to ensure all Series are returned.
|
||||||
A Series with no Events is valid.
|
A Series with no Events is valid.
|
||||||
"""
|
"""
|
||||||
query = f"""
|
query = f"""-- sql
|
||||||
SELECT s.series_id , s.name , s.description , s.poster_id , e.event_id , e.location , e.`time` , e.ticket_url , e.map_url
|
SELECT s.series_id , s.name , s.description , s.poster_id , e.event_id , e.location , e.`time` , e.ticket_url , e.map_url
|
||||||
FROM {SERIES_TABLE} s
|
FROM {SERIES_TABLE} s
|
||||||
LEFT JOIN {EVENT_TABLE} e
|
LEFT JOIN {EVENT_TABLE} e
|
||||||
ON s.series_id = e.series_id
|
ON s.series_id = e.series_id
|
||||||
"""
|
"""
|
||||||
|
|
||||||
db = self.connect_db()
|
cursor, conn = self.get_cursor_and_conn()
|
||||||
cursor = db.cursor(dictionary=True)
|
|
||||||
cursor.execute(query)
|
cursor.execute(query)
|
||||||
data = cursor.fetchall()
|
data: list[dict] = cursor.fetchall() # type: ignore
|
||||||
cursor.close()
|
self.close_cursor_and_conn(cursor, conn)
|
||||||
db.close()
|
|
||||||
return data
|
return data
|
||||||
|
|
||||||
def insert_one_series(self, series: NewEventSeries) -> int:
|
def insert_one_series(self, series: NewEventSeries) -> int:
|
||||||
query = f"""
|
query = f"""-- sql
|
||||||
INSERT INTO {self.table} (name, description)
|
INSERT INTO {SERIES_TABLE} (name, description)
|
||||||
VALUES (%s, %s)
|
VALUES (%s, %s)
|
||||||
"""
|
"""
|
||||||
db = self.connect_db()
|
cursor, conn = self.get_cursor_and_conn()
|
||||||
cursor = db.cursor()
|
|
||||||
cursor.execute(
|
cursor.execute(
|
||||||
query,
|
query,
|
||||||
(
|
(
|
||||||
@@ -69,91 +61,87 @@ class EventQueries(BaseQueries):
|
|||||||
),
|
),
|
||||||
)
|
)
|
||||||
inserted_id = cursor.lastrowid
|
inserted_id = cursor.lastrowid
|
||||||
db.commit()
|
conn.commit()
|
||||||
cursor.close()
|
self.close_cursor_and_conn(cursor, conn)
|
||||||
db.close()
|
|
||||||
|
if inserted_id is None:
|
||||||
|
raise Exception("insertion error")
|
||||||
|
|
||||||
return inserted_id
|
return inserted_id
|
||||||
|
|
||||||
def insert_one_event(self, event: NewEvent, series_id: int) -> int:
|
def insert_one_event(self, event: NewEvent, series_id: int) -> int:
|
||||||
query = f"""
|
query = f"""-- sql
|
||||||
INSERT INTO {EVENT_TABLE} (series_id, location, time, ticket_url, map_url)
|
INSERT INTO {EVENT_TABLE} (series_id, location, time, ticket_url, map_url)
|
||||||
VALUES (%s, %s, %s, %s, %s)
|
VALUES (%s, %s, %s, %s, %s)
|
||||||
"""
|
"""
|
||||||
db = self.connect_db()
|
cursor, conn = self.get_cursor_and_conn()
|
||||||
cursor = db.cursor()
|
|
||||||
ticket_url = str(event.ticket_url) if event.ticket_url else None
|
ticket_url = str(event.ticket_url) if event.ticket_url else None
|
||||||
map_url = str(event.map_url) if event.map_url else None
|
map_url = str(event.map_url) if event.map_url else None
|
||||||
cursor.execute(
|
cursor.execute(
|
||||||
query, (series_id, event.location, event.time, ticket_url, map_url)
|
query, (series_id, event.location, event.time, ticket_url, map_url)
|
||||||
)
|
)
|
||||||
iserted_id = cursor.lastrowid
|
inserted_id = cursor.lastrowid
|
||||||
db.commit()
|
conn.commit()
|
||||||
cursor.close()
|
self.close_cursor_and_conn(cursor, conn)
|
||||||
db.close()
|
if inserted_id is None:
|
||||||
return iserted_id
|
raise Exception("error inserting event")
|
||||||
|
return inserted_id
|
||||||
|
|
||||||
def delete_events_by_series(self, series: EventSeries) -> None:
|
def delete_events_by_series(self, series: EventSeries) -> None:
|
||||||
query = f"""
|
query = f"""-- sql
|
||||||
DELETE FROM {EVENT_TABLE}
|
DELETE FROM {EVENT_TABLE}
|
||||||
WHERE series_id = %s
|
WHERE series_id = %s
|
||||||
"""
|
"""
|
||||||
db = self.connect_db()
|
cursor, conn = self.get_cursor_and_conn()
|
||||||
cursor = db.cursor()
|
|
||||||
cursor.execute(query, (series.series_id,))
|
cursor.execute(query, (series.series_id,))
|
||||||
db.commit()
|
conn.commit()
|
||||||
cursor.close()
|
self.close_cursor_and_conn(cursor, conn)
|
||||||
|
|
||||||
def delete_one_series(self, series: EventSeries) -> None:
|
def delete_one_series(self, series: EventSeries) -> None:
|
||||||
query = f"""
|
query = f"""-- sql
|
||||||
DELETE FROM {self.table}
|
DELETE FROM {SERIES_TABLE}
|
||||||
WHERE series_id = %s
|
WHERE series_id = %s
|
||||||
"""
|
"""
|
||||||
db = self.connect_db()
|
cursor, conn = self.get_cursor_and_conn()
|
||||||
cursor = db.cursor()
|
|
||||||
cursor.execute(query, (series.series_id,))
|
cursor.execute(query, (series.series_id,))
|
||||||
db.commit()
|
conn.commit()
|
||||||
cursor.close()
|
self.close_cursor_and_conn(cursor, conn)
|
||||||
|
|
||||||
def update_series_poster(self, series: EventSeries) -> None:
|
def update_series_poster(self, series: EventSeries) -> None:
|
||||||
query = f"""
|
query = f"""-- sql
|
||||||
UPDATE {self.table}
|
UPDATE {SERIES_TABLE}
|
||||||
SET poster_id = %s
|
SET poster_id = %s
|
||||||
WHERE series_id = %s
|
WHERE series_id = %s
|
||||||
"""
|
"""
|
||||||
db = self.connect_db()
|
cursor, conn = self.get_cursor_and_conn()
|
||||||
cursor = db.cursor()
|
|
||||||
cursor.execute(query, (series.poster_id, series.series_id))
|
cursor.execute(query, (series.poster_id, series.series_id))
|
||||||
db.commit()
|
conn.commit()
|
||||||
cursor.close()
|
self.close_cursor_and_conn(cursor, conn)
|
||||||
|
|
||||||
def replace_event(self, event: Event) -> None:
|
def replace_event(self, event: Event) -> None:
|
||||||
query = f"""
|
query = f"""-- sql
|
||||||
UPDATE {EVENT_TABLE}
|
UPDATE {EVENT_TABLE}
|
||||||
SET location = %s, time = %s, ticket_url = %s, map_url = %s
|
SET location = %s, time = %s, ticket_url = %s, map_url = %s
|
||||||
WHERE event_id = %s
|
WHERE event_id = %s
|
||||||
"""
|
"""
|
||||||
db = self.connect_db()
|
cursor, conn = self.get_cursor_and_conn()
|
||||||
cursor = db.cursor()
|
|
||||||
ticket_url = str(event.ticket_url) if event.ticket_url else None
|
ticket_url = str(event.ticket_url) if event.ticket_url else None
|
||||||
map_url = str(event.map_url) if event.map_url else None
|
map_url = str(event.map_url) if event.map_url else None
|
||||||
cursor.execute(
|
cursor.execute(
|
||||||
query, (event.location, event.time, ticket_url, map_url, event.event_id)
|
query, (event.location, event.time, ticket_url, map_url, event.event_id)
|
||||||
)
|
)
|
||||||
db.commit()
|
conn.commit()
|
||||||
cursor.close()
|
self.close_cursor_and_conn(cursor, conn)
|
||||||
db.close()
|
|
||||||
|
|
||||||
def replace_series(self, series: EventSeries) -> None:
|
def replace_series(self, series: EventSeries) -> None:
|
||||||
query = f"""
|
query = f"""-- sql
|
||||||
UPDATE {self.table}
|
UPDATE {SERIES_TABLE}
|
||||||
SET name = %s, description = %s, poster_id = %s
|
SET name = %s, description = %s, poster_id = %s
|
||||||
WHERE series_id = %s
|
WHERE series_id = %s
|
||||||
"""
|
"""
|
||||||
db = self.connect_db()
|
cursor, conn = self.get_cursor_and_conn()
|
||||||
cursor = db.cursor()
|
|
||||||
cursor.execute(
|
cursor.execute(
|
||||||
query, (series.name, series.description, series.poster_id, series.series_id)
|
query, (series.name, series.description, series.poster_id, series.series_id)
|
||||||
)
|
)
|
||||||
db.commit()
|
conn.commit()
|
||||||
cursor.close()
|
self.close_cursor_and_conn(cursor, conn)
|
||||||
db.close()
|
|
||||||
|
|||||||
@@ -8,29 +8,29 @@ class GroupQueries(BaseQueries):
|
|||||||
self.table = GROUP_TABLE
|
self.table = GROUP_TABLE
|
||||||
|
|
||||||
def select_one_by_id(self) -> dict:
|
def select_one_by_id(self) -> dict:
|
||||||
query = f"SELECT * FROM {self.table}"
|
query = f"""-- sql
|
||||||
db = self.connect_db()
|
SELECT * FROM {self.table}
|
||||||
cursor = db.cursor(dictionary=True)
|
"""
|
||||||
|
cursor, conn = self.get_cursor_and_conn()
|
||||||
cursor.execute(query)
|
cursor.execute(query)
|
||||||
data = cursor.fetchone()
|
data: dict = cursor.fetchone() # type: ignore
|
||||||
cursor.close()
|
self.close_cursor_and_conn(cursor, conn)
|
||||||
db.close()
|
|
||||||
|
|
||||||
if not data:
|
if not data:
|
||||||
raise Exception("error retrieving group")
|
raise Exception("error retrieving group")
|
||||||
|
|
||||||
return data
|
return data
|
||||||
|
|
||||||
def select_all_series(self) -> None:
|
def select_all(self) -> None:
|
||||||
raise NotImplementedError(
|
raise NotImplementedError(
|
||||||
"get_all method not implemented for GroupQueries. There's only one row in the table."
|
"get_all method not implemented for GroupQueries. There's only one row in the table."
|
||||||
)
|
)
|
||||||
|
|
||||||
def update_group_bio(self, bio: str) -> None:
|
def update_group_bio(self, bio: str) -> None:
|
||||||
db = self.connect_db()
|
cursor, conn = self.get_cursor_and_conn()
|
||||||
cursor = db.cursor()
|
query = f"""-- sql
|
||||||
query = f"UPDATE {self.table} SET bio = %s WHERE id = 1" # only one row in the table
|
UPDATE {self.table} SET bio = %s WHERE id = 1
|
||||||
|
""" # only one row in the table
|
||||||
cursor.execute(query, (bio,))
|
cursor.execute(query, (bio,))
|
||||||
db.commit()
|
conn.commit()
|
||||||
cursor.close()
|
self.close_cursor_and_conn(cursor, conn)
|
||||||
db.close()
|
|
||||||
|
|||||||
@@ -20,7 +20,9 @@ class MusicianQueries(BaseQueries):
|
|||||||
"""
|
"""
|
||||||
db = connect_db()
|
db = connect_db()
|
||||||
cursor = db.cursor()
|
cursor = db.cursor()
|
||||||
query = f"UPDATE {self.table} SET bio = %s WHERE id = %s"
|
query = f"""-- sql
|
||||||
|
UPDATE {self.table} SET bio = %s WHERE id = %s
|
||||||
|
"""
|
||||||
cursor.execute(query, (bio, musician.id))
|
cursor.execute(query, (bio, musician.id))
|
||||||
db.commit()
|
db.commit()
|
||||||
cursor.close()
|
cursor.close()
|
||||||
@@ -36,7 +38,9 @@ class MusicianQueries(BaseQueries):
|
|||||||
"""
|
"""
|
||||||
db = connect_db()
|
db = connect_db()
|
||||||
cursor = db.cursor()
|
cursor = db.cursor()
|
||||||
query = f"UPDATE {self.table} SET headshot_id = %s WHERE id = %s"
|
query = f"""-- sql
|
||||||
|
UPDATE {self.table} SET headshot_id = %s WHERE id = %s
|
||||||
|
"""
|
||||||
cursor.execute(query, (headshot_id, musician.id))
|
cursor.execute(query, (headshot_id, musician.id))
|
||||||
db.commit()
|
db.commit()
|
||||||
cursor.close()
|
cursor.close()
|
||||||
|
|||||||
@@ -3,40 +3,59 @@ from app.db.base_queries import BaseQueries
|
|||||||
|
|
||||||
|
|
||||||
class UserQueries(BaseQueries):
|
class UserQueries(BaseQueries):
|
||||||
|
"""
|
||||||
|
Used for quering the database for User related data
|
||||||
|
"""
|
||||||
|
|
||||||
def __init__(self) -> None:
|
def __init__(self) -> None:
|
||||||
super().__init__()
|
super().__init__()
|
||||||
self.table = USER_TABLE
|
self.table = USER_TABLE
|
||||||
|
|
||||||
def select_one_by_email(self, email: str) -> dict | None:
|
def select_one_by_email(self, email: str) -> dict | None:
|
||||||
query = f"SELECT * FROM {self.table} WHERE email = %s"
|
"""
|
||||||
db = self.connect_db()
|
Select one user by their email address
|
||||||
cursor = db.cursor(dictionary=True)
|
|
||||||
|
:param str email: user email
|
||||||
|
:return dict | None: a dictionary of found data, or None if no user found
|
||||||
|
"""
|
||||||
|
query = f"""-- sql
|
||||||
|
SELECT * FROM {USER_TABLE} WHERE email = %s
|
||||||
|
"""
|
||||||
|
cursor, conn = self.get_cursor_and_conn()
|
||||||
cursor.execute(query, (email,))
|
cursor.execute(query, (email,))
|
||||||
data = cursor.fetchone()
|
data: dict = cursor.fetchone() # type: ignore
|
||||||
cursor.close()
|
self.close_cursor_and_conn(cursor, conn)
|
||||||
db.close()
|
|
||||||
|
|
||||||
return data
|
return data
|
||||||
|
|
||||||
def select_one_by_sub(self, sub: str) -> dict | None:
|
def select_one_by_sub(self, sub: str) -> dict | None:
|
||||||
query = f"SELECT * FROM {self.table} WHERE sub = %s"
|
"""
|
||||||
db = self.connect_db()
|
Select one user by their unique sub identifier
|
||||||
cursor = db.cursor(dictionary=True)
|
|
||||||
cursor.execute(query, (sub,))
|
|
||||||
data = cursor.fetchone()
|
|
||||||
cursor.close()
|
|
||||||
db.close()
|
|
||||||
|
|
||||||
if not data:
|
:param str sub: user sub
|
||||||
return None
|
:return dict | None: a dict of user data
|
||||||
|
"""
|
||||||
|
query = f"""-- sql
|
||||||
|
SELECT * FROM {USER_TABLE} WHERE sub = %s
|
||||||
|
"""
|
||||||
|
cursor, conn = self.get_cursor_and_conn()
|
||||||
|
cursor.execute(query, (sub,))
|
||||||
|
data: dict = cursor.fetchone() # type: ignore
|
||||||
|
self.close_cursor_and_conn(cursor, conn)
|
||||||
|
|
||||||
return data
|
return data
|
||||||
|
|
||||||
def update_sub(self, email: str, sub: str) -> None:
|
def update_sub(self, email: str, sub: str) -> None:
|
||||||
query = f"UPDATE {self.table} SET sub = %s WHERE email = %s"
|
"""
|
||||||
db = self.connect_db()
|
Update user sub. Used when a user logs in for the first time.
|
||||||
cursor = db.cursor()
|
|
||||||
|
:param str email: user email
|
||||||
|
:param str sub: the new unique sub identifier
|
||||||
|
"""
|
||||||
|
query = f"""-- sql
|
||||||
|
UPDATE {USER_TABLE} SET sub = %s WHERE email = %s
|
||||||
|
"""
|
||||||
|
cursor, conn = self.get_cursor_and_conn()
|
||||||
cursor.execute(query, (sub, email))
|
cursor.execute(query, (sub, email))
|
||||||
db.commit()
|
conn.commit()
|
||||||
cursor.close()
|
self.close_cursor_and_conn(cursor, conn)
|
||||||
db.close()
|
|
||||||
|
|||||||
@@ -82,32 +82,13 @@ series1 = EventSeries(
|
|||||||
series_id=0,
|
series_id=0,
|
||||||
)
|
)
|
||||||
|
|
||||||
# series2 = EventSeries(
|
|
||||||
# name="The Grapefruits Duo Features: Solos for Bass Trombone",
|
|
||||||
# description="Pieces by Ewazen, Bozza, and more!",
|
|
||||||
# events=[
|
|
||||||
# Event(
|
|
||||||
# location="Eugene Family YMCA",
|
|
||||||
# time=datetime(2024, 7, 1, 17, 30),
|
|
||||||
# event_id=0,
|
|
||||||
# ),
|
|
||||||
# Event(
|
|
||||||
# location="Tobi's Crate",
|
|
||||||
# time=datetime(2024, 7, 2, 20),
|
|
||||||
# event_id=0,
|
|
||||||
# ticket_url="http://www.example.com", # type: ignore
|
|
||||||
# ),
|
|
||||||
# ],
|
|
||||||
# id=0,
|
|
||||||
# )
|
|
||||||
|
|
||||||
|
|
||||||
def seed():
|
def seed():
|
||||||
confirmation = input(
|
confirmation = input(
|
||||||
"Are you sure you want to seed the database? Data will be lost. [Y/n]: "
|
"Are you sure you want to seed the database? Data will be lost. [Y/n]: "
|
||||||
)
|
)
|
||||||
if confirmation.lower() not in ["y", "yes", ""]:
|
if confirmation.lower() not in ["y", "yes", ""]:
|
||||||
print("Exiting")
|
print("Exiting without changes")
|
||||||
return
|
return
|
||||||
print("Seeding database")
|
print("Seeding database")
|
||||||
add_musicians()
|
add_musicians()
|
||||||
@@ -121,10 +102,12 @@ def add_group():
|
|||||||
db = connect_db()
|
db = connect_db()
|
||||||
cursor = db.cursor()
|
cursor = db.cursor()
|
||||||
cursor.execute(
|
cursor.execute(
|
||||||
f"DROP TABLE IF EXISTS {GROUP_TABLE};",
|
f"""-- sql
|
||||||
|
DROP TABLE IF EXISTS {GROUP_TABLE};
|
||||||
|
""",
|
||||||
)
|
)
|
||||||
cursor.execute(
|
cursor.execute(
|
||||||
f"""
|
f"""-- sql
|
||||||
CREATE TABLE {GROUP_TABLE} (
|
CREATE TABLE {GROUP_TABLE} (
|
||||||
id INT NOT NULL AUTO_INCREMENT,
|
id INT NOT NULL AUTO_INCREMENT,
|
||||||
name VARCHAR(255) NOT NULL,
|
name VARCHAR(255) NOT NULL,
|
||||||
@@ -134,7 +117,9 @@ def add_group():
|
|||||||
"""
|
"""
|
||||||
)
|
)
|
||||||
cursor.execute(
|
cursor.execute(
|
||||||
f"INSERT INTO {GROUP_TABLE} (name, bio) VALUES (%s, %s);",
|
f"""-- sql
|
||||||
|
INSERT INTO {GROUP_TABLE} (name, bio) VALUES (%s, %s);
|
||||||
|
""",
|
||||||
(tgd.name, tgd.bio),
|
(tgd.name, tgd.bio),
|
||||||
)
|
)
|
||||||
db.commit()
|
db.commit()
|
||||||
@@ -146,10 +131,12 @@ def add_users():
|
|||||||
db = connect_db()
|
db = connect_db()
|
||||||
cursor = db.cursor()
|
cursor = db.cursor()
|
||||||
cursor.execute(
|
cursor.execute(
|
||||||
f"DROP TABLE IF EXISTS {USER_TABLE};",
|
f"""-- sql
|
||||||
|
DROP TABLE IF EXISTS {USER_TABLE};
|
||||||
|
""",
|
||||||
)
|
)
|
||||||
cursor.execute(
|
cursor.execute(
|
||||||
f"""
|
f"""-- sql
|
||||||
CREATE TABLE {USER_TABLE} (
|
CREATE TABLE {USER_TABLE} (
|
||||||
id INT NOT NULL AUTO_INCREMENT,
|
id INT NOT NULL AUTO_INCREMENT,
|
||||||
name VARCHAR(255) NOT NULL,
|
name VARCHAR(255) NOT NULL,
|
||||||
@@ -161,7 +148,9 @@ def add_users():
|
|||||||
)
|
)
|
||||||
for u in [coco_user, margarite_user, lucas_user, tgd_user, tgd_website]:
|
for u in [coco_user, margarite_user, lucas_user, tgd_user, tgd_website]:
|
||||||
cursor.execute(
|
cursor.execute(
|
||||||
f"INSERT INTO {USER_TABLE} (name, email, sub) VALUES (%s, %s, %s);",
|
f"""-- sql
|
||||||
|
INSERT INTO {USER_TABLE} (name, email, sub) VALUES (%s, %s, %s);
|
||||||
|
""",
|
||||||
(u.name, u.email, u.sub),
|
(u.name, u.email, u.sub),
|
||||||
)
|
)
|
||||||
|
|
||||||
@@ -175,10 +164,12 @@ def add_musicians():
|
|||||||
db = connect_db()
|
db = connect_db()
|
||||||
cursor = db.cursor()
|
cursor = db.cursor()
|
||||||
cursor.execute(
|
cursor.execute(
|
||||||
f"DROP TABLE IF EXISTS {MUSICIAN_TABLE};",
|
f"""-- sql
|
||||||
|
DROP TABLE IF EXISTS {MUSICIAN_TABLE};
|
||||||
|
""",
|
||||||
)
|
)
|
||||||
cursor.execute(
|
cursor.execute(
|
||||||
f"""
|
f"""-- sql
|
||||||
CREATE TABLE {MUSICIAN_TABLE} (
|
CREATE TABLE {MUSICIAN_TABLE} (
|
||||||
id INT NOT NULL AUTO_INCREMENT,
|
id INT NOT NULL AUTO_INCREMENT,
|
||||||
name VARCHAR(255) NOT NULL,
|
name VARCHAR(255) NOT NULL,
|
||||||
@@ -190,7 +181,9 @@ def add_musicians():
|
|||||||
)
|
)
|
||||||
for m in [margarite, coco]:
|
for m in [margarite, coco]:
|
||||||
cursor.execute(
|
cursor.execute(
|
||||||
f"INSERT INTO {MUSICIAN_TABLE} (name, bio, headshot_id) VALUES (%s, %s, %s);",
|
f"""-- sql
|
||||||
|
INSERT INTO {MUSICIAN_TABLE} (name, bio, headshot_id) VALUES (%s, %s, %s);
|
||||||
|
""",
|
||||||
(m.name, m.bio, m.headshot_id),
|
(m.name, m.bio, m.headshot_id),
|
||||||
)
|
)
|
||||||
|
|
||||||
@@ -204,13 +197,17 @@ def add_events():
|
|||||||
db = connect_db()
|
db = connect_db()
|
||||||
cursor = db.cursor()
|
cursor = db.cursor()
|
||||||
cursor.execute(
|
cursor.execute(
|
||||||
f"DROP TABLE IF EXISTS {EVENT_TABLE};",
|
f"""-- sql
|
||||||
|
DROP TABLE IF EXISTS {EVENT_TABLE};
|
||||||
|
""",
|
||||||
)
|
)
|
||||||
cursor.execute(
|
cursor.execute(
|
||||||
f"DROP TABLE IF EXISTS {SERIES_TABLE};",
|
f"""-- sql
|
||||||
|
DROP TABLE IF EXISTS {SERIES_TABLE};
|
||||||
|
""",
|
||||||
)
|
)
|
||||||
cursor.execute(
|
cursor.execute(
|
||||||
f"""
|
f"""-- sql
|
||||||
CREATE TABLE {SERIES_TABLE} (
|
CREATE TABLE {SERIES_TABLE} (
|
||||||
series_id INT NOT NULL AUTO_INCREMENT,
|
series_id INT NOT NULL AUTO_INCREMENT,
|
||||||
name VARCHAR(255) NOT NULL UNIQUE,
|
name VARCHAR(255) NOT NULL UNIQUE,
|
||||||
@@ -221,7 +218,7 @@ def add_events():
|
|||||||
"""
|
"""
|
||||||
)
|
)
|
||||||
cursor.execute(
|
cursor.execute(
|
||||||
f"""
|
f"""-- sql
|
||||||
CREATE TABLE {EVENT_TABLE} (
|
CREATE TABLE {EVENT_TABLE} (
|
||||||
event_id INT NOT NULL AUTO_INCREMENT,
|
event_id INT NOT NULL AUTO_INCREMENT,
|
||||||
series_id INT NOT NULL,
|
series_id INT NOT NULL,
|
||||||
@@ -237,7 +234,9 @@ def add_events():
|
|||||||
|
|
||||||
for series in [series1]:
|
for series in [series1]:
|
||||||
cursor.execute(
|
cursor.execute(
|
||||||
f"INSERT INTO {SERIES_TABLE} (name, description, poster_id) VALUES (%s, %s, %s);",
|
f"""-- sql
|
||||||
|
INSERT INTO {SERIES_TABLE} (name, description, poster_id) VALUES (%s, %s, %s);
|
||||||
|
""",
|
||||||
(
|
(
|
||||||
series.name,
|
series.name,
|
||||||
series.description,
|
series.description,
|
||||||
@@ -252,7 +251,9 @@ def add_events():
|
|||||||
ticket_url = str(event.ticket_url) if event.ticket_url else None
|
ticket_url = str(event.ticket_url) if event.ticket_url else None
|
||||||
map_url = str(event.map_url) if event.map_url else None
|
map_url = str(event.map_url) if event.map_url else None
|
||||||
cursor.execute(
|
cursor.execute(
|
||||||
f"INSERT INTO {EVENT_TABLE} (series_id, location, time, ticket_url, map_url) VALUES (%s, %s, %s, %s, %s);",
|
f"""-- sql
|
||||||
|
INSERT INTO {EVENT_TABLE} (series_id, location, time, ticket_url, map_url) VALUES (%s, %s, %s, %s, %s);
|
||||||
|
""",
|
||||||
(
|
(
|
||||||
series.series_id,
|
series.series_id,
|
||||||
event.location,
|
event.location,
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
[tool.poetry]
|
[tool.poetry]
|
||||||
name = "thegrapefruitsduo"
|
name = "thegrapefruitsduo"
|
||||||
version = "0.4.1"
|
version = "0.4.2"
|
||||||
package-mode = false
|
package-mode = false
|
||||||
description = "FastAPI backend for thegrapefruitsduo.com"
|
description = "FastAPI backend for thegrapefruitsduo.com"
|
||||||
authors = ["Lucas Jensen <lucas.p.jensen10@gmail.com>"]
|
authors = ["Lucas Jensen <lucas.p.jensen10@gmail.com>"]
|
||||||
|
|||||||
@@ -28,7 +28,7 @@ def test_all_series_with_no_data():
|
|||||||
def no_series() -> list[dict]:
|
def no_series() -> list[dict]:
|
||||||
return []
|
return []
|
||||||
|
|
||||||
mock_queries.select_all_series = no_series
|
mock_queries.select_all = no_series
|
||||||
result = ec.get_all_series()
|
result = ec.get_all_series()
|
||||||
assert result == []
|
assert result == []
|
||||||
|
|
||||||
@@ -46,7 +46,7 @@ def test_all_series_with_basic_data():
|
|||||||
}
|
}
|
||||||
]
|
]
|
||||||
|
|
||||||
mock_queries.select_all_series = one_series_with_no_events
|
mock_queries.select_all = one_series_with_no_events
|
||||||
result = ec.get_all_series()
|
result = ec.get_all_series()
|
||||||
assert isinstance(result, list)
|
assert isinstance(result, list)
|
||||||
assert len(result) == 1
|
assert len(result) == 1
|
||||||
@@ -104,7 +104,7 @@ def test_all_series_with_detailed_data():
|
|||||||
row_3,
|
row_3,
|
||||||
]
|
]
|
||||||
|
|
||||||
mock_queries.select_all_series = one_series_with_events
|
mock_queries.select_all = one_series_with_events
|
||||||
result = ec.get_all_series()
|
result = ec.get_all_series()
|
||||||
assert isinstance(result, list)
|
assert isinstance(result, list)
|
||||||
assert len(result) == 1
|
assert len(result) == 1
|
||||||
@@ -170,7 +170,7 @@ def test_all_series_with_many_series():
|
|||||||
},
|
},
|
||||||
]
|
]
|
||||||
|
|
||||||
mock_queries.select_all_series = many_series
|
mock_queries.select_all = many_series
|
||||||
result = ec.get_all_series()
|
result = ec.get_all_series()
|
||||||
assert isinstance(result, list)
|
assert isinstance(result, list)
|
||||||
assert len(result) == 3
|
assert len(result) == 3
|
||||||
@@ -195,7 +195,7 @@ def test_all_series_with_error():
|
|||||||
}
|
}
|
||||||
]
|
]
|
||||||
|
|
||||||
mock_queries.select_all_series = invalid_series
|
mock_queries.select_all = invalid_series
|
||||||
with pytest.raises(Exception):
|
with pytest.raises(Exception):
|
||||||
ec.get_all_series()
|
ec.get_all_series()
|
||||||
MagicMock.assert_called_once(mock_log_error)
|
MagicMock.assert_called_once(mock_log_error)
|
||||||
|
|||||||
@@ -50,7 +50,7 @@ def mock_select_one_by_id(musician_id: int):
|
|||||||
return None
|
return None
|
||||||
|
|
||||||
|
|
||||||
mock_queries.select_all_series = mock_select_all_series
|
mock_queries.select_all = mock_select_all_series
|
||||||
mock_queries.select_one_by_id = mock_select_one_by_id
|
mock_queries.select_one_by_id = mock_select_one_by_id
|
||||||
|
|
||||||
|
|
||||||
@@ -85,10 +85,10 @@ def test_happy_get_musicians():
|
|||||||
|
|
||||||
|
|
||||||
def test_sad_get_musicians():
|
def test_sad_get_musicians():
|
||||||
mock_queries.select_all_series = mock_select_all_series_sad
|
mock_queries.select_all = mock_select_all_series_sad
|
||||||
with pytest.raises(HTTPException) as e:
|
with pytest.raises(HTTPException) as e:
|
||||||
mc.get_musicians()
|
mc.get_musicians()
|
||||||
mock_queries.select_all_series = mock_select_all_series
|
mock_queries.select_all = mock_select_all_series
|
||||||
assert isinstance(e.value, HTTPException)
|
assert isinstance(e.value, HTTPException)
|
||||||
assert e.value.status_code == status.HTTP_500_INTERNAL_SERVER_ERROR
|
assert e.value.status_code == status.HTTP_500_INTERNAL_SERVER_ERROR
|
||||||
|
|
||||||
|
|||||||
@@ -60,7 +60,7 @@ def test_type():
|
|||||||
|
|
||||||
def test_get_users():
|
def test_get_users():
|
||||||
"""Tests the retrieval of users from the database."""
|
"""Tests the retrieval of users from the database."""
|
||||||
mock_queries.select_all_series.return_value = valid_user_data
|
mock_queries.select_all.return_value = valid_user_data
|
||||||
users = uc.get_users()
|
users = uc.get_users()
|
||||||
assert isinstance(users, list)
|
assert isinstance(users, list)
|
||||||
assert len(users) == 2
|
assert len(users) == 2
|
||||||
@@ -85,7 +85,7 @@ def test_get_users():
|
|||||||
|
|
||||||
def test_get_users_sad():
|
def test_get_users_sad():
|
||||||
"""Tests the retrieval of users from the database with invalid data."""
|
"""Tests the retrieval of users from the database with invalid data."""
|
||||||
mock_queries.select_all_series.return_value = invalid_user_data
|
mock_queries.select_all.return_value = invalid_user_data
|
||||||
with pytest.raises(HTTPException) as e:
|
with pytest.raises(HTTPException) as e:
|
||||||
uc.get_users()
|
uc.get_users()
|
||||||
assert isinstance(e.value, HTTPException)
|
assert isinstance(e.value, HTTPException)
|
||||||
|
|||||||
Reference in New Issue
Block a user