uyem
Version:
WebRTC client-server SFU application
551 lines • 18.8 kB
JavaScript
"use strict";
var __importDefault = (this && this.__importDefault) || function (mod) {
return (mod && mod.__esModule) ? mod : { "default": mod };
};
Object.defineProperty(exports, "__esModule", { value: true });
const lib_1 = require("../utils/lib");
const auth_1 = __importDefault(require("./auth"));
class DB extends auth_1.default {
prisma;
constructor({ prisma }) {
super();
this.prisma = prisma;
}
// eslint-disable-next-line class-methods-use-this
roomFindFirst = async (args) => {
// eslint-disable-next-line @typescript-eslint/no-explicit-any
let result;
try {
result = await this.prisma.room.findFirst(args);
// eslint-disable-next-line @typescript-eslint/no-explicit-any
}
catch (err) {
(0, lib_1.log)('error', 'DB Error room find first', { args, err });
}
return result;
};
// eslint-disable-next-line class-methods-use-this
roomUpdate = async (args) => {
// eslint-disable-next-line @typescript-eslint/no-explicit-any
let result;
try {
result = await this.prisma.room.update(args);
// eslint-disable-next-line @typescript-eslint/no-explicit-any
}
catch (err) {
(0, lib_1.log)('error', 'DB Error update room', { where: args.where, data: args.data, err });
}
return result;
};
// eslint-disable-next-line class-methods-use-this
roomCreate = async (args) => {
// eslint-disable-next-line @typescript-eslint/no-explicit-any
let result;
try {
result = await this.prisma.room.create(args);
// eslint-disable-next-line @typescript-eslint/no-explicit-any
}
catch (err) {
(0, lib_1.log)('error', 'DB Error create room', { args, err });
}
return result;
};
// eslint-disable-next-line class-methods-use-this
unitCreate = async (args) => {
// eslint-disable-next-line @typescript-eslint/no-explicit-any
let result;
try {
result = await this.prisma.unit.create(args);
// eslint-disable-next-line @typescript-eslint/no-explicit-any
}
catch (err) {
(0, lib_1.log)('error', 'DB Error create unit', { args, err });
}
return result;
};
// eslint-disable-next-line class-methods-use-this
unitUpdate = async (args) => {
// eslint-disable-next-line @typescript-eslint/no-explicit-any
let result;
try {
result = await this.prisma.unit.update(args);
// eslint-disable-next-line @typescript-eslint/no-explicit-any
}
catch (err) {
(0, lib_1.log)('error', 'DB Error update unit', { args, err });
}
return result;
};
// eslint-disable-next-line class-methods-use-this
unitFindFirst = async (args) => {
// eslint-disable-next-line @typescript-eslint/no-explicit-any
let result;
try {
result = await this.prisma.unit.findFirst(args);
// eslint-disable-next-line @typescript-eslint/no-explicit-any
}
catch (err) {
(0, lib_1.log)('error', 'DB Error find first unit', { args, err });
}
return result;
};
// eslint-disable-next-line class-methods-use-this
messageUpdate = async (args) => {
// eslint-disable-next-line @typescript-eslint/no-explicit-any
let result;
try {
result = await this.prisma.message.update(args);
// eslint-disable-next-line @typescript-eslint/no-explicit-any
}
catch (err) {
(0, lib_1.log)('error', 'DB Error update message', { where: args.where, data: args.data, err });
}
return result;
};
// eslint-disable-next-line class-methods-use-this
messageCreate = async (args) => {
// eslint-disable-next-line @typescript-eslint/no-explicit-any
let result;
try {
result = await this.prisma.message.create(args);
// eslint-disable-next-line @typescript-eslint/no-explicit-any
}
catch (err) {
(0, lib_1.log)('error', 'DB Error create message', { args, err });
}
return result;
};
// eslint-disable-next-line class-methods-use-this
quoteCreate = async (args) => {
// eslint-disable-next-line @typescript-eslint/no-explicit-any
let result;
try {
result = await this.prisma.quote.create(args);
// eslint-disable-next-line @typescript-eslint/no-explicit-any
}
catch (err) {
(0, lib_1.log)('error', 'DB Error create quote', { args, err });
}
return result;
};
// eslint-disable-next-line class-methods-use-this
messageDelete = async (args) => {
let message;
try {
message = await this.prisma.message.findFirst({
where: {
id: args.where.id,
},
include: {
Quote: true,
MessageQuote: true,
},
});
}
catch (err) {
(0, lib_1.log)('error', 'DB Error message find first while delete', { args, err });
return null;
}
if (!message) {
return null;
}
if (message.Quote) {
try {
message = await this.prisma.message.update({
where: {
id: args.where.id,
},
data: {
Quote: {
delete: true,
},
},
include: {
Quote: true,
MessageQuote: true,
},
});
// eslint-disable-next-line @typescript-eslint/no-explicit-any
}
catch (err) {
(0, lib_1.log)('error', 'DB Error message update while delete', { args, err });
return null;
}
}
if (!message) {
return null;
}
if (message.MessageQuote?.length) {
try {
message = await this.prisma.message.update({
where: {
id: args.where.id,
},
data: {
Message: {
updateMany: [
{
where: {
messageId: message.id,
},
data: {
quoteId: null,
},
},
],
},
},
});
}
catch (err) {
(0, lib_1.log)('error', 'DB Error update message while delete 2', { args, err });
return null;
}
}
// eslint-disable-next-line @typescript-eslint/no-explicit-any
let result;
try {
result = await this.prisma.message.delete(args);
// eslint-disable-next-line @typescript-eslint/no-explicit-any
}
catch (err) {
(0, lib_1.log)('error', 'DB Error delete message', { args, err });
}
return result;
};
// eslint-disable-next-line class-methods-use-this
messageFindMany = async (args) => {
const { where, skip, take } = args;
// eslint-disable-next-line @typescript-eslint/no-explicit-any
let count = 0;
try {
count = await this.prisma.message.count({
where,
});
// eslint-disable-next-line @typescript-eslint/no-explicit-any
}
catch (err) {
(0, lib_1.log)('error', 'Error get count of messages', { err });
}
// eslint-disable-next-line @typescript-eslint/no-explicit-any
let data;
try {
data = await this.prisma.message.findMany(args);
// eslint-disable-next-line @typescript-eslint/no-explicit-any
}
catch (err) {
(0, lib_1.log)('error', 'Error get messages', { err });
}
return {
result: data,
skip,
take,
count,
// eslint-disable-next-line @typescript-eslint/no-explicit-any
};
};
// eslint-disable-next-line class-methods-use-this
videoFindFirst = async (args) => {
// eslint-disable-next-line @typescript-eslint/no-explicit-any
let result;
try {
result = await this.prisma.video.findFirst(args);
// eslint-disable-next-line @typescript-eslint/no-explicit-any
}
catch (err) {
(0, lib_1.log)('error', 'DB Error video find first', { where: args.where, data: args, err });
}
return result;
};
// eslint-disable-next-line class-methods-use-this
videoUpdate = async (args) => {
// eslint-disable-next-line @typescript-eslint/no-explicit-any
let result;
try {
result = await this.prisma.video.update(args);
// eslint-disable-next-line @typescript-eslint/no-explicit-any
}
catch (err) {
(0, lib_1.log)('error', 'DB Error update video', { where: args.where, data: args.data, err });
}
return result;
};
// eslint-disable-next-line class-methods-use-this
videoCreate = async (args) => {
// eslint-disable-next-line @typescript-eslint/no-explicit-any
let result;
try {
result = await this.prisma.video.create(args);
// eslint-disable-next-line @typescript-eslint/no-explicit-any
}
catch (err) {
(0, lib_1.log)('error', 'DB Error create video', { args, err });
}
return result;
};
// eslint-disable-next-line class-methods-use-this
videoDelete = async (args) => {
// eslint-disable-next-line @typescript-eslint/no-explicit-any
let result;
try {
result = await this.prisma.video.delete(args);
// eslint-disable-next-line @typescript-eslint/no-explicit-any
}
catch (err) {
(0, lib_1.log)('error', 'DB Error delete video', { args, err });
}
return result;
};
// eslint-disable-next-line class-methods-use-this
adminsFindFirst = async (args) => {
// eslint-disable-next-line @typescript-eslint/no-explicit-any
let result;
try {
result = await this.prisma.admins.findFirst(args);
// eslint-disable-next-line @typescript-eslint/no-explicit-any
}
catch (err) {
(0, lib_1.log)('error', 'DB Error admins find first', { args, err });
}
return result;
};
// eslint-disable-next-line class-methods-use-this
adminsCreate = async (args) => {
// eslint-disable-next-line @typescript-eslint/no-explicit-any
let result;
try {
result = await this.prisma.admins.create(args);
// eslint-disable-next-line @typescript-eslint/no-explicit-any
}
catch (err) {
(0, lib_1.log)('error', 'DB Error admins create', { args, err });
}
return result;
};
// eslint-disable-next-line class-methods-use-this
adminsUpdate = async (args) => {
// eslint-disable-next-line @typescript-eslint/no-explicit-any
let result;
try {
result = await this.prisma.admins.update(args);
// eslint-disable-next-line @typescript-eslint/no-explicit-any
}
catch (err) {
(0, lib_1.log)('error', 'DB Error admins update', { args, err });
}
return result;
};
// eslint-disable-next-line class-methods-use-this
adminsDelete = async (args) => {
// eslint-disable-next-line @typescript-eslint/no-explicit-any
let result;
try {
result = await this.prisma.admins.delete(args);
// eslint-disable-next-line @typescript-eslint/no-explicit-any
}
catch (err) {
(0, lib_1.log)('error', 'DB Error admins delete', { args, err });
}
return result;
};
// eslint-disable-next-line class-methods-use-this
videoFindMany = async (args) => {
const { where, skip, take } = args;
// eslint-disable-next-line @typescript-eslint/no-explicit-any
let count = 0;
try {
count = await this.prisma.video.count({
where,
});
// eslint-disable-next-line @typescript-eslint/no-explicit-any
}
catch (err) {
(0, lib_1.log)('error', 'Error get count of videos', { err });
}
// eslint-disable-next-line @typescript-eslint/no-explicit-any
let data;
try {
data = await this.prisma.video.findMany(args);
// eslint-disable-next-line @typescript-eslint/no-explicit-any
}
catch (err) {
(0, lib_1.log)('error', 'Error get video', { err });
}
return {
result: data,
skip,
take,
count,
// eslint-disable-next-line @typescript-eslint/no-explicit-any
};
};
deleteGuest({ userId, roomId }) {
return new Promise((resolve) => {
this.roomFindFirst({
where: {
id: roomId.toString(),
},
select: {
Guests: {
where: {
unitId: userId.toString(),
},
},
},
}).then((g) => {
if (!g) {
(0, lib_1.log)('warn', 'Can not unitFindFirst', { userId });
resolve(0);
return;
}
this.roomUpdate({
where: {
id: roomId.toString(),
},
data: {
Guests: {
delete: g.Guests[0]?.id
? {
id: g.Guests[0]?.id,
}
: undefined,
},
updated: new Date(),
},
}).then((r) => {
if (!r) {
(0, lib_1.log)('warn', 'Room not delete guest', { roomId, id: g.Guests[0]?.id });
resolve(1);
}
(0, lib_1.log)('info', 'Guest deleted', { roomId, id: g.Guests[0]?.id });
resolve(0);
});
});
});
}
changeUserOnline({ userId, online }) {
this.unitUpdate({
where: {
id: userId.toString(),
},
data: {
online,
updated: new Date(),
},
});
}
async changeRoomArchive({ roomId, archive }) {
const room = await this.roomFindFirst({
where: {
id: roomId,
},
include: {
Admins: {
select: {
id: true,
},
},
},
});
await this.roomUpdate({
where: {
id: roomId,
},
data: {
archive,
Admins: room?.authorId === null
? {
deleteMany: room?.Admins,
}
: undefined,
updated: new Date(),
},
});
}
videoUpdateTime = async ({ roomId, time }) => {
const video = await this.videoFindFirst({
where: {
roomId: roomId.toString(),
},
orderBy: {
created: 'desc',
},
});
if (video) {
this.videoUpdate({
where: {
id: video.id,
},
data: {
time,
updated: new Date(),
},
});
}
else {
(0, lib_1.log)('warn', 'Video not found', { roomId, time });
}
};
saveGuest({ userId, roomId }) {
this.unitFindFirst({
where: {
id: userId,
},
select: {
IGuest: {
select: {
id: true,
},
},
},
}).then((g) => {
const id = roomId;
if (!g) {
(0, lib_1.log)('warn', 'Unit not found', { id: userId });
}
else if (!g?.IGuest[0]) {
this.unitUpdate({
where: {
id: userId,
},
data: {
IGuest: {
create: {
roomId: id,
},
},
updated: new Date(),
},
}).then((r) => {
if (!r) {
(0, lib_1.log)('warn', 'Room not updated', { roomId });
}
});
}
else if (g.IGuest[0].id) {
this.unitUpdate({
where: {
id: userId,
},
data: {
IGuest: {
update: {
where: {
id: g.IGuest[0].id,
},
data: {
updated: new Date(),
},
},
},
},
});
}
else {
(0, lib_1.log)('warn', 'Room not saved', { g: g.IGuest[0]?.id, id });
}
});
}
}
exports.default = DB;
//# sourceMappingURL=db.js.map