update junctions

This commit is contained in:
Andrzej Stepien 2024-02-16 11:24:45 +01:00
parent b6f1a4aefd
commit 00aaf29a97
6 changed files with 58 additions and 52 deletions

View File

@ -16,7 +16,7 @@ const __dirname = path.dirname(__filename);
// })
export default pino(
{
level: 'error',
level: 'fatal',
formatters: {
level: (label) => {
return { level: label.toUpperCase() };

View File

@ -64,7 +64,7 @@ export const postEndpoints = (db,data) => {
try {
logger.trace({data:req.body},"POST request received")
const entity = new Entity(req.body)
await entity[method](db)
await entity[method](db,data)
res.sendStatus(200)
data.init()
return

View File

@ -13,21 +13,30 @@ export default class Entity{
this._id = data?.id
}
async insert(db){
return db(this.table)
.insert(this)
async updateAppropriateJunctions(db,data){
if(typeof this.updateGenres === "function" ){
await this.updateGenres(db,data.genres)
}
async update(db){
return db(this.table)
}
async insert(db,data){
this.id = await db(this.table)
.insert(this)
.returning("id")
await this.updateAppropriateJunctions(db,data)
}
async update(db,data){
await db(this.table)
.where('id',this.id)
.update(this)
await this.updateAppropriateJunctions(db,data)
}
async del(db){
async del(db,data){
if(!this?.id){throw new Error("cannot delete without an id!")}
return db(this.table)
await db(this.table)
.where('id',this.id)
.del()
//RUN JUNCTION OPS IF APPROPRIATE
}
}

View File

@ -1,5 +1,6 @@
import Entity from "./Entity.mjs";
import dataValidation from "./dataValidation.mjs";
import logger from "../logger.mjs";
//THIS CLASS WILL HANDLE JUNCTION TABLE STUFF
export default class Title extends Entity {
#genres
@ -35,37 +36,33 @@ export default class Title extends Entity{
async updateGenres(db, genres) {
const table = this.table + '_genres'
const relevantEntries = await db(table)
.select('*')
await genres.forEach(async (e, i) => {
//INSERT TRUE
const genreName = genres[i]
if (this.#genres[genreName]) {
await db(table).whereNotExists(
db.select('*')
.from(table)
.where(this.idName, this.id)
//DELETE FALSES
const truesWithEntry= []
for (const entry of relevantEntries) {
const genreName = genres[entry.genre_id]
if(this.#genres[genreName]===false){
await db(table)
.where('id',entry.id)
.del()
continue
}
truesWithEntry.push(entry.genre_id)
}
//INSERT TRUES
for (const genre in this.#genres){
if(truesWithEntry.includes(genre)){continue}
await db(table)
.andWhere('genre_id', i)
)
.insert({
[this.idName]: this.id,
genre_id://GET GENRE ID???!!!
genre_id: i
})
} else {
//DELETE FALSE
const res = await db(table)
.where(this.idName, this.id)
.andWhere('genre_id', i)
.del()
console.log("RES: "+res)
}
})
}
}
}

Binary file not shown.

0
subs
View File