diff --git a/logger.mjs b/logger.mjs index 274931c..6f71e5d 100644 --- a/logger.mjs +++ b/logger.mjs @@ -16,7 +16,7 @@ const __dirname = path.dirname(__filename); // }) export default pino( { - level: 'error', + level: 'fatal', formatters: { level: (label) => { return { level: label.toUpperCase() }; diff --git a/objects/Endpoints.mjs b/objects/Endpoints.mjs index 9d12c3d..eea59c5 100644 --- a/objects/Endpoints.mjs +++ b/objects/Endpoints.mjs @@ -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 diff --git a/objects/Entity.mjs b/objects/Entity.mjs index 6825dc2..85a9757 100644 --- a/objects/Entity.mjs +++ b/objects/Entity.mjs @@ -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 } } diff --git a/objects/Title.mjs b/objects/Title.mjs index 40b4832..02333fc 100644 --- a/objects/Title.mjs +++ b/objects/Title.mjs @@ -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???!!! - }) - } - - - + }) } diff --git a/submissions b/submissions index e164b8e..9be69fd 100644 Binary files a/submissions and b/submissions differ diff --git a/subs b/subs deleted file mode 100644 index e69de29..0000000