| const prisma = require("../utils/prisma"); | |
| const EventLogs = { | |
| logEvent: async function (event, metadata = {}, userId = null) { | |
| try { | |
| const eventLog = await prisma.event_logs.create({ | |
| data: { | |
| event, | |
| metadata: metadata ? JSON.stringify(metadata) : null, | |
| userId: userId ? Number(userId) : null, | |
| occurredAt: new Date(), | |
| }, | |
| }); | |
| console.log(`\x1b[32m[Event Logged]\x1b[0m - ${event}`); | |
| return { eventLog, message: null }; | |
| } catch (error) { | |
| console.error( | |
| `\x1b[31m[Event Logging Failed]\x1b[0m - ${event}`, | |
| error.message | |
| ); | |
| return { eventLog: null, message: error.message }; | |
| } | |
| }, | |
| getByEvent: async function (event, limit = null, orderBy = null) { | |
| try { | |
| const logs = await prisma.event_logs.findMany({ | |
| where: { event }, | |
| ...(limit !== null ? { take: limit } : {}), | |
| ...(orderBy !== null | |
| ? { orderBy } | |
| : { orderBy: { occurredAt: "desc" } }), | |
| }); | |
| return logs; | |
| } catch (error) { | |
| console.error(error.message); | |
| return []; | |
| } | |
| }, | |
| getByUserId: async function (userId, limit = null, orderBy = null) { | |
| try { | |
| const logs = await prisma.event_logs.findMany({ | |
| where: { userId }, | |
| ...(limit !== null ? { take: limit } : {}), | |
| ...(orderBy !== null | |
| ? { orderBy } | |
| : { orderBy: { occurredAt: "desc" } }), | |
| }); | |
| return logs; | |
| } catch (error) { | |
| console.error(error.message); | |
| return []; | |
| } | |
| }, | |
| where: async function ( | |
| clause = {}, | |
| limit = null, | |
| orderBy = null, | |
| offset = null | |
| ) { | |
| try { | |
| const logs = await prisma.event_logs.findMany({ | |
| where: clause, | |
| ...(limit !== null ? { take: limit } : {}), | |
| ...(offset !== null ? { skip: offset } : {}), | |
| ...(orderBy !== null | |
| ? { orderBy } | |
| : { orderBy: { occurredAt: "desc" } }), | |
| }); | |
| return logs; | |
| } catch (error) { | |
| console.error(error.message); | |
| return []; | |
| } | |
| }, | |
| whereWithData: async function ( | |
| clause = {}, | |
| limit = null, | |
| offset = null, | |
| orderBy = null | |
| ) { | |
| const { User } = require("./user"); | |
| try { | |
| const results = await this.where(clause, limit, orderBy, offset); | |
| for (const res of results) { | |
| const user = res.userId ? await User.get({ id: res.userId }) : null; | |
| res.user = user | |
| ? { username: user.username } | |
| : { username: "unknown user" }; | |
| } | |
| return results; | |
| } catch (error) { | |
| console.error(error.message); | |
| return []; | |
| } | |
| }, | |
| count: async function (clause = {}) { | |
| try { | |
| const count = await prisma.event_logs.count({ | |
| where: clause, | |
| }); | |
| return count; | |
| } catch (error) { | |
| console.error(error.message); | |
| return 0; | |
| } | |
| }, | |
| delete: async function (clause = {}) { | |
| try { | |
| await prisma.event_logs.deleteMany({ | |
| where: clause, | |
| }); | |
| return true; | |
| } catch (error) { | |
| console.error(error.message); | |
| return false; | |
| } | |
| }, | |
| }; | |
| module.exports = { EventLogs }; | |