Skip to content
Draft
Show file tree
Hide file tree
Changes from 7 commits
Commits
Show all changes
21 commits
Select commit Hold shift + click to select a range
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
3 changes: 2 additions & 1 deletion .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -2,4 +2,5 @@
.vscode
node_modules/
yarn-error.log
**.env
**.env
**/build/
22 changes: 22 additions & 0 deletions packages/server/.eslintrc
Original file line number Diff line number Diff line change
@@ -0,0 +1,22 @@
{
"root": true,
"parser": "@typescript-eslint/parser",
"parserOptions": {
"sourceType": "script",
"ecmaVersion": 2023
},
"plugins": ["@typescript-eslint"],
"env": {
"node": true,
"amd": true
},
"rules": {
"@typescript-eslint/no-explicit-any": "off"
},
"ignorePatterns": ["/__tests__/**/*"],
"extends": [
"prettier",
"eslint:recommended",
"plugin:@typescript-eslint/recommended"
]
}
10 changes: 0 additions & 10 deletions packages/server/.eslintrc.json

This file was deleted.

Empty file.
Original file line number Diff line number Diff line change
@@ -1,16 +1,17 @@
// const postgres = require("../utils/postgres");
const prisma = require("../prisma/prisma");
import prisma from "../utils/prisma";
import { Event } from ".prisma/client/index";

async function getAllEvents() {
async function getAllEvents(): Promise<Event[]> {
return prisma.event.findMany();
}

async function getEvents(limit, action, eventId) {
let events;
async function getEvents(limit: number, action: string, eventId: string): Promise<Event[]> {
let events: Event[];

switch (action) {
case "prev":
events = await prisma.events.findMany({
events = await prisma.event.findMany({
take: -1 * limit,
skip: 1, // skip cursor (TODO: check if skip 1 is needed for previous page queries)
cursor: {
Expand All @@ -22,7 +23,7 @@ async function getEvents(limit, action, eventId) {
});
break;
case "next":
events = await prisma.events.findMany({
events = await prisma.event.findMany({
take: limit,
skip: 1, // skip cursor
cursor: {
Expand All @@ -35,7 +36,7 @@ async function getEvents(limit, action, eventId) {
break;
// first request made for first page, no action in cursor present
default:
events = await prisma.events.findMany({
events = await prisma.event.findMany({
take: limit,
orderBy: {
eventId: "asc",
Expand All @@ -47,14 +48,14 @@ async function getEvents(limit, action, eventId) {
return events;
}

async function getPages(limit) {
const totalEvents = await prisma.events.count();
async function getPages(limit: number): Promise<number> {
const totalEvents = await prisma.event.count();
const totalPages = Math.ceil(totalEvents / limit);
return totalPages;
}

async function getEvent(eventId) {
const event = await prisma.events.findUnique({
async function getEvent(eventId: string): Promise<Event | null> {
const event = await prisma.event.findUnique({
where: {
eventId: eventId,
},
Expand Down
20 changes: 0 additions & 20 deletions packages/server/controllers/guilds.js

This file was deleted.

21 changes: 21 additions & 0 deletions packages/server/controllers/guilds.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,21 @@
import prisma from "../utils/prisma";
import { Guild } from ".prisma/client/index";

async function getAllGuilds() {
const query = await prisma.guild.findMany();
return query;
}

async function getGuild(guildId: string): Promise<Guild | null> {
const query = await prisma.guild.findFirst({
where: {
guildId: guildId,
},
});
return query;
}

module.exports = {
getGuild,
getAllGuilds,
};
2 changes: 1 addition & 1 deletion packages/server/controllers/users.js
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
const prisma = require("../prisma/prisma");
const prisma = require("../utils/prisma");

async function getAllUsers() {
const query = await prisma.users.findMany();
Expand Down
9 changes: 8 additions & 1 deletion packages/server/package.json
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,7 @@
"private": true,
"scripts": {
"start": "nodemon index.js",
"build": "yarn tsc .",
"forward": "ttab node scripts/ngrok.js",
"dev": "ttab yarn start",
"test": "jest"
Expand All @@ -30,9 +31,15 @@
"uuid": "^9.0.0"
},
"devDependencies": {
"@types/express": "^4.17.17",
"@typescript-eslint/eslint-plugin": "^6.2.1",
"@typescript-eslint/parser": "^6.2.1",
"axios": "^1.3.4",
"eslint": "^8.46.0",
"eslint-config-prettier": "^8.10.0",
"jest": "^29.5.0",
"nodemon": "^2.0.19",
"prisma": "^5.1.1"
"prisma": "^5.1.1",
"typescript": "^5.1.6"
}
}
3 changes: 0 additions & 3 deletions packages/server/prisma/prisma.js

This file was deleted.

38 changes: 21 additions & 17 deletions packages/server/prisma/schema.prisma
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,7 @@ datasource db {
url = env("DB_URL")
}

model users {
model User {
userId String @id @map("user_id") @db.Uuid
joinedDate DateTime? @map("joined_date") @db.Timestamp(6)
firstName String @map("first_name") @db.VarChar(50)
Expand All @@ -16,21 +16,23 @@ model users {
email String @unique @db.VarChar(255)
avatar String? @db.VarChar(255)
password String? @db.VarChar(255)
eventAttendees eventAttendees[]
guildMembers guildMembers[]
eventAttendees EventAttendee[]
guildMembers GuildMember[]

@@map("users")
}

model eventAttendees {
userId String @db.Uuid @map("user_id")
eventId String @db.Uuid @map("event_id")
events events @relation(fields: [eventId], references: [eventId], onDelete: Cascade, onUpdate: NoAction, map: "fk_event")
attendees users @relation(fields: [userId], references: [userId], onDelete: Cascade, onUpdate: NoAction, map: "fk_user")
model EventAttendee {
userId String @db.Uuid @map("user_id")
eventId String @db.Uuid @map("event_id")
event Event? @relation(fields: [eventId], references: [eventId], onDelete: Cascade, onUpdate: NoAction, map: "fk_event")
attendee User? @relation(fields: [userId], references: [userId], onDelete: Cascade, onUpdate: NoAction, map: "fk_user")

@@id([userId, eventId])
@@map("event_attendees")
}

model events {
model Event {
eventId String @id(map: "event_pkey") @db.Uuid @map("event_id")
guildId String @db.Uuid @map("guild_id")
title String @db.VarChar(255)
Expand All @@ -39,21 +41,23 @@ model events {
endDate DateTime? @db.Timestamp(6) @map("end_date")
location String? @db.VarChar(255)
thumbnail String? @db.VarChar(255)
eventAttendees eventAttendees[]
guilds guilds @relation(fields: [guildId], references: [guildId], onDelete: Cascade, onUpdate: Cascade, map: "event_guild_id_fkey")
eventAttendees EventAttendee[]
guilds Guild @relation(fields: [guildId], references: [guildId], onDelete: Cascade, onUpdate: Cascade, map: "event_guild_id_fkey")

@@map("events")
}

model guildMembers {
model GuildMember {
userId String @db.Uuid @map("user_id")
guildId String @db.Uuid @map("guild_id")
guilds guilds @relation(fields: [guildId], references: [guildId], onDelete: Cascade, onUpdate: NoAction, map: "fk_guild")
members users @relation(fields: [userId], references: [userId], onDelete: Cascade, onUpdate: NoAction, map: "fk_user")
guilds Guild @relation(fields: [guildId], references: [guildId], onDelete: Cascade, onUpdate: NoAction, map: "fk_guild")
members User @relation(fields: [userId], references: [userId], onDelete: Cascade, onUpdate: NoAction, map: "fk_user")

@@id([guildId, userId], map: "users_guilds_pkey")
@@map("guild_members")
}

model guilds {
model Guild {
guildId String @id(map: "guild_pkey") @db.Uuid @map("guild_id")
name String @db.VarChar(100)
handler String @db.VarChar(50)
Expand All @@ -66,6 +70,6 @@ model guilds {
icon String? @db.VarChar(255)
media String[]
isInviteOnly Boolean @map("invite_only")
events events[]
members guildMembers[]
events Event[]
members GuildMember[]
}
21 changes: 21 additions & 0 deletions packages/server/tsconfig.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,21 @@
{
"compilerOptions": {
"lib": ["ES2023"],
"strict": true,
"esModuleInterop": true,
"skipLibCheck": true,
"forceConsistentCasingInFileNames": true,
"outDir": "./build",
"allowJs": true,
"module": "Node16",
"moduleResolution": "Node16",
"target": "ES2022"
},
"exclude": ["./__tests__/**/*"],
"include": [
"./controllers/**/*",
"./routes/**/*",
"./utils/**/*",
"./index.js"
]
}
37 changes: 37 additions & 0 deletions packages/server/types/index.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,37 @@
import * as Express from "express";
import { Send } from "express-serve-static-core";

/**
* @template T, V
* @param T - (optional) structure of request route parameters
* @param V - (optional) structure of request body
*
* void = optional generic parameters
*/
export type APIRequest<T = void, V = void> = Express.Request<T, any, V>;

/**
* @template T
* @param T - structure of response body
*/
export interface APIResponse<T = Record<string, any>> extends Express.Response {
json: Send<
SuccessResponseBody<T> | FailResponseBody<T> | ErrorResponseBody,
this
>;
}

type SuccessResponseBody<T = Record<string, any>> = {
status: "success";
data: T;
};

type FailResponseBody<T = Record<string, any>> = {
status: "fail";
data: Record<keyof T, string>;
};

type ErrorResponseBody = {
status: "error";
message: string;
};
17 changes: 0 additions & 17 deletions packages/server/utils/postgres.js

This file was deleted.

3 changes: 3 additions & 0 deletions packages/server/utils/prisma.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
import { PrismaClient } from "@prisma/client";
const prisma = new PrismaClient();
export default prisma;
26 changes: 0 additions & 26 deletions packages/server/utils/prismaTS.ts

This file was deleted.

Loading