feat: proper backend api for tournament

This commit is contained in:
MTG2000
2022-09-07 16:26:57 +03:00
parent 36636b5f0d
commit 0b51f16bbd
20 changed files with 243 additions and 133 deletions

View File

@@ -240,26 +240,20 @@ export interface NexusGenObjects {
cover_image: string; // String!
description: string; // String!
end_date: NexusGenScalars['Date']; // Date!
events: NexusGenRootTypes['TournamentEvent'][]; // [TournamentEvent!]!
events_count: number; // Int!
faqs: NexusGenRootTypes['TournamentFAQ'][]; // [TournamentFAQ!]!
id: number; // Int!
judges: NexusGenRootTypes['TournamentJudge'][]; // [TournamentJudge!]!
location: string; // String!
prizes: NexusGenRootTypes['TournamentPrize'][]; // [TournamentPrize!]!
projects_count: number; // Int!
start_date: NexusGenScalars['Date']; // Date!
thumbnail_image: string; // String!
title: string; // String!
website: string; // String!
}
TournamentEvent: { // root type
date: NexusGenScalars['Date']; // Date!
description: string; // String!
ends_at: NexusGenScalars['Date']; // Date!
id: number; // Int!
image: string; // String!
links: string[]; // [String!]!
location: string; // String!
starts_at: NexusGenScalars['Date']; // Date!
title: string; // String!
type: NexusGenEnums['TournamentEventTypeEnum']; // TournamentEventTypeEnum!
website: string; // String!
@@ -270,7 +264,7 @@ export interface NexusGenObjects {
}
TournamentJudge: { // root type
avatar: string; // String!
jobTitle: string; // String!
company: string; // String!
name: string; // String!
}
TournamentMakersResponse: { // root type
@@ -569,12 +563,13 @@ export interface NexusGenFieldTypes {
website: string; // String!
}
TournamentEvent: { // field return type
date: NexusGenScalars['Date']; // Date!
description: string; // String!
ends_at: NexusGenScalars['Date']; // Date!
id: number; // Int!
image: string; // String!
links: string[]; // [String!]!
location: string; // String!
starts_at: NexusGenScalars['Date']; // Date!
title: string; // String!
type: NexusGenEnums['TournamentEventTypeEnum']; // TournamentEventTypeEnum!
website: string; // String!
@@ -585,7 +580,7 @@ export interface NexusGenFieldTypes {
}
TournamentJudge: { // field return type
avatar: string; // String!
jobTitle: string; // String!
company: string; // String!
name: string; // String!
}
TournamentMakersResponse: { // field return type
@@ -907,12 +902,13 @@ export interface NexusGenFieldTypeNames {
website: 'String'
}
TournamentEvent: { // field return type name
date: 'Date'
description: 'String'
ends_at: 'Date'
id: 'Int'
image: 'String'
links: 'String'
location: 'String'
starts_at: 'Date'
title: 'String'
type: 'TournamentEventTypeEnum'
website: 'String'
@@ -923,7 +919,7 @@ export interface NexusGenFieldTypeNames {
}
TournamentJudge: { // field return type name
avatar: 'String'
jobTitle: 'String'
company: 'String'
name: 'String'
}
TournamentMakersResponse: { // field return type name

View File

@@ -347,12 +347,13 @@ type Tournament {
}
type TournamentEvent {
date: Date!
description: String!
ends_at: Date!
id: Int!
image: String!
links: [String!]!
location: String!
starts_at: Date!
title: String!
type: TournamentEventTypeEnum!
website: String!
@@ -372,7 +373,7 @@ type TournamentFAQ {
type TournamentJudge {
avatar: String!
jobTitle: String!
company: String!
name: String!
}

View File

@@ -24,7 +24,7 @@ const TournamentJudge = objectType({
name: 'TournamentJudge',
definition(t) {
t.nonNull.string('name');
t.nonNull.string('jobTitle');
t.nonNull.string('company');
t.nonNull.string('avatar');
}
})
@@ -57,11 +57,12 @@ const TournamentEvent = objectType({
t.nonNull.string('title');
t.nonNull.string('image');
t.nonNull.string('description');
t.nonNull.date('date');
t.nonNull.date('starts_at');
t.nonNull.date('ends_at');
t.nonNull.string('location');
t.nonNull.string('website');
t.nonNull.field('type', { type: TournamentEventTypeEnum })
t.nonNull.list.nonNull.string('links');
t.nonNull.list.nonNull.string('links', { resolve() { return [] } });
}
})
@@ -78,18 +79,58 @@ const Tournament = objectType({
t.nonNull.string('location');
t.nonNull.string('website');
t.nonNull.int('events_count');
t.nonNull.int('makers_count', {
t.nonNull.int('events_count', {
resolve(parent) {
return prisma.user.count();
return prisma.tournamentEvent.count({
where: {
tournament_id: parent.id
}
})
}
});
t.nonNull.int('makers_count', {
resolve(parent) {
return prisma.tournamentParticipant.count({
where: {
tournament_id: parent.id
}
})
}
});
t.nonNull.int('projects_count', {
resolve(parent) {
return prisma.tournamentProject.count({
where: {
tournament_id: parent.id
}
})
}
});
t.nonNull.int('projects_count');
t.nonNull.list.nonNull.field('prizes', { type: TournamentPrize, });
t.nonNull.list.nonNull.field('judges', { type: TournamentJudge, });
t.nonNull.list.nonNull.field('faqs', { type: TournamentFAQ, });
t.nonNull.list.nonNull.field('events', { type: TournamentEvent, });
t.nonNull.list.nonNull.field('prizes', {
type: TournamentPrize,
resolve(parent) {
return prisma.tournament.findUnique({ where: { id: parent.id } }).prizes()
}
});
t.nonNull.list.nonNull.field('judges', {
type: TournamentJudge,
resolve(parent) {
return prisma.tournament.findUnique({ where: { id: parent.id } }).judges()
}
});
t.nonNull.list.nonNull.field('faqs', {
type: TournamentFAQ,
resolve(parent) {
return prisma.tournament.findUnique({ where: { id: parent.id } }).faqs()
}
});
t.nonNull.list.nonNull.field('events', {
type: TournamentEvent,
resolve(parent) {
return prisma.tournament.findUnique({ where: { id: parent.id } }).events()
}
});
}
})
@@ -125,7 +166,9 @@ const getTournamentById = extendType({
id: nonNull(intArg()),
},
resolve(_, { id }) {
return null
return prisma.tournament.findUnique({
where: { id }
})
}
})
}
@@ -175,16 +218,23 @@ const getMakersInTournament = extendType({
}
})
const makers = await prisma.user.findMany({
...(filters.length > 0 && {
where: {
AND: filters
}
}),
const makers = (await prisma.tournamentParticipant.findMany({
where: {
tournament_id: args.tournamentId,
...(filters.length > 0 && {
user: {
AND: filters
}
})
},
include: {
user: true,
},
skip: args.skip,
take: args.take + 1,
});
})).map(item => item.user)
return {
hasNext: makers.length === args.take + 1,
@@ -230,24 +280,34 @@ const getProjectsInTournament = extendType({
})
if (args.roleId) filters.push({
recruit_roles: {
some: {
roleId: args.roleId
}
}
})
// if (args.roleId) filters.push({
// recruit_roles: {
// some: {
// roleId: args.roleId
// }
// }
// })
const projects = await prisma.project.findMany({
...(filters.length > 0 && {
where: {
AND: filters
}
}),
const projects = (await prisma.tournamentProject.findMany({
where: {
tournament_id: args.tournamentId,
...(filters.length > 0 && {
project: {
AND: filters
}
})
},
include: {
project: true,
},
skip: args.skip,
take: args.take + 1,
});
})).map(item => item.project)
console.log();
return {
hasNext: projects.length === args.take + 1,