|
@@ -16,8 +16,9 @@ from typing import Any, TypedDict, cast |
|
|
import mysql.connector |
|
|
import mysql.connector |
|
|
import requests |
|
|
import requests |
|
|
|
|
|
|
|
|
DbNull = (None,) |
|
|
|
|
|
DbNullType = tuple[None] |
|
|
|
|
|
|
|
|
# TODO: “何もしなぃ” を意味する None と区別可能にするため,NULL クラスを別途用意すること |
|
|
|
|
|
DbNull = None |
|
|
|
|
|
DbNullType = None |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
class VideoSearchParam (TypedDict): |
|
|
class VideoSearchParam (TypedDict): |
|
@@ -74,7 +75,8 @@ def main ( |
|
|
update_tables (video_dao, tag_dao, video_tag_dao, video_history_dao, comment_dao, user_dao, |
|
|
update_tables (video_dao, tag_dao, video_tag_dao, video_history_dao, comment_dao, user_dao, |
|
|
api_data, now) |
|
|
api_data, now) |
|
|
|
|
|
|
|
|
# TODO: 書くこと |
|
|
|
|
|
|
|
|
conn.commit () |
|
|
|
|
|
conn.close () |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
def update_tables ( |
|
|
def update_tables ( |
|
@@ -254,7 +256,7 @@ class VideoDao: |
|
|
video_id: int, |
|
|
video_id: int, |
|
|
with_relation_tables: bool, |
|
|
with_relation_tables: bool, |
|
|
) -> VideoDto | None: |
|
|
) -> VideoDto | None: |
|
|
with self.conn.cursor () as c: |
|
|
|
|
|
|
|
|
with self.conn.cursor (dictionary = True) as c: |
|
|
c.execute (""" |
|
|
c.execute (""" |
|
|
SELECT |
|
|
SELECT |
|
|
id, |
|
|
id, |
|
@@ -268,7 +270,7 @@ class VideoDao: |
|
|
WHERE |
|
|
WHERE |
|
|
id = %s |
|
|
id = %s |
|
|
ORDER BY |
|
|
ORDER BY |
|
|
id""", video_id) |
|
|
|
|
|
|
|
|
id""", (video_id,)) |
|
|
row = c.fetchone () |
|
|
row = c.fetchone () |
|
|
if row is None: |
|
|
if row is None: |
|
|
return None |
|
|
return None |
|
@@ -278,7 +280,7 @@ class VideoDao: |
|
|
self, |
|
|
self, |
|
|
with_relation_tables: bool, |
|
|
with_relation_tables: bool, |
|
|
) -> list[VideoDto]: |
|
|
) -> list[VideoDto]: |
|
|
with self.conn.cursor () as c: |
|
|
|
|
|
|
|
|
with self.conn.cursor (dictionary = True) as c: |
|
|
c.execute (""" |
|
|
c.execute (""" |
|
|
SELECT |
|
|
SELECT |
|
|
id, |
|
|
id, |
|
@@ -299,7 +301,7 @@ class VideoDao: |
|
|
def fetch_alive ( |
|
|
def fetch_alive ( |
|
|
self, |
|
|
self, |
|
|
) -> list[VideoDto]: |
|
|
) -> list[VideoDto]: |
|
|
with self.conn.cursor () as c: |
|
|
|
|
|
|
|
|
with self.conn.cursor (dictionary = True) as c: |
|
|
c.execute (""" |
|
|
c.execute (""" |
|
|
SELECT |
|
|
SELECT |
|
|
id, |
|
|
id, |
|
@@ -322,7 +324,7 @@ class VideoDao: |
|
|
video: VideoDto, |
|
|
video: VideoDto, |
|
|
with_relation_tables: bool, |
|
|
with_relation_tables: bool, |
|
|
) -> None: |
|
|
) -> None: |
|
|
with self.conn.cursor () as c: |
|
|
|
|
|
|
|
|
with self.conn.cursor (dictionary = True) as c: |
|
|
c.execute (""" |
|
|
c.execute (""" |
|
|
INSERT INTO |
|
|
INSERT INTO |
|
|
videos( |
|
|
videos( |
|
@@ -370,14 +372,16 @@ class VideoDao: |
|
|
video_ids: list[int], |
|
|
video_ids: list[int], |
|
|
at: datetime, |
|
|
at: datetime, |
|
|
) -> None: |
|
|
) -> None: |
|
|
with self.conn.cursor () as c: |
|
|
|
|
|
|
|
|
if not video_ids: |
|
|
|
|
|
return |
|
|
|
|
|
with self.conn.cursor (dictionary = True) as c: |
|
|
c.execute (""" |
|
|
c.execute (""" |
|
|
UPDATE |
|
|
UPDATE |
|
|
videos |
|
|
videos |
|
|
SET |
|
|
SET |
|
|
deleted_at = %s |
|
|
|
|
|
|
|
|
deleted_at = %%s |
|
|
WHERE |
|
|
WHERE |
|
|
id IN (%s)""", (at, (*video_ids,))) |
|
|
|
|
|
|
|
|
id IN (%s)""" % ', '.join (['%s'] * len (video_ids)), (at, *video_ids)) |
|
|
|
|
|
|
|
|
def _create_dto_from_row ( |
|
|
def _create_dto_from_row ( |
|
|
self, |
|
|
self, |
|
@@ -428,7 +432,7 @@ class VideoTagDao: |
|
|
video_id: int, |
|
|
video_id: int, |
|
|
with_relation_tables: bool, |
|
|
with_relation_tables: bool, |
|
|
) -> list[VideoTagDto]: |
|
|
) -> list[VideoTagDto]: |
|
|
with self.conn.cursor () as c: |
|
|
|
|
|
|
|
|
with self.conn.cursor (dictionary = True) as c: |
|
|
c.execute (""" |
|
|
c.execute (""" |
|
|
SELECT |
|
|
SELECT |
|
|
id, |
|
|
id, |
|
@@ -441,7 +445,7 @@ class VideoTagDao: |
|
|
WHERE |
|
|
WHERE |
|
|
video_id = %s |
|
|
video_id = %s |
|
|
ORDER BY |
|
|
ORDER BY |
|
|
id""", video_id) |
|
|
|
|
|
|
|
|
id""", (video_id,)) |
|
|
video_tags: list[VideoTagDto] = [] |
|
|
video_tags: list[VideoTagDto] = [] |
|
|
for row in c.fetchall (): |
|
|
for row in c.fetchall (): |
|
|
video_tags.append (self._create_dto_from_row (row, with_relation_tables)) |
|
|
video_tags.append (self._create_dto_from_row (row, with_relation_tables)) |
|
@@ -452,7 +456,7 @@ class VideoTagDao: |
|
|
video_id: int, |
|
|
video_id: int, |
|
|
with_relation_tables: bool, |
|
|
with_relation_tables: bool, |
|
|
) -> list[VideoTagDto]: |
|
|
) -> list[VideoTagDto]: |
|
|
with self.conn.cursor () as c: |
|
|
|
|
|
|
|
|
with self.conn.cursor (dictionary = True) as c: |
|
|
c.execute (""" |
|
|
c.execute (""" |
|
|
SELECT |
|
|
SELECT |
|
|
id, |
|
|
id, |
|
@@ -466,7 +470,7 @@ class VideoTagDao: |
|
|
video_id = %s |
|
|
video_id = %s |
|
|
AND (untagged_at IS NULL) |
|
|
AND (untagged_at IS NULL) |
|
|
ORDER BY |
|
|
ORDER BY |
|
|
id""", video_id) |
|
|
|
|
|
|
|
|
id""", (video_id,)) |
|
|
video_tags: list[VideoTagDto] = [] |
|
|
video_tags: list[VideoTagDto] = [] |
|
|
for row in c.fetchall (): |
|
|
for row in c.fetchall (): |
|
|
video_tags.append (self._create_dto_from_row (row, with_relation_tables)) |
|
|
video_tags.append (self._create_dto_from_row (row, with_relation_tables)) |
|
@@ -478,7 +482,7 @@ class VideoTagDao: |
|
|
tag_id: int, |
|
|
tag_id: int, |
|
|
with_relation_tables: bool, |
|
|
with_relation_tables: bool, |
|
|
) -> VideoTagDto | None: |
|
|
) -> VideoTagDto | None: |
|
|
with self.conn.cursor () as c: |
|
|
|
|
|
|
|
|
with self.conn.cursor (dictionary = True) as c: |
|
|
c.execute (""" |
|
|
c.execute (""" |
|
|
SELECT |
|
|
SELECT |
|
|
id, |
|
|
id, |
|
@@ -501,7 +505,7 @@ class VideoTagDao: |
|
|
video_tag: VideoTagDto, |
|
|
video_tag: VideoTagDto, |
|
|
with_relation_tables: bool, |
|
|
with_relation_tables: bool, |
|
|
) -> None: |
|
|
) -> None: |
|
|
with self.conn.cursor () as c: |
|
|
|
|
|
|
|
|
with self.conn.cursor (dictionary = True) as c: |
|
|
c.execute (""" |
|
|
c.execute (""" |
|
|
INSERT INTO |
|
|
INSERT INTO |
|
|
video_tags( |
|
|
video_tags( |
|
@@ -528,7 +532,7 @@ class VideoTagDao: |
|
|
video_tag: VideoTagDto, |
|
|
video_tag: VideoTagDto, |
|
|
with_relation_tables: bool, |
|
|
with_relation_tables: bool, |
|
|
) -> None: |
|
|
) -> None: |
|
|
with self.conn.cursor () as c: |
|
|
|
|
|
|
|
|
with self.conn.cursor (dictionary = True) as c: |
|
|
c.execute (""" |
|
|
c.execute (""" |
|
|
INSERT INTO |
|
|
INSERT INTO |
|
|
video_tags( |
|
|
video_tags( |
|
@@ -571,15 +575,17 @@ class VideoTagDao: |
|
|
tag_ids: list[int], |
|
|
tag_ids: list[int], |
|
|
now: datetime |
|
|
now: datetime |
|
|
) -> None: |
|
|
) -> None: |
|
|
with self.conn.cursor () as c: |
|
|
|
|
|
|
|
|
if not tag_ids: |
|
|
|
|
|
return |
|
|
|
|
|
with self.conn.cursor (dictionary = True) as c: |
|
|
c.execute (""" |
|
|
c.execute (""" |
|
|
UPDATE |
|
|
UPDATE |
|
|
video_tags |
|
|
video_tags |
|
|
SET |
|
|
SET |
|
|
untagged_at = %s |
|
|
|
|
|
|
|
|
untagged_at = %%s |
|
|
WHERE |
|
|
WHERE |
|
|
video_id = %s |
|
|
|
|
|
AND tag_ids IN (%s)""", (now, video_id, (*tag_ids,))) |
|
|
|
|
|
|
|
|
video_id = %%s |
|
|
|
|
|
AND tag_ids IN (%s)""" % ', '.join (['%s'] * len (tag_ids)), (now, video_id, *tag_ids)) |
|
|
|
|
|
|
|
|
def _create_dto_from_row ( |
|
|
def _create_dto_from_row ( |
|
|
self, |
|
|
self, |
|
@@ -619,15 +625,15 @@ class TagDao: |
|
|
self, |
|
|
self, |
|
|
tag_id: int, |
|
|
tag_id: int, |
|
|
) -> TagDto | None: |
|
|
) -> TagDto | None: |
|
|
with self.conn.cursor () as c: |
|
|
|
|
|
|
|
|
with self.conn.cursor (dictionary = True) as c: |
|
|
c.execute (""" |
|
|
c.execute (""" |
|
|
SELECT |
|
|
SELECT |
|
|
id, |
|
|
id, |
|
|
name) |
|
|
|
|
|
|
|
|
name |
|
|
FROM |
|
|
FROM |
|
|
tags |
|
|
tags |
|
|
WHERE |
|
|
WHERE |
|
|
id = %s""", tag_id) |
|
|
|
|
|
|
|
|
id = %s""", (tag_id,)) |
|
|
row = c.fetchone () |
|
|
row = c.fetchone () |
|
|
if row is None: |
|
|
if row is None: |
|
|
return None |
|
|
return None |
|
@@ -637,7 +643,7 @@ class TagDao: |
|
|
self, |
|
|
self, |
|
|
tag_name: str, |
|
|
tag_name: str, |
|
|
) -> TagDto | None: |
|
|
) -> TagDto | None: |
|
|
with self.conn.cursor () as c: |
|
|
|
|
|
|
|
|
with self.conn.cursor (dictionary = True) as c: |
|
|
c.execute (""" |
|
|
c.execute (""" |
|
|
SELECT |
|
|
SELECT |
|
|
id, |
|
|
id, |
|
@@ -645,7 +651,7 @@ class TagDao: |
|
|
FROM |
|
|
FROM |
|
|
tags |
|
|
tags |
|
|
WHERE |
|
|
WHERE |
|
|
name = %s""", tag_name) |
|
|
|
|
|
|
|
|
name = %s""", (tag_name,)) |
|
|
row = c.fetchone () |
|
|
row = c.fetchone () |
|
|
if row is None: |
|
|
if row is None: |
|
|
return None |
|
|
return None |
|
@@ -655,26 +661,26 @@ class TagDao: |
|
|
self, |
|
|
self, |
|
|
tag: TagDto, |
|
|
tag: TagDto, |
|
|
) -> None: |
|
|
) -> None: |
|
|
with self.conn.cursor () as c: |
|
|
|
|
|
|
|
|
with self.conn.cursor (dictionary = True) as c: |
|
|
c.execute (""" |
|
|
c.execute (""" |
|
|
INSERT INTO |
|
|
INSERT INTO |
|
|
tags(name) |
|
|
tags(name) |
|
|
VALUES |
|
|
VALUES |
|
|
(%s)""", tag.name) |
|
|
|
|
|
|
|
|
(%s)""", (tag.name,)) |
|
|
tag.id_ = c.lastrowid |
|
|
tag.id_ = c.lastrowid |
|
|
|
|
|
|
|
|
def upsert ( |
|
|
def upsert ( |
|
|
self, |
|
|
self, |
|
|
tag: TagDto, |
|
|
tag: TagDto, |
|
|
) -> None: |
|
|
) -> None: |
|
|
with self.conn.cursor () as c: |
|
|
|
|
|
|
|
|
with self.conn.cursor (dictionary = True) as c: |
|
|
c.execute (""" |
|
|
c.execute (""" |
|
|
INSERT INTO |
|
|
INSERT INTO |
|
|
tags(name) |
|
|
tags(name) |
|
|
VALUES |
|
|
VALUES |
|
|
(%s) |
|
|
(%s) |
|
|
ON DUPLICATE KEY UPDATE |
|
|
ON DUPLICATE KEY UPDATE |
|
|
name = VALUES(name)""", tag.name) |
|
|
|
|
|
|
|
|
name = VALUES(name)""", (tag.name,)) |
|
|
tag.id_ = c.lastrowid |
|
|
tag.id_ = c.lastrowid |
|
|
|
|
|
|
|
|
def _create_dto_from_row ( |
|
|
def _create_dto_from_row ( |
|
@@ -703,7 +709,7 @@ class VideoHistoryDao: |
|
|
video_id: int, |
|
|
video_id: int, |
|
|
with_relation_tables: bool, |
|
|
with_relation_tables: bool, |
|
|
) -> list[VideoHistoryDto]: |
|
|
) -> list[VideoHistoryDto]: |
|
|
with self.conn.cursor () as c: |
|
|
|
|
|
|
|
|
with self.conn.cursor (dictionary = True) as c: |
|
|
c.execute (""" |
|
|
c.execute (""" |
|
|
SELECT |
|
|
SELECT |
|
|
id, |
|
|
id, |
|
@@ -713,7 +719,7 @@ class VideoHistoryDao: |
|
|
FROM |
|
|
FROM |
|
|
video_histories |
|
|
video_histories |
|
|
WHERE |
|
|
WHERE |
|
|
video_id = %s""", video_id) |
|
|
|
|
|
|
|
|
video_id = %s""", (video_id,)) |
|
|
video_histories: list[VideoHistoryDto] = [] |
|
|
video_histories: list[VideoHistoryDto] = [] |
|
|
for row in c.fetchall (): |
|
|
for row in c.fetchall (): |
|
|
video_histories.append (self._create_dto_from_row (row, with_relation_tables)) |
|
|
video_histories.append (self._create_dto_from_row (row, with_relation_tables)) |
|
@@ -723,7 +729,7 @@ class VideoHistoryDao: |
|
|
self, |
|
|
self, |
|
|
video_history: VideoHistoryDto, |
|
|
video_history: VideoHistoryDto, |
|
|
) -> None: |
|
|
) -> None: |
|
|
with self.conn.cursor () as c: |
|
|
|
|
|
|
|
|
with self.conn.cursor (dictionary = True) as c: |
|
|
c.execute (""" |
|
|
c.execute (""" |
|
|
INSERT INTO |
|
|
INSERT INTO |
|
|
video_histories( |
|
|
video_histories( |
|
@@ -742,7 +748,7 @@ class VideoHistoryDao: |
|
|
self, |
|
|
self, |
|
|
video_history: VideoHistoryDto, |
|
|
video_history: VideoHistoryDto, |
|
|
) -> None: |
|
|
) -> None: |
|
|
with self.conn.cursor () as c: |
|
|
|
|
|
|
|
|
with self.conn.cursor (dictionary = True) as c: |
|
|
c.execute (""" |
|
|
c.execute (""" |
|
|
INSERT INTO |
|
|
INSERT INTO |
|
|
video_histories( |
|
|
video_histories( |
|
@@ -803,7 +809,7 @@ class CommentDao: |
|
|
video_id: int, |
|
|
video_id: int, |
|
|
with_relation_tables: bool, |
|
|
with_relation_tables: bool, |
|
|
) -> list[CommentDto]: |
|
|
) -> list[CommentDto]: |
|
|
with self.conn.cursor () as c: |
|
|
|
|
|
|
|
|
with self.conn.cursor (dictionary = True) as c: |
|
|
c.execute (""" |
|
|
c.execute (""" |
|
|
SELECT |
|
|
SELECT |
|
|
id, |
|
|
id, |
|
@@ -817,7 +823,7 @@ class CommentDao: |
|
|
FROM |
|
|
FROM |
|
|
comments |
|
|
comments |
|
|
WHERE |
|
|
WHERE |
|
|
video_id = %s""", video_id) |
|
|
|
|
|
|
|
|
video_id = %s""", (video_id,)) |
|
|
comments: list[CommentDto] = [] |
|
|
comments: list[CommentDto] = [] |
|
|
for row in c.fetchall (): |
|
|
for row in c.fetchall (): |
|
|
comments.append (self._create_dto_from_row (row, with_relation_tables)) |
|
|
comments.append (self._create_dto_from_row (row, with_relation_tables)) |
|
@@ -828,7 +834,7 @@ class CommentDao: |
|
|
comment: CommentDto, |
|
|
comment: CommentDto, |
|
|
with_relation_tables: bool, |
|
|
with_relation_tables: bool, |
|
|
) -> None: |
|
|
) -> None: |
|
|
with self.conn.cursor () as c: |
|
|
|
|
|
|
|
|
with self.conn.cursor (dictionary = True) as c: |
|
|
c.execute (""" |
|
|
c.execute (""" |
|
|
INSERT INTO |
|
|
INSERT INTO |
|
|
comments( |
|
|
comments( |
|
@@ -914,7 +920,7 @@ class UserDao: |
|
|
self, |
|
|
self, |
|
|
user_code: str |
|
|
user_code: str |
|
|
) -> UserDto | None: |
|
|
) -> UserDto | None: |
|
|
with self.conn.cursor () as c: |
|
|
|
|
|
|
|
|
with self.conn.cursor (dictionary = True) as c: |
|
|
c.execute (""" |
|
|
c.execute (""" |
|
|
SELECT |
|
|
SELECT |
|
|
id, |
|
|
id, |
|
@@ -922,7 +928,7 @@ class UserDao: |
|
|
FROM |
|
|
FROM |
|
|
users |
|
|
users |
|
|
WHERE |
|
|
WHERE |
|
|
code = %s""", user_code) |
|
|
|
|
|
|
|
|
code = %s""", (user_code,)) |
|
|
row = c.fetchone () |
|
|
row = c.fetchone () |
|
|
if row is None: |
|
|
if row is None: |
|
|
return None |
|
|
return None |
|
@@ -932,12 +938,12 @@ class UserDao: |
|
|
self, |
|
|
self, |
|
|
user: UserDto, |
|
|
user: UserDto, |
|
|
) -> None: |
|
|
) -> None: |
|
|
with self.conn.cursor () as c: |
|
|
|
|
|
|
|
|
with self.conn.cursor (dictionary = True) as c: |
|
|
c.execute (""" |
|
|
c.execute (""" |
|
|
INSERT INTO |
|
|
INSERT INTO |
|
|
users(code) |
|
|
users(code) |
|
|
VALUES |
|
|
VALUES |
|
|
(%s)""", user.code) |
|
|
|
|
|
|
|
|
(%s)""", (user.code,)) |
|
|
user.id_ = c.lastrowid |
|
|
user.id_ = c.lastrowid |
|
|
|
|
|
|
|
|
def _create_dto_from_row ( |
|
|
def _create_dto_from_row ( |
|
|