Merge pull request #2 from flotte-goes-smart/dev

Dev
pull/4/head
leonnicolas 4 years ago committed by GitHub
commit 3164404218
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23

@ -1,6 +1,7 @@
{
"root": true,
"env": {
"browser": true
"node": true
},
"extends": [
"standard"

@ -3,12 +3,13 @@ WORKDIR /
COPY ./src /src
COPY ./package*.json ./
COPY ./gulpfile.js ./tsconfig.json ./tslint.json ./
COPY ./gulpfile.js ./tsconfig.json ./
COPY ./ormconfig.json ./
RUN npm install
RUN npm install -g gulp
RUN npm install gulp
RUN gulp
EXPOSE 4000
EXPOSE 5432
CMD ["npm", "start"]

@ -2,10 +2,14 @@
Apollo server written in typescript that handles business logic.
## Usage
### Configure Postgres
Install postgresql and configure it, so the Database is accessible from remote hosts (only necessary for docker container [Here](https://wiki.archlinux.org/index.php/PostgreSQL))
See postgres client config in __ormconfig.json__
### Docker
```bash
docker build -t <image name> .
docker run --rm -p 4000:4000 <image name>
docker run --rm --network="host" <image name>
```
The Dockerfile is pretty stupid and could produce a smaller image, e.g. with multistage build.
### Compile and run

@ -1,6 +1,6 @@
{
"type": "postgres",
"host": "localhost",
"host": "127.17.42.1",
"port": 5432,
"username": "apollo",
"database": "apollo_test",

10
package-lock.json generated

@ -260,11 +260,6 @@
"@types/node": "*"
}
},
"@types/bluebird": {
"version": "3.5.32",
"resolved": "https://registry.npmjs.org/@types/bluebird/-/bluebird-3.5.32.tgz",
"integrity": "sha512-dIOxFfI0C+jz89g6lQ+TqhGgPQ0MxSnh/E4xuC0blhFtyW269+mPG5QeLgbdwst/LvdP8o1y0o/Gz5EHXLec/g=="
},
"@types/body-parser": {
"version": "1.19.0",
"resolved": "https://registry.npmjs.org/@types/body-parser/-/body-parser-1.19.0.tgz",
@ -444,11 +439,6 @@
"@types/mime": "*"
}
},
"@types/validator": {
"version": "13.1.0",
"resolved": "https://registry.npmjs.org/@types/validator/-/validator-13.1.0.tgz",
"integrity": "sha512-gHUHI6pJaANIO2r6WcbT7+WMgbL9GZooR4tWpuBOETpDIqFNxwaJluE+6rj6VGYe8k6OkfhbHz2Fkm8kl06Igw=="
},
"@types/ws": {
"version": "7.2.6",
"resolved": "https://registry.npmjs.org/@types/ws/-/ws-7.2.6.tgz",

@ -6,6 +6,7 @@
"scripts": {
"test": "echo \"Error: no test specified\" && exit 1",
"start": "node dist/index.js",
"lint": "eslint --config .eslintrc.json --fix src/**/*.ts",
"start:ci": "node dist/index.js"
},
"keywords": [],
@ -29,8 +30,6 @@
"typescript": "^4.0.2"
},
"dependencies": {
"@types/bluebird": "^3.5.32",
"@types/validator": "^13.1.0",
"apollo-server": "^2.17.0",
"graphql": "^15.3.0",
"pg": "^8.3.3",

@ -1,9 +1,16 @@
import { DataSource } from 'apollo-datasource'
import { getConnection, Connection } from 'typeorm'
import { CargoBike } from '../../model/CargoBike'
/**
* extended datasource to feed resolvers with data about cargoBikes
*/
export class CargoBikeAPI extends DataSource {
connection : Connection
constructor () {
super()
this.connection = getConnection()
}
/**
* Finds cargo bike by id
*/
@ -13,4 +20,20 @@ export class CargoBikeAPI extends DataSource {
name: token
}
}
async updateBike ({ id, token, name }:{id:any, token: string, name: string }) {
const bike = new CargoBike()
bike.id = id
bike.description = token
bike.name = name
this.connection.manager.save(bike)
return {
success: true,
message: token,
bike: {
id,
name
}
}
}
}

@ -1,6 +1,10 @@
export default {
Query: {
cargobike: (_: any, { id, token }:{id: any, token: string}, { dataSources }:{dataSources: any}) =>
CargobikeById: (_: any, { id, token }:{id: any, token: string}, { dataSources }:{dataSources: any}) =>
dataSources.cargoBikeAPI.findCargoBikeById({ id, token })
},
Mutation: {
addBike: (_:any, { id, token, name }:{id: any, token: string, name:string}, { dataSources }:{dataSources: any }) =>
dataSources.cargoBikeAPI.updateBike({ id, token, name })
}
}

@ -40,6 +40,7 @@ type CargoBike {
provider: Provider
coordinator: Coordinator
insuranceData: InsuranceData
loantimes: [LoanTimes]
}
type InsuranceData {
@ -55,6 +56,7 @@ type Coordinator {
note: String
corgoBikes: [CargoBike]!
}
enum Group{
KL
LI
@ -65,6 +67,7 @@ enum Group{
TS
TK
}
"""
The BikeModel can be used for instantiate new bikes with a given model.
It should only be used to fill in default values.
@ -74,6 +77,7 @@ type BikeModel {
id: ID!
name: String
dimensionsAndLoad: DimensionsAndLoad!
technicalEquipment: TechnicalEquipment!
}
type ActiveMentor {
@ -81,6 +85,31 @@ type ActiveMentor {
start: Date!
end: Date!
mentor: ContactInformation!
usernamefLotte: String
usernameSlack: String
memberADFC: Boolean!
locationZIPs: [String]
roleCoreTeam: Boolean!
roleCoordinator: Boolean!
roleEmployeADFC: Boolean!
"""
Wahr, wenn die Person Pate ist.
"""
roleMentor: Boolean!
roleAmbulanz: Boolean!
roleBringer: Boolean!
"Date of workshop to become Mentor dt. Pate"
workshopMentor: Date
"Date of last Erste Hilfe Kurs?"
workshopAmbulance: Date
"""
Note the kommentierte Infodaten Tabelle.
This value is calculated form other values.
It is true, if the person is not on the black list and not retired
and is either Mentor dt. Pate or Partner Mentor dt. Partnerpate for at least one bike.
"""
distributedActiveBikeParte: Boolean!
reserve: String
}
type Taxes {
@ -102,6 +131,7 @@ type ChainSwap {
timeOfSwap: Date
keyNumberOldAXAChain: String
}
"""
This type represents a piece of equipment that represents a real physical object.
The object must be unique. So it is possible to tell it apart from similar objects by a serial number.
@ -195,26 +225,25 @@ enum StickerBikeNameState {
UNKNOWN
}
"(dt. Anbieter)"
type Provider {
id: ID!
name: String!
formularName: String
address: String
address: Address
"If Club, at what court registered"
registeredAt: String
registerNumber: String
providerContactPerson: [ContactInformation]
email: String
phone: String
isPrivatePerson: Boolean!
organisations: Organisation
organisation: Organisation
cargoBikes: [CargoBike]!
}
type ContactInformation {
id: ID!
name: String!
firstName: String!
firstName: String
retiredAt: Date
phoneExtern: String
phone2Extern: String
@ -222,42 +251,61 @@ type ContactInformation {
phone2Intern: String
emailExtern: String
emailIntern: String
usernamefLotte: String
usernameSlack: String
memberADFC: Boolean!
locationZIPs: [String]
roleCoreTeam: Boolean!
roleCoordinator: Boolean!
roleEmployeADFC: Boolean!
"""
Wahr, wenn die Person Pate ist.
"""
roleMentor: Boolean!
roleAmbulanz: Boolean!
roleBringer: Boolean!
"Date of workshop to become Mentor dt. Pate"
workshopMentor: Date
"Date of last Erste Hilfe Kurs?"
workshopAmbulance: Date
note: String
"""
Note the kommentierte Infodaten Tabelle.
This value is calculated form other values.
It is true, if the person is not on the black list and not retired
and is either Mentor dt. Pate or Partner Mentor dt. Partnerpate for at least one bike.
"""
distributedActiveBikeParte: Boolean!
reserve: String
}
type Organisation{
id: ID!
"(dt. Ausleihstation)"
lendinglocation: [LendingStation]
"registration number of association"
associationNo: String
otherdata: String
}
"(dt. Standort)"
type LendingStation {
id: ID!
contactInformation: [ContactInformation]!
address: Address
loanTimes: LoanTimes
loanPeriods: [LoanPeriod]!
}
"(dt. Ausleihzeiten)"
type LoanTimes {
notes: String
}
"(dt. Zeitscheibe)"
type LoanPeriod{
id: ID!
from: Date!
to: Date
note: String
lendingstation: LendingStation!
cargobike: CargoBike!
}
type Address {
street: String
number: String
zip: String
}
type Query {
cargobike(token:String!,id:ID!): CargoBike
CargobikeById(token:String!,id:ID!): CargoBike
Cargobikes(token:String!): [CargoBike]!
CargobikesByProvider(token:String!,providerId:ID!): [CargoBike]!
ProviderById(token:String!,id:ID!): Provider
Providers(token:String!): [Provider]!
ActiveMentorById(token:String!,id:ID!): ActiveMentor
ActiveMentors(token:String!): [ActiveMentor]!
lendingStationById(token:String!, id:ID!): LendingStation
lendingStations(token:String!): [LendingStation]!
contactInformation(token:String!): [ContactInformation]!
}
type UpdateBikeResponse {
@ -265,9 +313,46 @@ type UpdateBikeResponse {
message: String
bike: CargoBike
}
"for testing"
input CargoBikeInput {
"if null, then new bike will be created, else old bike will be updated"
id: ID
"see column A in info tabelle"
group: Group
name: String
modelName: String
numberOfWheels: Int
forCargo: Boolean
forChildren: Boolean
numberOfChildren: Int
serialno: String
"""
Safety is a custom type, that stores information about security features.
TODO: Should this be calles Security?
"""
security: String
"""
Does not refere to an extra table in the database.
"""
technicalEquipment: String
"""
Does not refere to an extra table in the database.
"""
dimensionsAndLoad: String
"Refers to equipment that is not unique. See kommentierte info tabelle -> Fragen -> Frage 2"
otherEquipment: String
"Sticker State"
stickerBikeNameState: String
note: String
provider: String
coordinator: String
insuranceData: String
}
type Mutation {
addBike(id: ID!):UpdateBikeResponse
"for testing"
addBike(id: ID!, token: String!, name: String): UpdateBikeResponse!
"if id: null, then new bike will be created, else old bike will be updated"
cargoBike(token:String!,cargoBike: CargoBikeInput): UpdateBikeResponse!
}
`

Loading…
Cancel
Save