Skip to content

Commit

Permalink
Fixed after Froborgs comments
Browse files Browse the repository at this point in the history
  • Loading branch information
Muncherkin committed Mar 19, 2024
1 parent 9e716f2 commit 3f9c2ed
Show file tree
Hide file tree
Showing 12 changed files with 241 additions and 80 deletions.
133 changes: 133 additions & 0 deletions prisma/data/activity.seed.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,133 @@
import { Prisma, PrismaActivitySource, PrismaUtskott } from '@prisma/client';

function getRandomDate(): Date {
const today = new Date();
const oneYearForward = new Date(today.getTime() + 365 * 24 * 60 * 60 * 1000); // Adding milliseconds for one year

const randomTime = today.getTime() + Math.random() * (oneYearForward.getTime() - today.getTime());
return new Date(randomTime);
}

export const activities: Prisma.PrismaActivityCreateInput[] = [
{
utskott: PrismaUtskott.CM,
source: PrismaActivitySource.WEBSITE,
title: 'Baktävling',
description:
'"Välkommen till vårt mysiga café där doften av nybakat bröd och kaffe möter dig i dörren. Varje dag bjuder vi på en smakupplevelse utöver det vanliga, och nu är det din chans att delta i vår spännande baktävling! Ge din kreativitet fria tyglar och skapa det perfekta bakverket som kommer att imponera på vår jury. Vem vet, kanske blir just din skapelse den nya favoriten på vårt café! Så plocka fram dina bästa recept och låt bakningen börja!"',
startDate: getRandomDate(),
imageUrl: 'https://esek.se/_app/immutable/assets/1-3fd67044.webp',
locationTitle: '',
locationLink: '',
},
{
utskott: PrismaUtskott.FVU,
source: PrismaActivitySource.WEBSITE,
title: 'Fixar-kväll',
description:
'Känn pulsen i vår fixar-kväll, där passion och kreativitet förenas i en atmosfär av skapande. Tillsammans bygger vi, skapar och inspireras av varandras projekt. Låt idéerna flöda och låt dina händer forma det du drömmer om. Kom och var en del av vår gemenskap för en oförglömlig kväll!',
startDate: getRandomDate(),
imageUrl: 'https://esek.se/_app/immutable/assets/1-3fd67044.webp',
locationTitle: '',
locationLink: '',
},
{
utskott: PrismaUtskott.INFU,
source: PrismaActivitySource.WEBSITE,
title: 'Hacker',
description:
'Välkommen till det ultimata hacker eventet där kreativitet och teknologi möts i en spännande atmosfär. Här samlas hackare från hela världen för att utforska nya gränser och lösa utmaningar. Ta del av inspirerande föreläsningar, knäck koder och skapa banbrytande innovationer tillsammans med oss!',
startDate: getRandomDate(),
imageUrl: 'https://esek.se/_app/immutable/assets/1-3fd67044.webp',
locationTitle: '',
locationLink: '',
},
{
utskott: PrismaUtskott.KM,
source: PrismaActivitySource.WEBSITE,
title: 'Gille',
description:
'"Välkommen till vårt gemytliga gille där vänner samlas för goda drycker och skrattfyllda stunder. Njut av vårt utbud av förfriskningar och klassiska rätter i en avslappnad atmosfär. Låt kvällen ta fart med livlig musik och härlig stämning. Kom och upplev en kväll att minnas på vårt charmiga gille!"',
startDate: getRandomDate(),
imageUrl: 'https://esek.se/_app/immutable/assets/1-3fd67044.webp',
locationTitle: '',
locationLink: '',
},
{
utskott: PrismaUtskott.NOLLU,
source: PrismaActivitySource.WEBSITE,
title: 'Regattan',
description:
'Känn spänningen på regattan, där havet blir slagfält och seglen sträcks mot vindens kraft. Deltagare från alla hörn av världen tävlar om ära och berömmelse i detta episka sjökrig. Stå öga mot öga med dina motståndare och visa din skicklighet på de vilda vågorna. Detta är inte bara en tävling, det är ett äventyr till havs!',
startDate: getRandomDate(),
imageUrl: 'https://esek.se/_app/immutable/assets/1-3fd67044.webp',
locationTitle: '',
locationLink: '',
},
{
utskott: PrismaUtskott.ENU,
source: PrismaActivitySource.WEBSITE,
title: 'Lunchföreläsning',
description:
'Välkommen till vår inspirerande lunchföreläsning där vi välkomnar ett ledande företag för att dela med sig av sin kunskap och erfarenhet. Njut av en lärorik stund med spännande insikter och möjligheter till nätverkande. Ge dig själv en energiboost mitt på dagen och låt dig inspireras av framgångsrika företagare.',
startDate: getRandomDate(),
imageUrl: 'https://esek.se/_app/immutable/assets/1-3fd67044.webp',
locationTitle: '',
locationLink: '',
},
{
utskott: PrismaUtskott.PENGU,
source: PrismaActivitySource.WEBSITE,
title: 'Bokföringskväll',
description:
'Det är dags att ta tag i bokföringen tillsammans! I vår grupp samlas vi för att effektivt hantera våra ekonomiska transaktioner och säkerställa noggrannheten i våra bokföringsposter. Med teamwork och noggrant arbete ser vi till att varje siffra landar rätt och att vår ekonomi är i balans.',
startDate: getRandomDate(),
imageUrl: 'https://esek.se/_app/immutable/assets/1-3fd67044.webp',
locationTitle: '',
locationLink: '',
},
{
utskott: PrismaUtskott.E6,
source: PrismaActivitySource.WEBSITE,
title: 'Sittning',
description:
'Välkommen till en kväll fylld av gemenskap och glädje! Vi öppnar våra dörrar för en minnesvärd sittning där vi samlas för god mat, gott sällskap och underhållande samtal. Låt oss skapa minnen tillsammans och njuta av en kväll att komma ihåg. Välkommen till vårt bord!',
startDate: getRandomDate(),
imageUrl: 'https://esek.se/_app/immutable/assets/1-3fd67044.webp',
locationTitle: '',
locationLink: '',
},
{
utskott: PrismaUtskott.SRE,
source: PrismaActivitySource.WEBSITE,
title: 'Pluggkväll',
description:
'Det är dags att sätta näsan i böckerna! Välkommen till vår pluggkväll där vi tillsammans fokuserar på att nå våra studiemål. Med lugn atmosfär och gemensamt stöd tar vi itu med utmaningarna och strävar efter framgång. Låt oss inspirera varandra till framsteg och lärande. Tillsammans når vi nya höjder!',
startDate: getRandomDate(),
imageUrl: 'https://esek.se/_app/immutable/assets/1-3fd67044.webp',
locationTitle: '',
locationLink: '',
},
{
utskott: PrismaUtskott.STYRELSEN,
source: PrismaActivitySource.WEBSITE,
title: 'Styrelsemöte',
description:
'Välkommen till vårt styrelsemöte där vi samlas för att diskutera strategier och fatta beslut för sektionens framtid. Med fokus och engagemang går vi igenom dagordningen och arbetar tillsammans mot gemensamma mål. Låt oss samarbeta för att forma en framgångsrik väg framåt. Mötet är nu öppnat!',
startDate: getRandomDate(),
imageUrl: 'https://esek.se/_app/immutable/assets/1-3fd67044.webp',
locationTitle: '',
locationLink: '',
},
{
utskott: PrismaUtskott.OTHER,
source: PrismaActivitySource.WEBSITE,
title: 'NolleGasque',
description:
'Välkomna till årets mest efterlängtade fest, NolleGasquen! En storslagen sittning där vi firar gemenskap, glädje och minnen för livet. Med uppdukade festligheter och en sprakande atmosfär skapar vi magiska ögonblick tillsammans. Låt oss fira studentlivet och välkomna de nya äventyren som väntar!',
startDate: getRandomDate(),
imageUrl: 'https://esek.se/_app/immutable/assets/1-3fd67044.webp',
locationTitle: '',
locationLink: '',
},
];
3 changes: 3 additions & 0 deletions prisma/data/seed.ts
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
import { PrismaClient } from '@prisma/client';

import { apiKeyAccess, apiKeys, individualAccess, postAccess } from './access.seed';
import { activities } from './activity.seed';
import { posts } from './post.seed';
import { users } from './user.seed';

Expand All @@ -19,6 +20,8 @@ const run = async () => {
prisma.prismaPostAccess.createMany({ data: postAccess, skipDuplicates: true }),
prisma.prismaApiKeyAccess.createMany({ data: apiKeyAccess, skipDuplicates: true }),
]);

await prisma.prismaActivity.createMany({ data: activities, skipDuplicates: true });
};

run()
Expand Down
3 changes: 2 additions & 1 deletion prisma/schema.prisma
Original file line number Diff line number Diff line change
Expand Up @@ -185,12 +185,13 @@ model PrismaActivity {
description String?
startDate DateTime @map("start_date")
endDate DateTime? @map("end_date")
utskott PrismaUtskott?
utskott PrismaUtskott
imageUrl String? @map("image_url")
locationTitle String? @map("location_title")
locationLink String? @map("location_link")
tickets PrismaTicket[]
}
//sourceUrl for link to event from other apps/websites.

model PrismaTicket {
id String @id @default(cuid())
Expand Down
67 changes: 44 additions & 23 deletions src/api/activity.api.ts
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@ import { BadRequestError, NotFoundError } from '@/errors/request.errors';
import { StrictObject } from '@/models/base';
import { devGuard, stripObject } from '@/util';
import { ModifiedActivity, NewActivity, Utskott } from '@generated/graphql';
import { Prisma, PrismaActivity, PrismaActivitySource } from '@prisma/client';
import { PrismaActivity, PrismaActivitySource } from '@prisma/client';

import prisma from './prisma';

Expand All @@ -23,14 +23,8 @@ export class ActivityAPI {
async getActivities(
from: Date,
to: Date,
utskott: Utskott[] | null | undefined,
utskott: Utskott[] = [Utskott.Other],
): Promise<PrismaActivity[]> {
const whereAnd: Prisma.PrismaActivityWhereInput[] = [];

if (utskott != null) {
whereAnd.push({ utskott: { in: utskott } });
}

const a = await prisma.prismaActivity.findMany({
where: {
startDate: {
Expand All @@ -44,7 +38,7 @@ export class ActivityAPI {
},
{ AND: [{ startDate: { gte: from } }, { endDate: null }] },
],
AND: whereAnd,
AND: { utskott: { in: utskott } },
},
orderBy: { startDate: 'asc' },
});
Expand All @@ -53,7 +47,17 @@ export class ActivityAPI {
}

async addActivity(activity: NewActivity): Promise<PrismaActivity> {
if (activity.endDate && activity.endDate.getTime() - activity.startDate.getTime() < 0) {
const isAcceptableTime = () => {
const { startDate, endDate } = activity;

if (!endDate) {
return true;
}

return endDate.getTime() - startDate.getTime() >= 0;
};

if (!isAcceptableTime()) {
throw new BadRequestError('Sluttid för aktivitet är före starttid!');
}

Expand All @@ -64,7 +68,7 @@ export class ActivityAPI {
description: activity.description,
startDate: activity.startDate,
endDate: activity.endDate,
utskott: activity.utskott as Utskott,
utskott: activity.utskott ?? Utskott.Other,
imageUrl: activity.imageUrl,
locationTitle: activity.location?.title,
locationLink: activity.location?.link,
Expand All @@ -73,27 +77,43 @@ export class ActivityAPI {

return res;
}
async modifyActivity(id: string, mod: ModifiedActivity): Promise<PrismaActivity> {
async modifyActivity(id: string, entry: ModifiedActivity): Promise<PrismaActivity> {
const a = await this.getActivity(id);
if (mod.endDate) {
if (mod.startDate && mod.endDate.getTime() - mod.startDate.getTime() < 0) {
throw new BadRequestError('Modifierad sluttid för aktivitet är före modifierad starttid!');
} else if (!mod.startDate && mod.endDate.getTime() - a.startDate.getTime() < 0) {
throw new BadRequestError('Modifierad sluttid för aktivitet är före starttiden!');

const isAcceptableTime = () => {
const { startDate, endDate } = entry;

if (endDate) {
if (startDate) {
return endDate.getTime() - startDate.getTime() >= 0;
}
return endDate.getTime() - a.startDate.getTime() >= 0;
} else if (startDate) {
if (!a.endDate) {
return true;
}
return a.endDate.getTime() - startDate.getTime() >= 0;
}

return true;
};

if (!isAcceptableTime()) {
throw new BadRequestError('Ny slut- och starttid för aktivitet är omöjlig!');
}

if (a.source !== PrismaActivitySource.WEBSITE) {
throw new BadRequestError(
'Ej tillåtet att ändra i evenemang som inte är skapade på hemsidan!',
);
}

const { location, ...reduced } = mod;
const { location, ...reduced } = entry;

const refact = {
...reduced,
locationTitle: mod.location?.title,
locationLink: mod.location?.link,
locationTitle: entry.location?.title,
locationLink: entry.location?.link,
};

const update: StrictObject = stripObject(refact);
Expand All @@ -105,15 +125,16 @@ export class ActivityAPI {
return res;
}

async removeActivity(id: string): Promise<boolean> {
async removeActivity(id: string): Promise<PrismaActivity> {
const a = await this.getActivity(id);
if (a.source !== PrismaActivitySource.WEBSITE) {
throw new BadRequestError(
'Ej tillåtet att ta bort evenemang som inte är skapade på hemsidan!',
);
}
await prisma.prismaActivity.delete({ where: { id } });
return true;
const res = await prisma.prismaActivity.delete({ where: { id } });

return res;
}

async clear() {
Expand Down
48 changes: 24 additions & 24 deletions src/api/ticket.api.ts
Original file line number Diff line number Diff line change
Expand Up @@ -35,15 +35,15 @@ export class TicketAPI {
}

async addTicket(ticket: NewTicket): Promise<PrismaTicket> {
if (ticket.activityID != null) {
try {
await activityApi.getActivity(ticket.activityID);
} catch {
throw new BadRequestError(
'Biljett kunde inte skapas! Specifierad activityID tillhörde inte någon activity.',
);
}
}
// if (ticket.activityID != null) {
// try {
// await activityApi.getActivity(ticket.activityID);
// } catch {
// throw new BadRequestError(
// 'Biljett kunde inte skapas! Specifierad activityID tillhörde inte någon activity.',
// );
// }
// }

const t = await prisma.prismaTicket.create({
data: {
Expand All @@ -58,20 +58,20 @@ export class TicketAPI {
return t;
}

async modifyTicket(id: string, mod: ModifiedTicket): Promise<PrismaTicket> {
async modifyTicket(id: string, entry: ModifiedTicket): Promise<PrismaTicket> {
await this.getTicket(id);

if (mod.activityID != null) {
try {
await activityApi.getActivity(mod.activityID);
} catch {
throw new BadRequestError(
'Biljett kunde inte modifieras! Modifierad activityID tillhörde inte någon activity.',
);
}
}

const { ...rest } = mod;
// if (mod.activityID != null) {
// try {
// await activityApi.getActivity(mod.activityID);
// } catch {
// throw new BadRequestError(
// 'Biljett kunde inte modifieras! Modifierad activityID tillhörde inte någon activity.',
// );
// }
// }

const { ...rest } = entry;
const update: StrictObject = stripObject(rest);

const t = prisma.prismaTicket.update({
Expand All @@ -82,11 +82,11 @@ export class TicketAPI {
return t;
}

async removeTicket(id: string): Promise<boolean> {
async removeTicket(id: string): Promise<PrismaTicket> {
await this.getTicket(id);

await prisma.prismaTicket.delete({ where: { id } });
return true;
const t = await prisma.prismaTicket.delete({ where: { id } });
return t;
}

async clear() {
Expand Down
Loading

0 comments on commit 3f9c2ed

Please sign in to comment.