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( export default pino(
{ {
level: 'error', level: 'fatal',
formatters: { formatters: {
level: (label) => { level: (label) => {
return { level: label.toUpperCase() }; return { level: label.toUpperCase() };

View File

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

View File

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

View File

@ -1,67 +1,64 @@
import Entity from "./Entity.mjs"; import Entity from "./Entity.mjs";
import dataValidation from "./dataValidation.mjs"; import dataValidation from "./dataValidation.mjs";
import logger from "../logger.mjs";
//THIS CLASS WILL HANDLE JUNCTION TABLE STUFF //THIS CLASS WILL HANDLE JUNCTION TABLE STUFF
export default class Title extends Entity{ export default class Title extends Entity {
#genres #genres
set _title(prop){ set _title(prop) {
if(prop){ if (prop) {
if(!dataValidation.isString(prop)){throw new TypeError("title must be a string")} if (!dataValidation.isString(prop)) { throw new TypeError("title must be a string") }
this.title=prop this.title = prop
} }
} }
set _genres(prop){ set _genres(prop) {
if(prop){ if (prop) {
if(!dataValidation.isObject(prop)){throw new TypeError(`genres must be an object; this is a ${typeof prop}`)} if (!dataValidation.isObject(prop)) { throw new TypeError(`genres must be an object; this is a ${typeof prop}`) }
this.#genres=prop this.#genres = prop
} }
} }
set _deleted(prop){ set _deleted(prop) {
if(prop){ if (prop) {
if(prop===1 || prop===0){ if (prop === 1 || prop === 0) {
this.deleted=prop this.deleted = prop
} }
} }
} }
get genres(){ get genres() {
return this.#genres return this.#genres
} }
constructor(data){ constructor(data) {
super(data) super(data)
this._title = data?.title this._title = data?.title
this._genres = data?.genres this._genres = data?.genres
this._deleted = data?.deleted this._deleted = data?.deleted
} }
async updateGenres(db,genres){ async updateGenres(db, genres) {
const table = this.table+'_genres' const table = this.table + '_genres'
const relevantEntries = await db(table) await genres.forEach(async (e, i) => {
.select('*') //INSERT TRUE
.where(this.idName,this.id) const genreName = genres[i]
//DELETE FALSES if (this.#genres[genreName]) {
const truesWithEntry= [] await db(table).whereNotExists(
for (const entry of relevantEntries) { db.select('*')
const genreName = genres[entry.genre_id] .from(table)
if(this.#genres[genreName]===false){ .where(this.idName, this.id)
await db(table) .andWhere('genre_id', i)
.where('id',entry.id) )
.insert({
[this.idName]: this.id,
genre_id: i
})
} else {
//DELETE FALSE
const res = await db(table)
.where(this.idName, this.id)
.andWhere('genre_id', i)
.del() .del()
continue console.log("RES: "+res)
} }
truesWithEntry.push(entry.genre_id) })
}
//INSERT TRUES
for (const genre in this.#genres){
if(truesWithEntry.includes(genre)){continue}
await db(table)
.insert({
[this.idName]:this.id,
genre_id://GET GENRE ID???!!!
})
}
} }

Binary file not shown.

0
subs
View File