From 82c6ac2f4b676e02d5b8d2a5c426d42d46742c5c Mon Sep 17 00:00:00 2001 From: Jeremy Zongker Date: Tue, 28 Jan 2025 17:05:00 -0600 Subject: [PATCH] Importing copyrights --- src/controllers/BibleController.ts | 25 +++++++++++++++++++ src/helpers/ApiBibleHelper.ts | 21 ++++++++++++++-- src/models/BibleTranslation.ts | 1 + .../BibleTranslationRepository.ts | 16 +++++++++--- tools/dbScripts/bibleTranslations.mysql | 1 + 5 files changed, 58 insertions(+), 6 deletions(-) diff --git a/src/controllers/BibleController.ts b/src/controllers/BibleController.ts index 93df658..517f110 100644 --- a/src/controllers/BibleController.ts +++ b/src/controllers/BibleController.ts @@ -16,6 +16,31 @@ export class BibleController extends ContentBaseController { }); } + @httpGet("/updateCopyrights") + public async updateCopyrights(req: express.Request<{}, {}, null>, res: express.Response): Promise { + return this.actionWrapperAnon(req, res, async () => { + const translations = await this.repositories.bibleTranslation.loadNeedingCopyrights(); + for (const translation of translations) { + const copyright = await ApiBibleHelper.getCopyright(translation.sourceKey); + console.log(translation.name, copyright); + translation.copyright = copyright || ""; + await this.repositories.bibleTranslation.save(translation); + } + return []; + }); + } + + @httpGet("/:translationKey/updateCopyright") + public async updateCopyright(@requestParam("translationKey") translationKey: string, req: express.Request<{}, {}, null>, res: express.Response): Promise { + return this.actionWrapperAnon(req, res, async () => { + const copyright = await ApiBibleHelper.getCopyright(translationKey); + const bible = await this.repositories.bibleTranslation.loadBySourceKey("api.bible", translationKey); + bible.copyright = copyright || ""; + await this.repositories.bibleTranslation.save(bible); + return bible; + }); + } + @httpGet("/:translationKey/books") public async getBooks(@requestParam("translationKey") translationKey: string, req: express.Request<{}, {}, null>, res: express.Response): Promise { return this.actionWrapperAnon(req, res, async () => { diff --git a/src/helpers/ApiBibleHelper.ts b/src/helpers/ApiBibleHelper.ts index df1b17d..e1b20c0 100644 --- a/src/helpers/ApiBibleHelper.ts +++ b/src/helpers/ApiBibleHelper.ts @@ -2,16 +2,32 @@ import axios from "axios"; import { Environment } from "./Environment"; import { BibleBook, BibleChapter, BibleTranslation, BibleVerse, BibleVerseText } from "../models"; import { ArrayHelper } from "@churchapps/apihelper"; -import { parse } from "dotenv"; export class ApiBibleHelper { static baseUrl: string = "https://api.scripture.api.bible/v1"; + /* + static translationCopyrights: { [key: string]: string } = { + "a81b73293d3080c9-01": "Amplified® Bible Copyright © 2015 by The Lockman Foundation, La Habra, CA 90631 All rights reserved. http://www.lockman.org", + "e3f420b9665abaeb-01": "La Biblia de las Américas Copyright © 1986, 1995, 1997 by The Lockman Foundation Derechos Reservados All Rights Reserved", + "a761ca71e0b3ddcf-01": "NEW AMERICAN STANDARD BIBLE® NASB® Copyright © 1960, 1971, 1977,1995, 2020 by The Lockman Foundation A Corporation Not for Profit La Habra, CA All Rights Reserved www.lockman.org", + "b8ee27bcd1cae43a-01": "NEW AMERICAN STANDARD BIBLE® NASB® Copyright © 1960,1962,1963,1968,1971,1972,1973,1975,1977,1995 by The Lockman Foundation A Corporation Not for Profit La Habra, CA All Rights Reserved www.lockman.org", + "ce11b813f9a27e20-01": "Nueva Biblia de las Américas Copyright © 2005 by The Lockman Foundation La Habra, California 90631 Sociedad no comercial Derechos Reservados (All Rights Reserved) http://www.NuevaBiblia.com (Español) http://www.lockman.org (English) Versión de texto 2019 Texto derivado de La Biblia de las Américas © Copyright 1986, 1995, 1997 by The Lockman Foundation" + }*/ + + static async getCopyright(translationKey: string) { + const books = await ApiBibleHelper.getBooks(translationKey); + const verseKey = books[0].keyName + ".1.1"; + const url = this.baseUrl + "/bibles/" + translationKey + "/verses/" + verseKey + "-" + verseKey + "?content-type=json&include-titles=false&include-verse-numbers=false"; + const data = await this.getContent(url); + return data.data.copyright; + } static async getTranslations() { const result: BibleTranslation[] = []; const url = this.baseUrl + "/bibles"; const data = await this.getContent(url); + data.data.forEach((d: any) => { const translation: BibleTranslation = { name: d.name, @@ -19,10 +35,11 @@ export class ApiBibleHelper { abbreviation: d.abbreviation, description: d.description, language: d.language.id, - source: "bible.api", + source: "api.bible", sourceKey: d.id, countryList: [] } + // copyright: this.translationCopyrights[d.id] d.countries.forEach((c: any) => { diff --git a/src/models/BibleTranslation.ts b/src/models/BibleTranslation.ts index 0164209..9b19ff8 100644 --- a/src/models/BibleTranslation.ts +++ b/src/models/BibleTranslation.ts @@ -9,4 +9,5 @@ export class BibleTranslation { public description?: string; public countries?: string; public countryList?: string[]; + public copyright?: string; } \ No newline at end of file diff --git a/src/repositories/BibleTranslationRepository.ts b/src/repositories/BibleTranslationRepository.ts index 87d3226..5397c98 100644 --- a/src/repositories/BibleTranslationRepository.ts +++ b/src/repositories/BibleTranslationRepository.ts @@ -19,15 +19,15 @@ export class BibleTranslationRepository { private async create(translation: BibleTranslation) { translation.id = UniqueIdHelper.shortId(); - const sql = "INSERT INTO bibleTranslations (id, abbreviation, name, nameLocal, description, source, sourceKey, language, countries) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?);"; - const params = [translation.id, translation.abbreviation, translation.name, translation.nameLocal, translation.description, translation.source, translation.sourceKey, translation.language, translation.countries]; + const sql = "INSERT INTO bibleTranslations (id, abbreviation, name, nameLocal, description, source, sourceKey, language, countries, copyright) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?);"; + const params = [translation.id, translation.abbreviation, translation.name, translation.nameLocal, translation.description, translation.source, translation.sourceKey, translation.language, translation.countries, translation.copyright]; await DB.query(sql, params); return translation; } private async update(translation: BibleTranslation) { - const sql = "UPDATE bibleTranslations SET abbreviation=?, name=?, nameLocal=?, description=?, source=?, sourceKey=?, language=?, countries=? WHERE id=?"; - const params = [translation.abbreviation, translation.name, translation.nameLocal, translation.description, translation.source, translation.sourceKey, translation.language, translation.countries, translation.id]; + const sql = "UPDATE bibleTranslations SET abbreviation=?, name=?, nameLocal=?, description=?, source=?, sourceKey=?, language=?, countries=?, copyright=? WHERE id=?"; + const params = [translation.abbreviation, translation.name, translation.nameLocal, translation.description, translation.source, translation.sourceKey, translation.language, translation.countries, translation.copyright, translation.id]; await DB.query(sql, params); return translation; } @@ -40,8 +40,16 @@ export class BibleTranslationRepository { return DB.queryOne("SELECT * FROM bibleTranslations WHERE id=?;", [id]); } + public loadBySourceKey(source: string, sourceKey: string) { + return DB.queryOne("SELECT * FROM bibleTranslations WHERE source=? and sourceKey=?;", [source, sourceKey]); + } + public loadAll() { return DB.query("SELECT * FROM bibleTranslations order by name;", []); } + public loadNeedingCopyrights() { + return DB.query("SELECT * FROM bibleTranslations where copyright is null;", []); + } + } diff --git a/tools/dbScripts/bibleTranslations.mysql b/tools/dbScripts/bibleTranslations.mysql index 7be9b96..3b734ad 100644 --- a/tools/dbScripts/bibleTranslations.mysql +++ b/tools/dbScripts/bibleTranslations.mysql @@ -8,5 +8,6 @@ CREATE TABLE `bibleTranslations` ( `sourceKey` varchar(45) DEFAULT NULL, `language` varchar(45) DEFAULT NULL, `countries` varchar(255) DEFAULT NULL, + `copyright` varchar(1000) DEFAULT NULL, PRIMARY KEY (`id`) ) ENGINE=InnoDB; \ No newline at end of file