Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
104 changes: 84 additions & 20 deletions backend/app/crud/isl_verse_markers_crud.py
Original file line number Diff line number Diff line change
@@ -1,4 +1,6 @@
"""CRUD operations for the ISL verse markers API."""
import json
from pathlib import Path
from typing import List, Dict, Any
from sqlalchemy.orm import Session
from sqlalchemy.exc import SQLAlchemyError
Expand All @@ -7,9 +9,38 @@
from dependencies import logger


VERSIFICATION_PATH = (Path("data/versification.json").resolve())

with open(VERSIFICATION_PATH, "r", encoding="utf-8") as file:
VERSIFICATION = json.load(file)

def _ensure_verse_zero(markers):
if not any(str(m["verse"]) == "0" for m in markers):
markers.insert(0, {"verse": 0, "time": "00:00:00:00"})
"""
Ensure intro verse marker exists unless
first verse already starts at 00:00:00:00
"""

if not markers:
return markers

has_verse_zero = any(
str(marker["verse"]) == "0"
for marker in markers
)

first_marker_starts_at_zero = (
markers[0]["time"] == "00:00:00:00"
)

if not has_verse_zero and not first_marker_starts_at_zero:
markers.insert(
0,
{
"verse": 0,
"time": "00:00:00:00"
}
)

return markers


Expand Down Expand Up @@ -117,44 +148,77 @@ def _timestamp_to_frames(timestamp: str) -> int:
hours, minutes, seconds, frames = map(int, timestamp.split(":"))
return (((hours * 60) + minutes) * 60 + seconds) * 100 + frames

def _validate_marker_verses(db_session, isl_bible, markers):
def _validate_marker_verses(db_session: Session,isl_video, markers):
"""
Validate verses exist for given book/chapter.
Validate verses using versification json.
"""

book_id = isl_bible.book_id
chapter = isl_bible.chapter
chapter = isl_video.chapter

# Allow intro chapter
if chapter == 0:
return
valid_verses = {
int(row.verse)
for row in db_session.query(db_models.CleanBible).filter_by(
book_id=book_id,
chapter=chapter
).all()
}

book = (db_session.query(db_models.BookLookup)
.filter_by(book_id=isl_video.book_id)
.first())

if not book:
raise UnprocessableException(
detail="Book lookup not found"
)

book_code = book.book_code.upper()

if not book_code:
raise UnprocessableException(
detail="Unable to determine book code"
)

max_verses_data = (
VERSIFICATION["maxVerses"]
.get(book_code.upper())
)

if not max_verses_data:
raise UnprocessableException(
detail=f"No versification data for {book_code}"
)

if chapter > len(max_verses_data):
raise UnprocessableException(
detail=f"Invalid chapter {chapter}"
)

max_verse = int(max_verses_data[chapter - 1])

for marker in markers:
verse = marker["verse"]

# intro marker
# allow intro marker
if verse == 0:
continue

if isinstance(verse, str) and "_" in verse:

start, end = map(int, verse.split("_"))

for verse_number in range(start, end + 1):
if verse_number not in valid_verses:
raise UnprocessableException(
detail=f"Invalid verse {verse_number} for chapter {chapter}"
if start > max_verse or end > max_verse:
raise UnprocessableException(
detail=(
f"Invalid verse range "
f"{verse} for chapter {chapter}"
)
)

else:
if int(verse) not in valid_verses:

if int(verse) > max_verse:
raise UnprocessableException(
detail=f"Invalid verse {verse} for chapter {chapter}"
detail=(
f"Invalid verse {verse} "
f"for chapter {chapter}"
)
)

def _validate_timestamp_order(markers):
Expand Down
1 change: 1 addition & 0 deletions backend/app/data/versification.json
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
{"maxVerses":{"GEN":["31","25","24","26","32","22","24","22","29","32","32","20","18","24","21","16","27","33","38","18","34","24","20","67","34","35","46","22","35","43","55","32","20","31","29","43","36","30","23","23","57","38","34","34","28","34","31","22","33","26"],"EXO":["22","25","22","31","23","30","25","32","35","29","10","51","22","31","27","36","16","27","25","26","36","31","33","18","40","37","21","43","46","38","18","35","23","35","35","38","29","31","43","38"],"LEV":["17","16","17","35","19","30","38","36","24","20","47","8","59","57","33","34","16","30","37","27","24","33","44","23","55","46","34"],"NUM":["54","34","51","49","31","27","89","26","23","36","35","16","33","45","41","50","13","32","22","29","35","41","30","25","18","65","23","31","40","16","54","42","56","29","34","13"],"DEU":["46","37","29","49","33","25","26","20","29","22","32","32","18","29","23","22","20","22","21","20","23","30","25","22","19","19","26","68","29","20","30","52","29","12"],"JOS":["18","24","17","24","15","27","26","35","27","43","23","24","33","15","63","10","18","28","51","9","45","34","16","33"],"JDG":["36","23","31","24","31","40","25","35","57","18","40","15","25","20","20","31","13","31","30","48","25"],"RUT":["22","23","18","22"],"1SA":["28","36","21","22","12","21","17","22","27","27","15","25","23","52","35","23","58","30","24","42","15","23","29","22","44","25","12","25","11","31","13"],"2SA":["27","32","39","12","25","23","29","18","13","19","27","31","39","33","37","23","29","33","43","26","22","51","39","25"],"1KI":["53","46","28","34","18","38","51","66","28","29","43","33","34","31","34","34","24","46","21","43","29","53"],"2KI":["18","25","27","44","27","33","20","29","37","36","21","21","25","29","38","20","41","37","37","21","26","20","37","20","30"],"1CH":["54","55","24","43","26","81","40","40","44","14","47","40","14","17","29","43","27","17","19","8","30","19","32","31","31","32","34","21","30"],"2CH":["17","18","17","22","14","42","22","18","31","19","23","16","22","15","19","14","19","34","11","37","20","12","21","27","28","23","9","27","36","27","21","33","25","33","27","23"],"EZR":["11","70","13","24","17","22","28","36","15","44"],"NEH":["11","20","32","23","19","19","73","18","38","39","36","47","31"],"EST":["22","23","15","17","14","14","10","17","32","3"],"JOB":["22","13","26","21","27","30","21","22","35","22","20","25","28","22","35","22","16","21","29","29","34","30","17","25","6","14","23","28","25","31","40","22","33","37","16","33","24","41","30","24","34","17"],"PSA":["6","12","8","8","12","10","17","9","20","18","7","8","6","7","5","11","15","50","14","9","13","31","6","10","22","12","14","9","11","12","24","11","22","22","28","12","40","22","13","17","13","11","5","26","17","11","9","14","20","23","19","9","6","7","23","13","11","11","17","12","8","12","11","10","13","20","7","35","36","5","24","20","28","23","10","12","20","72","13","19","16","8","18","12","13","17","7","18","52","17","16","15","5","23","11","13","12","9","9","5","8","28","22","35","45","48","43","13","31","7","10","10","9","8","18","19","2","29","176","7","8","9","4","8","5","6","5","6","8","8","3","18","3","3","21","26","9","8","24","13","10","7","12","15","21","10","20","14","9","6"],"PRO":["33","22","35","27","23","35","27","36","18","32","31","28","25","35","33","33","28","24","29","30","31","29","35","34","28","28","27","28","27","33","31"],"ECC":["18","26","22","16","20","12","29","17","18","20","10","14"],"SNG":["17","17","11","16","16","13","13","14"],"ISA":["31","22","26","6","30","13","25","22","21","34","16","6","22","32","9","14","14","7","25","6","17","25","18","23","12","21","13","29","24","33","9","20","24","17","10","22","38","22","8","31","29","25","28","28","25","13","15","22","26","11","23","15","12","17","13","12","21","14","21","22","11","12","19","12","25","24"],"JER":["19","37","25","31","31","30","34","22","26","25","23","17","27","22","21","21","27","23","15","18","14","30","40","10","38","24","22","17","32","24","40","44","26","22","19","32","21","28","18","16","18","22","13","30","5","28","7","47","39","46","64","34"],"LAM":["22","22","66","22","22"],"EZK":["28","10","27","17","17","14","27","18","11","22","25","28","23","23","8","63","24","32","14","49","32","31","49","27","17","21","36","26","21","26","18","32","33","31","15","38","28","23","29","49","26","20","27","31","25","24","23","35"],"DAN":["21","49","30","37","31","28","28","27","27","21","45","13"],"HOS":["11","23","5","19","15","11","16","14","17","15","12","14","16","9"],"JOL":["20","32","21"],"AMO":["15","16","15","13","27","14","17","14","15"],"OBA":["21"],"JON":["17","10","10","11"],"MIC":["16","13","12","13","15","16","20"],"NAM":["15","13","19"],"HAB":["17","20","19"],"ZEP":["18","15","20"],"HAG":["15","23"],"ZEC":["21","13","10","14","11","15","14","23","17","12","17","14","9","21"],"MAL":["14","17","18","6"],"MAT":["25","23","17","25","48","34","29","34","38","42","30","50","58","36","39","28","27","35","30","34","46","46","39","51","46","75","66","20"],"MRK":["45","28","35","41","43","56","37","38","50","52","33","44","37","72","47","20"],"LUK":["80","52","38","44","39","49","50","56","62","42","54","59","35","35","32","31","37","43","48","47","38","71","56","53"],"JHN":["51","25","36","54","47","71","53","59","41","42","57","50","38","31","27","33","26","40","42","31","25"],"ACT":["26","47","26","37","42","15","60","40","43","48","30","25","52","28","41","40","34","28","41","38","40","30","35","27","27","32","44","31"],"ROM":["32","29","31","25","21","23","25","39","33","21","36","21","14","23","33","27"],"1CO":["31","16","23","21","13","20","40","13","27","33","34","31","13","40","58","24"],"2CO":["24","17","18","18","21","18","16","24","15","18","33","21","14"],"GAL":["24","21","29","31","26","18"],"EPH":["23","22","21","32","33","24"],"PHP":["30","30","21","23"],"COL":["29","23","25","18"],"1TH":["10","20","13","18","28"],"2TH":["12","17","18"],"1TI":["20","15","16","16","25","21"],"2TI":["18","26","17","22"],"TIT":["16","15","15"],"PHM":["25"],"HEB":["14","18","19","16","14","20","28","13","28","39","40","29","25"],"JAS":["27","26","18","17","20"],"1PE":["25","25","22","19","14"],"2PE":["21","22","18"],"1JN":["10","29","24","21","21"],"2JN":["13"],"3JN":["15"],"JUD":["25"],"REV":["20","29","22","11","14","17","17","13","21","11","19","18","18","20","8","21","18","24","21","15","27","21"],"TOB":["22","14","17","21","21","17","18","21","6","13","19","22","18","15"],"JDT":["16","28","10","15","24","21","32","36","14","23","23","20","20","19","13","25"],"ESG":["39","23","22","47","28","14","10","39","32","13"],"WIS":["16","24","19","20","23","25","30","21","18","21","26","27","19","31","19","29","21","25","22"],"SIR":["30","18","31","31","15","37","36","19","18","31","34","18","26","27","20","30","32","33","30","32","28","27","27","34","26","29","30","26","28","25","31","24","31","26","20","26","31","34","35","30","23","25","33","23","26","20","25","25","16","29","30"],"BAR":["21","35","37","37","9","73"],"LJE":["73"],"S3Y":["68"],"SUS":["64"],"BEL":["42"],"1MA":["64","70","60","61","68","63","50","32","73","89","74","53","53","49","41","24"],"2MA":["36","32","40","50","27","31","42","36","29","38","38","45","26","46","39"],"3MA":["29","33","30","21","51","41","23"],"4MA":["35","24","21","26","38","35","23","29","32","21","27","19","27","20","32","25","24","24"],"1ES":["58","30","24","63","73","34","15","96","55"],"2ES":["40","48","36","52","56","59","140","63","47","59","46","51","58","48","63","78"],"MAN":["15"],"PS2":["7"],"JSA":["18","24","17","24","15","27","26","35","27","43","23","24","33","15","63","10","18","28","51","9","45","34","16","33"],"JDB":["36","23","31","24","31","40","25","35","57","18","40","15","25","20","20","31","13","31","30","48","25"],"TBS":["22","14","17","21","23","19","17","21","6","14","19","22","18","15"],"SST":["64"],"DNT":["21","49","97","37","30","29","28","27","27","21","45","13"],"BLT":["42"],"DAG":["21","49","97","37","31","28","28","27","27","21","45","13","64","42"],"LAO":["20"]},"mappedVerses":{"GEN 31:55":"GEN 32:1","GEN 32:1-32":"GEN 32:2-33","EXO 8:1-4":"EXO 7:26-29","EXO 8:5-32":"EXO 8:1-28","EXO 22:1":"EXO 21:37","EXO 22:2-31":"EXO 22:1-30","LEV 6:1-7":"LEV 5:20-26","LEV 6:8-30":"LEV 6:1-23","NUM 16:36-50":"NUM 17:1-15","NUM 17:1-13":"NUM 17:16-28","NUM 29:40":"NUM 30:1","NUM 30:1-16":"NUM 30:2-17","DEU 12:32":"DEU 13:1","DEU 13:1-18":"DEU 13:2-19","DEU 22:30":"DEU 23:1","DEU 23:1-25":"DEU 23:2-26","DEU 29:1":"DEU 28:69","DEU 29:2-29":"DEU 29:1-28","1SA 20:42":"1SA 21:1","1SA 21:1-15":"1SA 21:2-16","1SA 23:29":"1SA 24:1","1SA 24:1-22":"1SA 24:2-23","2SA 18:33":"2SA 19:1","2SA 19:1-43":"2SA 19:2-44","1KI 4:21-34":"1KI 5:1-14","1KI 5:1-18":"1KI 5:15-32","1KI 22:43-53":"1KI 22:44-54","2KI 11:21":"2KI 12:1","2KI 12:1-21":"2KI 12:2-22","1CH 6:1-15":"1CH 5:27-41","1CH 6:16-81":"1CH 6:1-66","1CH 12:4-40":"1CH 12:5-41","2CH 2:1":"2CH 1:18","2CH 2:2-18":"2CH 2:1-17","2CH 14:1":"2CH 13:23","2CH 14:2-15":"2CH 14:1-14","NEH 4:1-6":"NEH 3:33-38","NEH 4:7-23":"NEH 4:1-17","NEH 7:69-73":"NEH 7:68-72","NEH 9:38":"NEH 10:1","NEH 10:1-39":"NEH 10:2-40","JOB 41:1-8":"JOB 40:25-32","JOB 41:9-34":"JOB 41:1-26","PSA 3:0-8":"PSA 3:1-9","PSA 4:0-8":"PSA 4:1-9","PSA 5:0-12":"PSA 5:1-13","PSA 6:0-10":"PSA 6:1-11","PSA 7:0-17":"PSA 7:1-18","PSA 8:0-9":"PSA 8:1-10","PSA 9:0-20":"PSA 9:1-21","PSA 12:0-8":"PSA 12:1-9","PSA 13:0-5":"PSA 13:1-6","PSA 18:0-50":"PSA 18:1-51","PSA 19:0-14":"PSA 19:1-15","PSA 20:0-9":"PSA 20:1-10","PSA 21:0-13":"PSA 21:1-14","PSA 22:0-31":"PSA 22:1-32","PSA 30:0-12":"PSA 30:1-13","PSA 31:0-24":"PSA 31:1-25","PSA 34:0-22":"PSA 34:1-23","PSA 36:0-12":"PSA 36:1-13","PSA 38:0-22":"PSA 38:1-23","PSA 39:0-13":"PSA 39:1-14","PSA 40:0-17":"PSA 40:1-18","PSA 41:0-13":"PSA 41:1-14","PSA 42:0-11":"PSA 42:1-12","PSA 44:0-26":"PSA 44:1-27","PSA 45:0-17":"PSA 45:1-18","PSA 46:0-11":"PSA 46:1-12","PSA 47:0-9":"PSA 47:1-10","PSA 48:0-14":"PSA 48:1-15","PSA 49:0-20":"PSA 49:1-21","PSA 51:0":"PSA 51:2","PSA 51:1-19":"PSA 51:3-21","PSA 52:0":"PSA 52:2","PSA 52:1-9":"PSA 52:3-11","PSA 53:0-6":"PSA 53:1-7","PSA 54:0":"PSA 54:2","PSA 54:1-7":"PSA 54:3-9","PSA 55:0-23":"PSA 55:1-24","PSA 56:0-13":"PSA 56:1-14","PSA 57:0-11":"PSA 57:1-12","PSA 58:0-11":"PSA 58:1-12","PSA 59:0-17":"PSA 59:1-18","PSA 60:0":"PSA 60:2","PSA 60:1-12":"PSA 60:3-14","PSA 61:0-8":"PSA 61:1-9","PSA 62:0-12":"PSA 62:1-13","PSA 63:0-11":"PSA 63:1-12","PSA 64:0-10":"PSA 64:1-11","PSA 65:0-13":"PSA 65:1-14","PSA 67:0-7":"PSA 67:1-8","PSA 68:0-35":"PSA 68:1-36","PSA 69:0-36":"PSA 69:1-37","PSA 70:0-5":"PSA 70:1-6","PSA 75:0-10":"PSA 75:1-11","PSA 76:0-12":"PSA 76:1-13","PSA 77:0-20":"PSA 77:1-21","PSA 80:0-19":"PSA 80:1-20","PSA 81:0-16":"PSA 81:1-17","PSA 83:0-18":"PSA 83:1-19","PSA 84:0-12":"PSA 84:1-13","PSA 85:0-13":"PSA 85:1-14","PSA 88:0-18":"PSA 88:1-19","PSA 89:0-52":"PSA 89:1-53","PSA 92:0-15":"PSA 92:1-16","PSA 102:0-28":"PSA 102:1-29","PSA 108:0-13":"PSA 108:1-14","PSA 140:0-13":"PSA 140:1-14","PSA 142:0-7":"PSA 142:1-8","ECC 5:1":"ECC 4:17","ECC 5:2-20":"ECC 5:1-19","SNG 6:13":"SNG 7:1","SNG 7:1-13":"SNG 7:2-14","ISA 9:1":"ISA 8:23","ISA 9:2-21":"ISA 9:1-20","ISA 64:2-12":"ISA 64:1-11","JER 9:1":"JER 8:23","JER 9:2-26":"JER 9:1-25","EZK 20:45-46":"EZK 21:1-2","EZK 20:47":"EZK 21:3","EZK 20:48-49":"EZK 21:4-5","EZK 21:1-32":"EZK 21:6-37","DAN 4:1-3":"DAN 3:31-33","DAN 4:4-37":"DAN 4:1-34","DAN 5:31":"DAN 6:1","DAN 6:1-28":"DAN 6:2-29","HOS 1:10-11":"HOS 2:1-2","HOS 2:1-23":"HOS 2:3-25","HOS 11:12":"HOS 12:1","HOS 12:1-14":"HOS 12:2-15","HOS 13:16":"HOS 14:1","HOS 14:1-9":"HOS 14:2-10","JOL 2:28-32":"JOL 3:1-5","JOL 3:1-21":"JOL 4:1-21","JON 1:17":"JON 2:1","JON 2:1-10":"JON 2:2-11","MIC 5:1":"MIC 4:14","MIC 5:2-15":"MIC 5:1-14","NAM 1:15":"NAM 2:1","NAM 2:1-13":"NAM 2:2-14","ZEC 1:18-21":"ZEC 2:1-4","ZEC 2:1-13":"ZEC 2:5-17","MAL 4:1-6":"MAL 3:19-24","BAR 6:1-73":"LJE 1:1-73","DAG 13:1-63":"SUS 1:1-63","DAG 14:1-42":"BEL 1:1-42","ESG 1:1":"ESG 1:1a","ESG 1:2":"ESG 1:1b","ESG 1:3":"ESG 1:1c","ESG 1:4":"ESG 1:1d","ESG 1:5":"ESG 1:1e","ESG 1:6":"ESG 1:1f","ESG 1:7":"ESG 1:1g","ESG 1:8":"ESG 1:1h","ESG 1:9":"ESG 1:1i","ESG 1:10":"ESG 1:1k","ESG 1:11":"ESG 1:1l","ESG 1:12":"ESG 1:1m","ESG 1:13":"ESG 1:1n","ESG 1:14":"ESG 1:1o","ESG 1:15":"ESG 1:1p","ESG 1:16":"ESG 1:1q","ESG 1:17":"ESG 1:1r","ESG 1:18":"ESG 1:1s","ESG 1:19-39":"ESG 1:2-22","ESG 3:14":"ESG 3:13a","ESG 3:15":"ESG 3:13b","ESG 3:16":"ESG 3:13c","ESG 3:17":"ESG 3:13d","ESG 3:18":"ESG 3:13e","ESG 3:19":"ESG 3:13f","ESG 3:20":"ESG 3:13g","ESG 3:21":"ESG 3:14","ESG 3:22":"ESG 3:15","ESG 4:18":"ESG 4:17a","ESG 4:19":"ESG 4:17b","ESG 4:20":"ESG 4:17c","ESG 4:21":"ESG 4:17c","ESG 4:22":"ESG 4:17d","ESG 4:23":"ESG 4:17d","ESG 4:24":"ESG 4:17e","ESG 4:25":"ESG 4:17f","ESG 4:26":"ESG 4:17g","ESG 4:27":"ESG 4:17h","ESG 4:28":"ESG 4:17i","ESG 4:29":"ESG 4:17k","ESG 4:30":"ESG 4:17k","ESG 4:31":"ESG 4:17k","ESG 4:32":"ESG 4:17l","ESG 4:33":"ESG 4:17m","ESG 4:34":"ESG 4:17n","ESG 4:35":"ESG 4:17n","ESG 4:36":"ESG 4:17o","ESG 4:37":"ESG 4:17o","ESG 4:38":"ESG 4:17p","ESG 4:39":"ESG 4:17q","ESG 4:40":"ESG 4:17r","ESG 4:41":"ESG 4:17s","ESG 4:42":"ESG 4:17t","ESG 4:43":"ESG 4:17u","ESG 4:44":"ESG 4:17w","ESG 4:45":"ESG 4:17x","ESG 4:46":"ESG 4:17y","ESG 4:47":"ESG 4:17z","ESG 5:2":"ESG 5:1a","ESG 5:3":"ESG 5:1a","ESG 5:4":"ESG 5:1a","ESG 5:5":"ESG 5:1b","ESG 5:6":"ESG 5:1c","ESG 5:7":"ESG 5:1d","ESG 5:8":"ESG 5:1e","ESG 5:9":"ESG 5:1f","ESG 5:10":"ESG 5:1f","ESG 5:11":"ESG 5:2","ESG 5:12":"ESG 5:2","ESG 5:13":"ESG 5:2a","ESG 5:14":"ESG 5:2a","ESG 5:15":"ESG 5:2b","ESG 5:16":"ESG 5:2b","ESG 5:17-28":"ESG 5:3-14","ESG 8:13":"ESG 8:12a","ESG 8:14":"ESG 8:12b","ESG 8:15":"ESG 8:12c","ESG 8:16":"ESG 8:12d","ESG 8:17":"ESG 8:12e","ESG 8:18":"ESG 8:12f","ESG 8:19":"ESG 8:12g","ESG 8:20":"ESG 8:12h","ESG 8:21":"ESG 8:12i","ESG 8:22":"ESG 8:12k","ESG 8:23":"ESG 8:12l","ESG 8:24":"ESG 8:12m","ESG 8:25":"ESG 8:12n","ESG 8:26":"ESG 8:12o","ESG 8:27":"ESG 8:12p","ESG 8:28":"ESG 8:12q","ESG 8:29":"ESG 8:12r","ESG 8:30":"ESG 8:12s","ESG 8:31":"ESG 8:12t","ESG 8:32":"ESG 8:12u","ESG 8:33":"ESG 8:12x","ESG 8:34":"ESG 8:12y","ESG 8:35":"ESG 8:12y","ESG 8:36":"ESG 8:12y","ESG 8:37-41":"ESG 8:13-17","ESG 10:4":"ESG 10:3a","ESG 10:5":"ESG 10:3b","ESG 10:6":"ESG 10:3c","ESG 10:7":"ESG 10:3d","ESG 10:8":"ESG 10:3e","ESG 10:9":"ESG 10:3f","ESG 10:10":"ESG 10:3g","ESG 10:11":"ESG 10:3h","ESG 10:12":"ESG 10:3i","ESG 10:13":"ESG 10:3k","ESG 10:14":"ESG 10:3l","S3Y 1:1-29":"DAG 3:24-52","S3Y 1:30-31":"DAG 3:52-53","S3Y 1:33":"DAG 3:54","S3Y 1:32":"DAG 3:55","S3Y 1:34-35":"DAG 3:56-57","S3Y 1:37":"DAG 3:58","S3Y 1:36":"DAG 3:59","S3Y 1:38-68":"DAG 3:60-90"},"excludedVerses":[],"partialVerses":{}}
11 changes: 6 additions & 5 deletions backend/app/router/isl_verse_markers.py
Original file line number Diff line number Diff line change
Expand Up @@ -12,7 +12,8 @@
from dependencies import get_db, logger
from auth import (
ensure_user_from_session_async,
validate_admin_only,
validate_admin_editor,
validate_all_roles,
verify_session_or_api_key
)
router = APIRouter(tags=["ISL Verse Markers"])
Expand Down Expand Up @@ -59,7 +60,7 @@ async def add_verse_markers(

logger.info("POST bulk ISL verse markers API")

validate_admin_only(session)
validate_admin_editor(session)

await ensure_user_from_session_async(
db_session,
Expand Down Expand Up @@ -87,7 +88,7 @@ async def update_verse_markers(
):
"""Updates verse markers for the given ISL Bible ID."""
logger.info("PUT ISL verse markers API")
validate_admin_only(session)
validate_admin_editor(session)
await ensure_user_from_session_async(db_session, session)

record = isl_verse_markers_crud.update_verse_markers(
Expand Down Expand Up @@ -116,7 +117,7 @@ async def get_verse_markers(
logger.info("GET ISL verse markers API")
if auth["auth_type"] == "session":
session = auth["session"]
validate_admin_only(session)
validate_all_roles(session)
_, _ = await ensure_user_from_session_async(db_session, session)

if isl_bible_id is not None:
Expand Down Expand Up @@ -175,7 +176,7 @@ async def delete_verse_markers_bulk(
):
"""Deletes all verse markers for the given ISL Bible IDs."""
logger.info("DELETE ISL verse markers API")
validate_admin_only(session)
validate_admin_editor(session)
await ensure_user_from_session_async(db_session, session)

result = isl_verse_markers_crud.delete_verse_markers_bulk(
Expand Down
Loading