From c3fa25fa0de7120a8a27642ab767b9d487f92557 Mon Sep 17 00:00:00 2001 From: leonnicolas Date: Thu, 19 Nov 2020 18:51:40 +0100 Subject: [PATCH] src/*: dont requiere limit and offset on queries On Queries like cargoBikes(offset: Int, limit: Int), offset and limit does not need to be passed anymore. When either is not passed, both values are ignored. --- src/datasources/db/cargobikeAPI.ts | 76 ++++++++++---------- src/datasources/db/contactinformationAPI.ts | 20 ++---- src/datasources/db/lendingstationAPI.ts | 21 ++---- src/datasources/db/participantAPI.ts | 58 +++++++-------- src/datasources/db/providerAPI.ts | 20 ++---- src/datasources/db/utils.ts | 16 +++++ src/datasources/db/workshopAPI.ts | 20 ++---- src/resolvers/cargoBikeResolver.ts | 26 ++++--- src/resolvers/contactInformationResolvers.ts | 4 +- src/resolvers/lendingStationResolvers.ts | 4 +- src/resolvers/participantResolvers.ts | 6 +- src/resolvers/providerResolvers.ts | 4 +- src/resolvers/workshopResolvers.ts | 4 +- src/schema/type-defs.ts | 38 +++++----- 14 files changed, 146 insertions(+), 171 deletions(-) diff --git a/src/datasources/db/cargobikeAPI.ts b/src/datasources/db/cargobikeAPI.ts index 75d2c84..4fbbc44 100644 --- a/src/datasources/db/cargobikeAPI.ts +++ b/src/datasources/db/cargobikeAPI.ts @@ -26,7 +26,7 @@ import { Equipment } from '../../model/Equipment'; import { Engagement } from '../../model/Engagement'; import { Provider } from '../../model/Provider'; import { TimeFrame } from '../../model/TimeFrame'; -import { ActionLogger, deleteEntity, LockUtils } from './utils'; +import { ActionLogger, deleteEntity, getAllEntity, LockUtils } from './utils'; import { EquipmentType } from '../../model/EquipmentType'; import { BikeEventType } from '../../model/BikeEventType'; import { UserInputError } from 'apollo-server-express'; @@ -42,14 +42,8 @@ export class CargoBikeAPI extends DataSource { this.connection = getConnection(); } - async getCargoBikes (offset: number, limit: number) { - return await this.connection.createQueryBuilder() - .select('cargoBike') - .from(CargoBike, 'cargoBike') - .orderBy('name', 'ASC') - .offset(offset) - .limit(limit) - .getMany(); + async getCargoBikes (offset?: number, limit?: number) { + return await getAllEntity(this.connection, CargoBike, 'cb', offset, limit); } /** @@ -221,14 +215,22 @@ export class CargoBikeAPI extends DataSource { .loadOne(); } - async bikeEventsByCargoBikeId (id: number, offset: number = 0, limit:number = 100) { - return await this.connection.getRepository(CargoBike) - .createQueryBuilder('cb') - .skip(offset) - .take(limit) - .relation(CargoBike, 'bikeEvents') - .of(id) - .loadMany(); + async bikeEventsByCargoBikeId (id: number, offset?: number, limit?: number) { + if (offset === null || limit === null) { + return await this.connection.getRepository(CargoBike) + .createQueryBuilder('cb') + .relation(CargoBike, 'bikeEvents') + .of(id) + .loadMany(); + } else { + return await this.connection.getRepository(CargoBike) + .createQueryBuilder('cb') + .skip(offset) + .take(limit) + .relation(CargoBike, 'bikeEvents') + .of(id) + .loadMany(); + } } async createBikeEventType (bikeEventType: any) { @@ -267,22 +269,12 @@ export class CargoBikeAPI extends DataSource { return await this.bikeEventTypeById(bikeEventType.id); } - async bikeEventTypes (offset: number, limit: number) { - return await this.connection.getRepository(BikeEventType) - .createQueryBuilder('bet') - .select() - .skip(offset) - .take(limit) - .getMany(); + async bikeEventTypes (offset?: number, limit?: number) { + return await getAllEntity(this.connection, BikeEventType, 'bet', offset, limit); } - async bikeEvents (offset: number, limit: number) { - return await this.connection.getRepository(BikeEvent) - .createQueryBuilder('be') - .select() - .skip(offset) - .take(limit) - .getMany(); + async bikeEvents (offset?: number, limit?: number) { + return await getAllEntity(this.connection, BikeEvent, 'be', offset, limit); } async bikeEventTypeById (id: number) { @@ -343,12 +335,22 @@ export class CargoBikeAPI extends DataSource { * @param limit * @param id */ - async equipmentByCargoBikeId (offset: number, limit: number, id: number) { - return await this.connection.getRepository(Equipment) - .createQueryBuilder('equipment') - .select() - .where('equipment."cargoBikeId" = :id', { id: id }) - .getMany(); + async equipmentByCargoBikeId (id: number, offset?: number, limit?: number) { + if (offset == null || limit === null) { + return await this.connection.getRepository(Equipment) + .createQueryBuilder('equipment') + .select() + .where('equipment."cargoBikeId" = :id', { id: id }) + .getMany(); + } else { + return await this.connection.getRepository(Equipment) + .createQueryBuilder('equipment') + .select() + .where('equipment."cargoBikeId" = :id', { id: id }) + .skip(offset) + .take(limit) + .getMany(); + } } async createEquipment ({ equipment }: { equipment: any }) { diff --git a/src/datasources/db/contactinformationAPI.ts b/src/datasources/db/contactinformationAPI.ts index 767b740..a2312db 100644 --- a/src/datasources/db/contactinformationAPI.ts +++ b/src/datasources/db/contactinformationAPI.ts @@ -21,7 +21,7 @@ import { DataSource } from 'apollo-datasource'; import { Connection, EntityManager, getConnection } from 'typeorm'; import { ContactInformation } from '../../model/ContactInformation'; import { Person } from '../../model/Person'; -import { ActionLogger, deleteEntity, LockUtils } from './utils'; +import { ActionLogger, deleteEntity, getAllEntity, LockUtils } from './utils'; import { GraphQLError } from 'graphql'; import { LendingStation } from '../../model/LendingStation'; @@ -32,13 +32,8 @@ export class ContactInformationAPI extends DataSource { this.connection = getConnection(); } - async contactInformation (offset: number, limit: number) { - return await this.connection.getRepository(ContactInformation) - .createQueryBuilder('ci') - .select() - .offset(offset) - .limit(limit) - .getMany(); + async contactInformation (offset?: number, limit?: number) { + return await getAllEntity(this.connection, ContactInformation, 'ci', offset, limit); } async contactInformationById (id: number) { @@ -91,13 +86,8 @@ export class ContactInformationAPI extends DataSource { return await deleteEntity(this.connection, Person, 'p', id, userId); } - async persons (offset: number, limit: number) { - return await this.connection.getRepository(Person) - .createQueryBuilder('person') - .select() - .skip(offset) - .take(limit) - .getMany(); + async persons (offset?: number, limit?: number) { + return await getAllEntity(this.connection, Person, 'p', offset, limit); } async personById (id: number) { diff --git a/src/datasources/db/lendingstationAPI.ts b/src/datasources/db/lendingstationAPI.ts index 3df03e1..9b3e53f 100644 --- a/src/datasources/db/lendingstationAPI.ts +++ b/src/datasources/db/lendingstationAPI.ts @@ -24,7 +24,7 @@ import { Connection, EntityManager, getConnection } from 'typeorm'; import { CargoBike } from '../../model/CargoBike'; import { LendingStation } from '../../model/LendingStation'; import { TimeFrame } from '../../model/TimeFrame'; -import { ActionLogger, deleteEntity, genDateRange, LockUtils } from './utils'; +import { ActionLogger, deleteEntity, genDateRange, getAllEntity, LockUtils } from './utils'; export class LendingStationAPI extends DataSource { connection : Connection @@ -44,14 +44,8 @@ export class LendingStationAPI extends DataSource { /** * get all lendingStations */ - async lendingStations (offset: number, limit: number) { - return await this.connection.getRepository(LendingStation) - .createQueryBuilder('lendingStation') - .select() - .offset(offset) - .limit(limit) - .orderBy('name', 'ASC') - .getMany() || new GraphQLError('Internal Server Error: could not query data from table lendingStation'); + async lendingStations (offset?: number, limit?: number) { + return await getAllEntity(this.connection, LendingStation, 'ls', offset, limit); } /** @@ -79,13 +73,8 @@ export class LendingStationAPI extends DataSource { .loadOne(); } - async timeFrames (offset: number, limit: number) { - return await this.connection.getRepository(TimeFrame) - .createQueryBuilder('timeframe') - .select() - .offset(offset) - .limit(limit) - .getMany() || []; + async timeFrames (offset?: number, limit?: number) { + return await getAllEntity(this.connection, TimeFrame, 'tf', offset, limit); } async timeFramesByCargoBikeId (id: number) { diff --git a/src/datasources/db/participantAPI.ts b/src/datasources/db/participantAPI.ts index e481acc..d492e55 100644 --- a/src/datasources/db/participantAPI.ts +++ b/src/datasources/db/participantAPI.ts @@ -23,7 +23,7 @@ import { ContactInformation } from '../../model/ContactInformation'; import { Engagement } from '../../model/Engagement'; import { Participant } from '../../model/Participant'; import { EngagementType } from '../../model/EngagementType'; -import { ActionLogger, deleteEntity, genDateRange, LockUtils } from './utils'; +import { ActionLogger, deleteEntity, genDateRange, getAllEntity, LockUtils } from './utils'; import { UserInputError } from 'apollo-server-express'; import { GraphQLError } from 'graphql'; @@ -42,13 +42,8 @@ export class ParticipantAPI extends DataSource { .getOne(); } - async getParticipants (offset: number, limit: number) { - return await this.connection.getRepository(Participant) - .createQueryBuilder('participant') - .select() - .offset(offset) - .limit(limit) - .getMany(); + async getParticipants (offset?: number, limit?: number) { + return await getAllEntity(this.connection, Participant, 'p', offset, limit); } async participantByEngagementId (id: number) { @@ -84,17 +79,24 @@ export class ParticipantAPI extends DataSource { .getMany(); } - async engagementByCargoBikeId (offset: number, limit: number, id: number) { - return await this.connection.getRepository(Engagement) - .createQueryBuilder('engagement') - .select() - .where('engagement."cargoBikeId" = :id', { - id: id - }) - .skip(offset) - .take(limit) - .orderBy('engagement."dateRange"', 'DESC') - .getMany(); + async engagementByCargoBikeId (id: number, offset?: number, limit?: number) { + if (limit === null || offset === null) { + return await this.connection.getRepository(Engagement) + .createQueryBuilder('engagement') + .select() + .where('engagement."cargoBikeId" = :id', { id: id }) + .orderBy('engagement."dateRange"', 'DESC') + .getMany(); + } else { + return await this.connection.getRepository(Engagement) + .createQueryBuilder('engagement') + .select() + .where('engagement."cargoBikeId" = :id', { id: id }) + .skip(offset) + .take(limit) + .orderBy('engagement."dateRange"', 'DESC') + .getMany(); + } } async currentEngagementByCargoBikeId (id: number) { @@ -107,13 +109,8 @@ export class ParticipantAPI extends DataSource { .getMany(); } - async engagements (offset: number, limit: number) { - return await this.connection.getRepository(Engagement) - .createQueryBuilder('e') - .select() - .skip(offset) - .take(limit) - .getMany(); + async engagements (offset?: number, limit?: number) { + return await getAllEntity(this.connection, Engagement, 'e', offset, limit); } async engagementById (id: number) { @@ -132,13 +129,8 @@ export class ParticipantAPI extends DataSource { .getOne(); } - async engagementTypes (offset: number, limit: number) { - return await this.connection.getRepository(EngagementType) - .createQueryBuilder('et') - .select() - .skip(offset) - .take(limit) - .getMany(); + async engagementTypes (offset?: number, limit?: number) { + return await getAllEntity(this.connection, Engagement, 'e', offset, limit); } async engagementTypeByEngagementId (id: number) { diff --git a/src/datasources/db/providerAPI.ts b/src/datasources/db/providerAPI.ts index d8e2c9c..dd9511c 100644 --- a/src/datasources/db/providerAPI.ts +++ b/src/datasources/db/providerAPI.ts @@ -24,7 +24,7 @@ import { Organisation } from '../../model/Organisation'; import { UserInputError } from 'apollo-server-express'; import { CargoBike } from '../../model/CargoBike'; import { LendingStation } from '../../model/LendingStation'; -import { ActionLogger, deleteEntity, LockUtils } from './utils'; +import { ActionLogger, deleteEntity, getAllEntity, LockUtils } from './utils'; import { GraphQLError } from 'graphql'; export class ProviderAPI extends DataSource { @@ -42,13 +42,8 @@ export class ProviderAPI extends DataSource { .getOne(); } - async provider (offset: number, limit: number) { - return await this.connection.getRepository(Provider) - .createQueryBuilder('provider') - .select() - .skip(offset) - .take(limit) - .getMany(); + async provider (offset?: number, limit?: number) { + return await getAllEntity(this.connection, Provider, 'p', offset, limit); } async providerByOrganisationId (id: number) { @@ -75,13 +70,8 @@ export class ProviderAPI extends DataSource { .loadOne(); } - async organisations (offset: number, limit: number) { - return await this.connection.getRepository(Organisation) - .createQueryBuilder('o') - .select() - .skip(offset) - .limit(limit) - .getMany(); + async organisations (offset?: number, limit?: number) { + return await getAllEntity(this.connection, Organisation, 'o', offset, limit); } async organisationById (id: number) { diff --git a/src/datasources/db/utils.ts b/src/datasources/db/utils.ts index 8c56441..43e3554 100644 --- a/src/datasources/db/utils.ts +++ b/src/datasources/db/utils.ts @@ -64,6 +64,22 @@ export async function deleteEntity (connection: Connection, target: ObjectType, alias: string, offset?: number, limit?: number) { + if (offset === null || limit === null) { + return await connection.getRepository(target) + .createQueryBuilder(alias) + .select() + .getMany(); + } else { + return await connection.getRepository(target) + .createQueryBuilder(alias) + .select() + .skip(offset) + .take(limit) + .getMany(); + } +} + export class LockUtils { static async findById (connection: Connection, target: ObjectType, alias: string, id: number): Promise { return await connection.getRepository(target) diff --git a/src/datasources/db/workshopAPI.ts b/src/datasources/db/workshopAPI.ts index 62b0d07..7c28cd2 100644 --- a/src/datasources/db/workshopAPI.ts +++ b/src/datasources/db/workshopAPI.ts @@ -21,7 +21,7 @@ import { DataSource } from 'apollo-datasource'; import { Connection, EntityManager, getConnection } from 'typeorm'; import { WorkshopType } from '../../model/WorkshopType'; import { Workshop } from '../../model/Workshop'; -import { ActionLogger, deleteEntity, LockUtils } from './utils'; +import { ActionLogger, deleteEntity, getAllEntity, LockUtils } from './utils'; import { UserInputError } from 'apollo-server-express'; import { GraphQLError } from 'graphql'; import { Participant } from '../../model/Participant'; @@ -126,13 +126,8 @@ export class WorkshopAPI extends DataSource { .getOne(); } - async workshopTypes (offset: number, limit: number) { - return await this.connection.getRepository(WorkshopType) - .createQueryBuilder('w') - .select() - .skip(offset) - .take(limit) - .getMany(); + async workshopTypes (offset?: number, limit?: number) { + return getAllEntity(this.connection, WorkshopType, 'wt', offset, limit); } async workshopById (id: number) { @@ -148,13 +143,8 @@ export class WorkshopAPI extends DataSource { * @param offset * @param limit */ - async workshops (offset: number, limit: number) { - return await this.connection.getRepository(Workshop) - .createQueryBuilder('w') - .select() - .skip(offset) - .take(limit) - .getMany(); + async workshops (offset?: number, limit?: number) { + return await getAllEntity(this.connection, Workshop, 'w', offset, limit); } async trainer1ByWorkshopId (id: number) { diff --git a/src/resolvers/cargoBikeResolver.ts b/src/resolvers/cargoBikeResolver.ts index 6793783..38ced74 100644 --- a/src/resolvers/cargoBikeResolver.ts +++ b/src/resolvers/cargoBikeResolver.ts @@ -30,14 +30,14 @@ export default { return new GraphQLError('Insufficient Permissions'); } }, - cargoBikes: (_: any, { offset, limit }: { offset: number, limit: number }, { dataSources, req }: { dataSources: any, req: any }) => { + cargoBikes: (_: any, { offset, limit }: { offset?: number, limit?: number }, { dataSources, req }: { dataSources: any, req: any }) => { if (req.permissions.includes(Permission.ReadBike)) { return dataSources.cargoBikeAPI.getCargoBikes(offset, limit); } else { return new GraphQLError('Insufficient Permissions'); } }, - bikeEvents: (_:any, { offset, limit }: { offset: number, limit: number }, { dataSources, req }: { dataSources: any, req: any }) => { + bikeEvents: (_:any, { offset, limit }: { offset?: number, limit?: number }, { dataSources, req }: { dataSources: any, req: any }) => { if (req.permissions.includes(Permission.ReadBikeEvent)) { return dataSources.cargoBikeAPI.bikeEvents(offset, limit); } else { @@ -58,14 +58,14 @@ export default { return new GraphQLError('Insufficient Permissions'); } }, - bikeEventTypes: (_:any, { offset, limit }: { offset: number, limit: number }, { dataSources, req }: { dataSources: any, req: any }) => { + bikeEventTypes: (_:any, { offset, limit }: { offset?: number, limit?: number }, { dataSources, req }: { dataSources: any, req: any }) => { if (req.permissions.includes(Permission.ReadBikeEvent)) { return dataSources.cargoBikeAPI.bikeEventTypes(offset, limit); } else { return new GraphQLError('Insufficient Permissions'); } }, - equipment: (_:any, { offset, limit }: { offset: number, limit: number }, { dataSources, req }: { dataSources: any, req: any }) => { + equipment: (_:any, { offset, limit }: { offset?: number, limit?: number }, { dataSources, req }: { dataSources: any, req: any }) => { if (req.permissions.includes(Permission.ReadEquipment)) { return dataSources.cargoBikeAPI.getEquipment(offset, limit); } else { @@ -79,7 +79,7 @@ export default { return new GraphQLError('Insufficient Permissions'); } }, - equipmentTypes: (_:any, { offset, limit }: { offset: number, limit: number }, { dataSources, req }: { dataSources: any, req: any }) => { + equipmentTypes: (_:any, { offset, limit }: { offset?: number, limit?: number }, { dataSources, req }: { dataSources: any, req: any }) => { if (req.permissions.includes(Permission.ReadEquipment)) { return dataSources.cargoBikeAPI.equipmentTypes(offset, limit); } else { @@ -102,23 +102,23 @@ export default { return new GraphQLError('Insufficient Permissions'); } }, - engagement (parent: any, { offset, limit }: { offset: number, limit: number }, { dataSources, req }: { dataSources: any, req: any }) { + engagement (parent: any, { offset, limit }: { offset?: number, limit?: number }, { dataSources, req }: { dataSources: any, req: any }) { if (req.permissions.includes(Permission.ReadEngagement)) { - return dataSources.participantAPI.engagementByCargoBikeId(offset, limit, parent.id); + return dataSources.participantAPI.engagementByCargoBikeId(parent.id, offset, limit); } else { return new GraphQLError('Insufficient Permissions'); } }, - participants (parent: any, { offset, limit }: { offset: number, limit: number }, { dataSources, req }: { dataSources: any, req: any }) { // TODO should be done with engagements + participants (parent: any, { offset, limit }: { offset?: number, limit?: number }, { dataSources, req }: { dataSources: any, req: any }) { // TODO should be done with engagements if (req.permissions.includes(Permission.ReadParticipant)) { return dataSources.participantAPI.participantsByCargoBikeId(parent.id); } else { return new GraphQLError('Insufficient Permissions'); } }, - equipment (parent: any, { offset, limit }: { offset: number, limit: number }, { dataSources, req }: { dataSources: any, req: any }) { + equipment (parent: any, { offset, limit }: { offset?: number, limit?: number }, { dataSources, req }: { dataSources: any, req: any }) { if (req.permissions.includes(Permission.ReadEquipment)) { - return dataSources.cargoBikeAPI.equipmentByCargoBikeId(offset, limit, parent.id); + return dataSources.cargoBikeAPI.equipmentByCargoBikeId(parent.id, offset, limit); } else { return new GraphQLError('Insufficient Permissions'); } @@ -130,7 +130,7 @@ export default { return new GraphQLError('Insufficient Permissions'); } }, - bikeEvents (parent: any, { offset, limit }: { offset: number, limit: number }, { dataSources, req }: { dataSources: any, req: any }) { + bikeEvents (parent: any, { offset, limit }: { offset?: number, limit?: number }, { dataSources, req }: { dataSources: any, req: any }) { if (req.permissions.includes(Permission.ReadBikeEvent)) { return dataSources.cargoBikeAPI.bikeEventsByCargoBikeId(parent.id, offset, limit); } else { @@ -173,6 +173,10 @@ export default { isLockedByMe: (parent: any, __: any, { req }: { req: any }) => isLockedByMe(parent, { req }), isLocked: (parent: any, __: any, { req }: { req: any }) => isLocked(parent, { req }) }, + EquipmentType: { + isLockedByMe: (parent: any, __: any, { req }: { req: any }) => isLockedByMe(parent, { req }), + isLocked: (parent: any, __: any, { req }: { req: any }) => isLocked(parent, { req }) + }, BikeEvent: { cargoBike (parent: any, __: any, { dataSources, req }: { dataSources: any, req: any }) { if (req.permissions.includes(Permission.ReadBike)) { diff --git a/src/resolvers/contactInformationResolvers.ts b/src/resolvers/contactInformationResolvers.ts index 0222875..6743ca7 100644 --- a/src/resolvers/contactInformationResolvers.ts +++ b/src/resolvers/contactInformationResolvers.ts @@ -24,7 +24,7 @@ import { isLocked, isLockedByMe } from '../datasources/db/utils'; export default { Query: { - contactInformation: (_: any, { offset, limit }: { offset: number, limit: number }, { dataSources, req }: { dataSources: any, req: any }) => { + contactInformation: (_: any, { offset, limit }: { offset?: number, limit?: number }, { dataSources, req }: { dataSources: any, req: any }) => { if (req.permissions.includes(Permission.ReadPerson)) { return dataSources.contactInformationAPI.contactInformation(offset, limit); } else { @@ -45,7 +45,7 @@ export default { return new GraphQLError('Insufficient Permissions'); } }, - persons: (_: any, { offset, limit }: { offset: number, limit: number }, { dataSources, req }: { dataSources: any, req: any }) => { + persons: (_: any, { offset, limit }: { offset?: number, limit?: number }, { dataSources, req }: { dataSources: any, req: any }) => { if (req.permissions.includes(Permission.ReadPerson)) { return dataSources.contactInformationAPI.persons(offset, limit); } else { diff --git a/src/resolvers/lendingStationResolvers.ts b/src/resolvers/lendingStationResolvers.ts index b15042d..eb26f62 100644 --- a/src/resolvers/lendingStationResolvers.ts +++ b/src/resolvers/lendingStationResolvers.ts @@ -31,7 +31,7 @@ export default { return new GraphQLError('Insufficient Permissions'); } }, - lendingStations: (_: any, { offset, limit }: { offset: number, limit: number }, { dataSources, req }: { dataSources: any, req: any }) => { + lendingStations: (_: any, { offset, limit }: { offset?: number, limit?: number }, { dataSources, req }: { dataSources: any, req: any }) => { if (req.permissions.includes(Permission.ReadLendingStation)) { return dataSources.lendingStationAPI.lendingStations(offset, limit); } else { @@ -45,7 +45,7 @@ export default { return new GraphQLError('Insufficient Permissions'); } }, - timeFrames: (_: any, { offset, limit }: { offset: number, limit: number }, { dataSources, req }: { dataSources: any, req: any }) => { + timeFrames: (_: any, { offset, limit }: { offset?: number, limit?: number }, { dataSources, req }: { dataSources: any, req: any }) => { if (req.permissions.includes(Permission.ReadTimeFrame)) { return dataSources.lendingStationAPI.timeFrames(offset, limit); } else { diff --git a/src/resolvers/participantResolvers.ts b/src/resolvers/participantResolvers.ts index eaa9608..ed058e1 100644 --- a/src/resolvers/participantResolvers.ts +++ b/src/resolvers/participantResolvers.ts @@ -30,7 +30,7 @@ export default { return new GraphQLError('Insufficient Permissions'); } }, - participants: (_: any, { offset, limit }: { offset: number, limit: number }, { dataSources, req }: { dataSources: any, req: any }) => { + participants: (_: any, { offset, limit }: { offset?: number, limit?: number }, { dataSources, req }: { dataSources: any, req: any }) => { if (req.permissions.includes(Permission.ReadParticipant)) { return dataSources.participantAPI.getParticipants(offset, limit); } else { @@ -44,7 +44,7 @@ export default { return new GraphQLError('Insufficient Permissions'); } }, - engagements: (_: any, { offset, limit }: { offset: number, limit: number }, { dataSources, req }: { dataSources: any, req: any }) => { + engagements: (_: any, { offset, limit }: { offset?: number, limit?: number }, { dataSources, req }: { dataSources: any, req: any }) => { if (req.permissions.includes(Permission.ReadEngagement)) { return dataSources.participantAPI.engagements(offset, limit); } else { @@ -58,7 +58,7 @@ export default { return new GraphQLError('Insufficient Permissions'); } }, - engagementTypes: (_: any, { offset, limit }: { offset: number, limit: number }, { dataSources, req }: { dataSources: any, req: any }) => { + engagementTypes: (_: any, { offset, limit }: { offset?: number, limit?: number }, { dataSources, req }: { dataSources: any, req: any }) => { if (req.permissions.includes(Permission.ReadEngagement)) { return dataSources.participantAPI.engagementTypes(offset, limit); } else { diff --git a/src/resolvers/providerResolvers.ts b/src/resolvers/providerResolvers.ts index 09f622f..8e48e3d 100644 --- a/src/resolvers/providerResolvers.ts +++ b/src/resolvers/providerResolvers.ts @@ -23,7 +23,7 @@ import { isLocked, isLockedByMe } from '../datasources/db/utils'; export default { Query: { - providers: (_: any, { offset, limit }: { offset: number, limit: number }, { dataSources, req }: { dataSources: any, req: any }) => { + providers: (_: any, { offset, limit }: { offset?: number, limit?: number }, { dataSources, req }: { dataSources: any, req: any }) => { if (req.permissions.includes(Permission.ReadProvider)) { return dataSources.providerAPI.provider(offset, limit); } else { @@ -37,7 +37,7 @@ export default { return new GraphQLError('Insufficient Permissions'); } }, - organisations: (_: any, { offset, limit }: { offset: number, limit: number }, { dataSources, req }: { dataSources: any, req: any }) => { + organisations: (_: any, { offset, limit }: { offset?: number, limit?: number }, { dataSources, req }: { dataSources: any, req: any }) => { if (req.permissions.includes(Permission.ReadOrganisation)) { return dataSources.providerAPI.organisations(offset, limit); } else { diff --git a/src/resolvers/workshopResolvers.ts b/src/resolvers/workshopResolvers.ts index b51a2be..38ad82f 100644 --- a/src/resolvers/workshopResolvers.ts +++ b/src/resolvers/workshopResolvers.ts @@ -31,7 +31,7 @@ export default { return new GraphQLError('Insufficient Permissions'); } }, - workshopTypes: (_: any, { offset, limit }: { offset: number, limit: number }, { dataSources, req }: { dataSources: any, req: any }) => { + workshopTypes: (_: any, { offset, limit }: { offset?: number, limit?: number }, { dataSources, req }: { dataSources: any, req: any }) => { if (req.permissions.includes(Permission.ReadWorkshop)) { return dataSources.workshopAPI.workshopTypes(offset, limit); } else { @@ -45,7 +45,7 @@ export default { return new GraphQLError('Insufficient Permissions'); } }, - workshops: (_: any, { offset, limit }: { offset: number, limit: number }, { dataSources, req }: { dataSources: any, req: any }) => { + workshops: (_: any, { offset, limit }: { offset?: number, limit?: number }, { dataSources, req }: { dataSources: any, req: any }) => { if (req.permissions.includes(Permission.ReadWorkshop)) { return dataSources.workshopAPI.workshops(offset, limit); } else { diff --git a/src/schema/type-defs.ts b/src/schema/type-defs.ts index 1a0267e..c6c9c51 100644 --- a/src/schema/type-defs.ts +++ b/src/schema/type-defs.ts @@ -58,7 +58,7 @@ export default gql` """ dimensionsAndLoad: DimensionsAndLoad! bikeEvents(offset: Int, limit: Int): [BikeEvent] - equipment(offset: Int!, limit: Int!): [Equipment] + equipment(offset: Int, limit: Int): [Equipment] "Refers to equipment that is not unique. See kommentierte info tabelle -> Fragen -> Frage 2" equipmentType: [EquipmentType] "Sticker State" @@ -71,7 +71,7 @@ export default gql` lendingStation: LendingStation taxes: Taxes currentEngagements: [Engagement] - engagement(offset: Int!, limit: Int!): [Engagement] + engagement(offset: Int, limit: Int): [Engagement] timeFrames: [TimeFrame] isLocked: Boolean! isLockedByMe: Boolean! @@ -670,6 +670,8 @@ export default gql` name: String! isLockedByMe: Boolean! isLocked: Boolean! + "null if not locked by other user" + lockedBy: ID lockedUntil: Date } @@ -961,40 +963,40 @@ export default gql` "Will (eventually) return all properties of cargo bike" cargoBikeById(id:ID!): CargoBike "returns cargoBikes ordered by name ascending, relations are not loaded, use cargoBikeById instead" - cargoBikes(offset: Int!, limit: Int!): [CargoBike!]! + cargoBikes(offset: Int, limit: Int): [CargoBike!]! engagementById(id: ID!): Engagement - engagements(offset: Int!, limit: Int!): [Engagement!]! + engagements(offset: Int, limit: Int): [Engagement!]! engagementTypeById(id: ID!): EngagementType - engagementTypes(offset: Int!, limit: Int!): [EngagementType!]! + engagementTypes(offset: Int, limit: Int): [EngagementType!]! "equipment by id, will return null if id not found" equipmentById(id: ID!): Equipment - equipment(offset: Int!, limit: Int!): [Equipment!]! + equipment(offset: Int, limit: Int): [Equipment!]! equipmentTypeById(id: ID!): EquipmentType - equipmentTypes(offset: Int!, limit: Int!): [EquipmentType!]! + equipmentTypes(offset: Int, limit: Int): [EquipmentType!]! "return null if id not found" providerById(id:ID!): Provider "Returns providers with pagination" - providers(offset: Int!, limit: Int!): [Provider!]! + providers(offset: Int, limit: Int): [Provider!]! "participant by id" participantById(id:ID!): Participant - participants(offset: Int!, limit: Int!): [Participant!]! + participants(offset: Int, limit: Int): [Participant!]! workshopTypeById(id: ID!): WorkshopType - workshopTypes(offset: Int!, limit: Int!): [WorkshopType!]! + workshopTypes(offset: Int, limit: Int): [WorkshopType!]! workshopById(id: ID!): Workshop - workshops(offset: Int!, limit: Int!): [Workshop!]! + workshops(offset: Int, limit: Int): [Workshop!]! lendingStationById(id:ID!): LendingStation - lendingStations(offset: Int!, limit: Int!): [LendingStation!]! + lendingStations(offset: Int, limit: Int): [LendingStation!]! organisationById(id: ID!): Organisation - organisations(offset: Int!, limit: Int!): [Organisation!]! + organisations(offset: Int, limit: Int): [Organisation!]! timeFrameById(id: ID!): TimeFrame - timeFrames(offset: Int!, limit: Int!): [TimeFrame!]! + timeFrames(offset: Int, limit: Int): [TimeFrame!]! contactInformationById(id: ID!): ContactInformation - contactInformation(offset: Int!, limit: Int!): [ContactInformation!]! + contactInformation(offset: Int, limit: Int): [ContactInformation!]! personById(id: ID!): Person - persons(offset: Int!, limit: Int!): [Person!] - bikeEventTypes(offset: Int!, limit: Int!): [BikeEventType!] + persons(offset: Int, limit: Int): [Person!] + bikeEventTypes(offset: Int, limit: Int): [BikeEventType!] bikeEventTypeByd(id: ID!): BikeEventType - bikeEvents(offset: Int!, limit: Int!): [BikeEvent!]! + bikeEvents(offset: Int, limit: Int): [BikeEvent!]! bikeEventById(id:ID!): BikeEvent "actionLog for current user" actionLog: [ActionLog!]