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,67 +1,64 @@
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{
export default class Title extends Entity {
#genres
set _title(prop){
if(prop){
if(!dataValidation.isString(prop)){throw new TypeError("title must be a string")}
this.title=prop
set _title(prop) {
if (prop) {
if (!dataValidation.isString(prop)) { throw new TypeError("title must be a string") }
this.title = prop
}
}
set _genres(prop){
if(prop){
if(!dataValidation.isObject(prop)){throw new TypeError(`genres must be an object; this is a ${typeof prop}`)}
this.#genres=prop
set _genres(prop) {
if (prop) {
if (!dataValidation.isObject(prop)) { throw new TypeError(`genres must be an object; this is a ${typeof prop}`) }
this.#genres = prop
}
}
set _deleted(prop){
if(prop){
if(prop===1 || prop===0){
this.deleted=prop
set _deleted(prop) {
if (prop) {
if (prop === 1 || prop === 0) {
this.deleted = prop
}
}
}
get genres(){
get genres() {
return this.#genres
}
constructor(data){
constructor(data) {
super(data)
this._title = data?.title
this._genres = data?.genres
this._deleted = data?.deleted
}
async updateGenres(db,genres){
const table = this.table+'_genres'
const relevantEntries = await db(table)
.select('*')
.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)
async updateGenres(db, genres) {
const table = this.table + '_genres'
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)
.andWhere('genre_id', i)
)
.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()
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