Skip to content

Commit

Permalink
update models and api
Browse files Browse the repository at this point in the history
  • Loading branch information
appujet committed Jan 16, 2025
1 parent a14a2d3 commit 97b6e37
Show file tree
Hide file tree
Showing 12 changed files with 393 additions and 55 deletions.
84 changes: 84 additions & 0 deletions prisma/mongodb.schema.prisma
Original file line number Diff line number Diff line change
@@ -0,0 +1,84 @@
generator client {
provider = "prisma-client-js"
binaryTargets = ["native", "debian-openssl-3.0.x"]
}

datasource db {
provider = "mongodb"
url = env("DATABASE_URL")
}

model Bot {
botId String @id @map("_id")
totalPlaySong Int
history Track[]
}

model Guild {
guildId String @id @map("_id") @db.ObjectId
prefix String
language String? @default("EnglishUS")
stay Stay?
dj Dj?
roles Role[]
setup Setup?
history Track[]
}

model Stay {
guildId String @id @map("_id") @db.ObjectId
textId String
voiceId String
Guild Guild @relation(fields: [guildId], references: [guildId])
}

model Dj {
guildId String @id @map("_id") @db.ObjectId
mode Boolean
Guild Guild @relation(fields: [guildId], references: [guildId])
}

model Role {
id String @id @default(auto()) @map("_id") @db.ObjectId
guildId String @db.ObjectId
roleId String
Guild Guild @relation(fields: [guildId], references: [guildId])
@@unique([guildId, roleId])
}

model Playlist {
id String @id @default(auto()) @map("_id") @db.ObjectId
userId String
name String
tracks String? // Store the array of encoded tracks as a JSON string
@@unique([userId, name])
}

model Setup {
guildId String @id @map("_id") @db.ObjectId
textId String
messageId String
Guild Guild @relation(fields: [guildId], references: [guildId])
}

model Track {
identifier String @id @map("_id") @db.ObjectId
encoded String
played Int @default(0)
lastPlayed DateTime? @default(now())
author User @relation(fields: [authorId], references: [userId])
authorId String
bot Bot @relation(fields: [botId], references: [botId])
botId String
guild Guild @relation(fields: [guildId], references: [guildId])
guildId String @db.ObjectId
}

model User {
userId String @id @map("_id")
history Track[]
}
Original file line number Diff line number Diff line change
Expand Up @@ -15,8 +15,10 @@ datasource db {
}

model Bot {
botId String @unique
botId String @unique @id
totalPlaySong Int
Track Track[] @relation("botHistory")
}

model Guild {
Expand All @@ -27,6 +29,8 @@ model Guild {
dj Dj?
roles Role[]
setup Setup?
Track Track[] @relation("guildHistory")
}

model Stay {
Expand Down Expand Up @@ -65,3 +69,17 @@ model Setup {
messageId String
Guild Guild @relation(fields: [guildId], references: [guildId])
}
model Track {
identifier String @id
encoded String
played Int @default(0)
lastPlayed DateTime? @default(now())
User User[] @relation("userHistory")
Bot Bot[] @relation("botHistory")
Guild Guild[] @relation("guildHistory")
}

model User {
userId String @id
history Track[] @relation("userHistory")
}
2 changes: 1 addition & 1 deletion prisma/schema.prisma
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@
// Try Prisma Accelerate: https://pris.ly/cli/accelerate-init

generator client {
provider = "prisma-client-js"
provider = "prisma-client-js"
binaryTargets = ["native", "debian-openssl-3.0.x"]
}

Expand Down
40 changes: 28 additions & 12 deletions prisma/example.mongodb.schema.prisma → prisma/turso.schema.prisma
Original file line number Diff line number Diff line change
Expand Up @@ -5,53 +5,54 @@
// Try Prisma Accelerate: https://pris.ly/cli/accelerate-init

generator client {
provider = "prisma-client-js"
binaryTargets = ["native", "debian-openssl-3.0.x"]
provider = "prisma-client-js"
previewFeatures = ["driverAdapters"]
}

datasource db {
provider = "mongodb"
url = env("DATABASE_URL")
provider = "sqlite"
url = "file:./lavamusic.db"
}

model Bot {
botId String @id @map("_id")
totalPlaySong Int
botId String @unique @id
history Track[] @relation("botHistory")
}

model Guild {
guildId String @id @map("_id")
guildId String @id
prefix String
language String? @default("EnglishUS")
stay Stay?
dj Dj?
roles Role[]
setup Setup?
history Track[] @relation("guildHistory")
}

model Stay {
guildId String @id @map("_id")
guildId String @id
textId String
voiceId String
Guild Guild @relation(fields: [guildId], references: [guildId])
}

model Dj {
guildId String @id @map("_id")
guildId String @id
mode Boolean
Guild Guild @relation(fields: [guildId], references: [guildId])
}

model Role {
guildId String @id @map("_id")
guildId String
roleId String
Guild Guild @relation(fields: [guildId], references: [guildId])
@@unique([guildId, roleId])
}

model Playlist {
id String @id @default(uuid()) @map("_id")
id String @id @default(uuid())
userId String
name String
tracks String? // Store the array of encoded tracks as a JSON string
Expand All @@ -60,8 +61,23 @@ model Playlist {
}

model Setup {
guildId String @id @map("_id")
guildId String @id
textId String
messageId String
Guild Guild @relation(fields: [guildId], references: [guildId])
}

model Track {
identifier String @id
encoded String
played Int @default(0)
lastPlayed DateTime? @default(now())
User User[] @relation("userHistory")
Bot Bot[] @relation("botHistory")
Guild Guild[] @relation("guildHistory")
}

model User {
userId String @id
history Track[] @relation("userHistory")
}
31 changes: 29 additions & 2 deletions src/api/controllers/guild.controller.ts
Original file line number Diff line number Diff line change
Expand Up @@ -28,7 +28,12 @@ export class GuildController {
reply: FastifyReply
) {
const guildId = req.params.guildId;
const data = await this.guildService.getGuild(guildId);
const accessToken = req.headers.authorization?.split(" ")[1];

if (!accessToken) {
return reply.status(401).send({ message: "Unauthorized" });
}
const data = await this.guildService.getGuild(accessToken, guildId);
if (!data) {
return reply.status(404).send({ message: "Guild not found" });
}
Expand All @@ -39,7 +44,12 @@ export class GuildController {
reply: FastifyReply
) {
const guildId = req.params.guildId;
const data = await this.guildService.getChannels(guildId);
const accessToken = req.headers.authorization?.split(" ")[1];

if (!accessToken) {
return reply.status(401).send({ message: "Unauthorized" });
}
const data = await this.guildService.getChannels(accessToken, guildId);
if (!data) {
return reply.status(404).send({ message: "Channels not found" });
}
Expand Down Expand Up @@ -69,4 +79,21 @@ export class GuildController {
}
return reply.status(200).send(data);
}

async updateGuildSettings(
req: FastifyRequest<{ Params: { guildId: string } }>,
reply: FastifyReply
) {
const guildId = req.params.guildId;
const accessToken = req.headers.authorization?.split(" ")[1];

if (!accessToken) {
return reply.status(401).send({ message: "Unauthorized" });
}
const data = await this.guildService.updateGuildSettings(accessToken, guildId, req.body);
if (!data) {
return reply.status(404).send({ message: "Guild not found" });
}
return reply.status(200).send(data);
}
}
14 changes: 14 additions & 0 deletions src/api/controllers/user.controller.ts
Original file line number Diff line number Diff line change
Expand Up @@ -26,4 +26,18 @@ export class UserController {
}
return reply.status(200).send(data);
}
async getPlaylist(req: FastifyRequest<{ Params: { name: string }}>, reply: FastifyReply) {
const accessToken = req.headers.authorization?.split(" ")[1];
const name = req.params.name;

if (!accessToken) {
return reply.status(401).send({ message: "Unauthorized" });
}
const data = await this.userService.getPlaylist(accessToken, name);

if (!data) {
return reply.status(404).send({ message: "Playlist not found" });
}
return reply.status(200).send(data);
}
}
19 changes: 12 additions & 7 deletions src/api/routes/guild.routes.ts
Original file line number Diff line number Diff line change
Expand Up @@ -2,13 +2,18 @@ import type { FastifyInstance } from "fastify";
import { GuildController } from "../controllers/guild.controller";
import { container } from "tsyringe";


export const guildRoutes = (fastify: FastifyInstance) => {
const controller = container.resolve(GuildController);
const controller = container.resolve(GuildController);

fastify.get("/user/@me/guilds", controller.userMeGuild.bind(controller));
fastify.get("/:guildId/channels", controller.channels.bind(controller));
fastify.get("/:guildId", controller.guild.bind(controller));
fastify.get("/:guildId/top-tracks", controller.getTopPlayedTracksPast24Hours.bind(controller));
fastify.get("/user/@me/guilds", controller.userMeGuild.bind(controller));
fastify.get("/:guildId/channels", controller.channels.bind(controller));
fastify.get("/:guildId", controller.guild.bind(controller));
fastify.get(
"/:guildId/top-tracks",
controller.getTopPlayedTracksPast24Hours.bind(controller)
);
fastify.put(
"/:guildId/settings",
controller.updateGuildSettings.bind(controller)
);
};

10 changes: 7 additions & 3 deletions src/api/routes/user.routes.ts
Original file line number Diff line number Diff line change
Expand Up @@ -4,8 +4,12 @@ import { container } from "tsyringe";


export const userRoutes = (fastify: FastifyInstance) => {
const controller = container.resolve(UserController);
const controller = container.resolve(UserController);

fastify.get("/:userId", controller.status.bind(controller));
fastify.get("/recommended-tracks", controller.getRecommendedTracks.bind(controller));
fastify.get("/:userId", controller.status.bind(controller));
fastify.get(
"/recommended-tracks",
controller.getRecommendedTracks.bind(controller)
);
fastify.get("/playlist/:name", controller.getPlaylist.bind(controller));
};
Loading

0 comments on commit 97b6e37

Please sign in to comment.