Skip to content

Commit

Permalink
feat: create interface and types for resident (#18)
Browse files Browse the repository at this point in the history
* feat: create interface and types for resident

* fix: add newline to end of file

* addressing PR comments - minor changes to resident interface

* feat: create residentResolvers, file for impl

* add notification and notification_user models (#17)

* feat: create impl file, add prisma client

* Updates to Resident Service and Types

* feat: add logging for errors

* feat: create interface and types for resident

* fix: add newline to end of file

* addressing PR comments - minor changes to resident interface

* feat: create residentResolvers, file for impl

* feat: create impl file, add prisma client

* Updates to Resident Service and Types

* feat: add logging for errors

* fix: remove duplicate declarations

* feat: add neon db (#21)

* feat: add neon db

* fix: add optional neon setup

* feat: add logging for errors

* upgrade: node and ts dependancies

* feat: fix linting and add schema mapping

* fix: recurrence freq naming

* Add graph ql custom scalar data types

* Update Eslinting modules

* fix: address PR comments

---------

Co-authored-by: Selena Zhang <[email protected]>
Co-authored-by: Danie1T <[email protected]>
Co-authored-by: Sharujan Sreekaran <[email protected]>
Co-authored-by: William Tran <[email protected]>
Co-authored-by: William Tran <[email protected]>
  • Loading branch information
6 people authored Nov 18, 2023
1 parent bf2318c commit 7841fb1
Show file tree
Hide file tree
Showing 14 changed files with 633 additions and 128 deletions.
2 changes: 1 addition & 1 deletion .github/workflows/lint.yml
Original file line number Diff line number Diff line change
Expand Up @@ -39,7 +39,7 @@ jobs:
if: steps.changes.outputs.frontend == 'true' || steps.changes.outputs.typescript-backend == 'true'
uses: actions/setup-node@v2
with:
node-version: "18.16.0"
node-version: "18.18.2"
cache: "yarn"
cache-dependency-path: |
frontend/yarn.lock
Expand Down
2 changes: 1 addition & 1 deletion .nvmrc
Original file line number Diff line number Diff line change
@@ -1 +1 @@
v18.16.0
v18.18.2
4 changes: 2 additions & 2 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -88,8 +88,8 @@ This may require you to upgrade your node version locally so try (only if it tel
(https://www.freecodecamp.org/news/node-version-manager-nvm-install-guide/) If you don't have nvm

```
nvm install 18.16.0
nvm use 18.16.0
nvm install 18.18.2
nvm use 18.18.2
```

## Creating Prisma Migration
Expand Down
1 change: 1 addition & 0 deletions backend/typescript/.eslintrc.js
Original file line number Diff line number Diff line change
Expand Up @@ -17,6 +17,7 @@ module.exports = {
],
rules: {
"prettier/prettier": ["error", { endOfLine: "auto" }],
"class-methods-use-this": 0,
},
ignorePatterns: ["build/*"],
};
2 changes: 1 addition & 1 deletion backend/typescript/Dockerfile
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
FROM node:18.16.0-slim
FROM node:18.18.2-slim

RUN apt-get update -y
RUN apt-get install -y openssl
Expand Down
19 changes: 18 additions & 1 deletion backend/typescript/graphql/index.ts
Original file line number Diff line number Diff line change
@@ -1,6 +1,10 @@
import { makeExecutableSchema, gql } from "apollo-server-express";
import { applyMiddleware } from "graphql-middleware";
import { merge } from "lodash";
import {
typeDefs as scalarTypeDefs,
resolvers as scalarResolvers,
} from "graphql-scalars";

import {
isAuthorizedByEmail,
Expand All @@ -15,6 +19,8 @@ import simpleEntityResolvers from "./resolvers/simpleEntityResolvers";
import simpleEntityType from "./types/simpleEntityType";
import userResolvers from "./resolvers/userResolvers";
import userType from "./types/userType";
import residentResolvers from "./resolvers/residentResolvers";
import residentType from "./types/residentType";

const query = gql`
type Query {
Expand All @@ -29,10 +35,21 @@ const mutation = gql`
`;

const executableSchema = makeExecutableSchema({
typeDefs: [query, mutation, authType, entityType, simpleEntityType, userType],
typeDefs: [
...scalarTypeDefs,
query,
mutation,
authType,
entityType,
residentType,
simpleEntityType,
userType,
],
resolvers: merge(
scalarResolvers,
authResolvers,
entityResolvers,
residentResolvers,
simpleEntityResolvers,
userResolvers,
),
Expand Down
54 changes: 54 additions & 0 deletions backend/typescript/graphql/resolvers/residentResolvers.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,54 @@
import ResidentService from "../../services/implementations/residentService";
import type {
IResidentService,
ResidentDTO,
CreateResidentDTO,
UpdateResidentDTO,
} from "../../services/interfaces/residentService";

const residentService: IResidentService = new ResidentService();
// const authService: IAuthService = new AuthService(userService, emailService);

const residentResolvers = {
Query: {
residentsById: async (
_parent: undefined,
{ id }: { id: string[] },
): Promise<Array<ResidentDTO>> => {
return residentService.getResidentsById(id.map(Number));
},
allResidents: async (): Promise<Array<ResidentDTO>> => {
return residentService.getAllResidents();
},
},
Mutation: {
addResident: async (
_parent: undefined,
{ resident }: { resident: CreateResidentDTO },
): Promise<ResidentDTO> => {
const newResident = await residentService.addResident(resident);
return newResident;
},
updateResident: async (
_parent: undefined,
{ id, resident }: { id: string; resident: UpdateResidentDTO },
): Promise<ResidentDTO> => {
const newResident = await residentService.updateResident(
parseInt(id, 10),
resident,
);
return newResident;
},
deleteResident: async (
_parent: undefined,
{ id }: { id: string },
): Promise<ResidentDTO> => {
const deletedResident = await residentService.deleteResident(
parseInt(id, 10),
);
return deletedResident;
},
},
};

export default residentResolvers;
57 changes: 57 additions & 0 deletions backend/typescript/graphql/types/residentType.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,57 @@
import { gql } from "apollo-server-express";

// TODO: Look into custom types for dates and date time types

const residentType = gql`
type ResidentDTO {
id: ID!
firstName: String!
lastName: String!
email: String!
phoneNumber: String
displayName: String!
profilePictureLink: String
birthdate: Date
credits: Float
dateJoined: DateTime!
dateLeft: DateTime
}
input CreateResidentDTO {
firstName: String!
lastName: String!
email: String!
phoneNumber: String
displayName: String!
profilePictureLink: String
birthdate: Date
credits: Float
dateJoined: DateTime!
}
input UpdateResidentDTO {
firstName: String
lastName: String
email: String
phoneNumber: String
displayName: String
profilePictureLink: String
birthdate: Date
credits: Float
dateJoined: DateTime
dateLeft: DateTime
}
extend type Query {
residentsById(id: [ID!]): [ResidentDTO!]
allResidents: [ResidentDTO!]
}
extend type Mutation {
updateResident(id: ID!, resident: UpdateResidentDTO!): ResidentDTO!
addResident(resident: CreateResidentDTO!): ResidentDTO!
deleteResident(id: ID!): ResidentDTO!
}
`;

export default residentType;
13 changes: 7 additions & 6 deletions backend/typescript/package.json
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,7 @@
"lint": "eslint . --ext .ts,.js",
"fix": "eslint . --ext .ts,.js --fix",
"postinstall": "tsc",
"prismaInitAndRun": "npx prisma migrate deploy && nodemon -L"
"prismaInitAndRun": "npx prisma migrate deploy && npx prisma generate && nodemon -L"
},
"keywords": [],
"author": "",
Expand All @@ -31,6 +31,7 @@
"firebase-admin": "^9.5.0",
"graphql": "^15.5.0",
"graphql-middleware": "^6.0.6",
"graphql-scalars": "^1.22.4",
"graphql-upload": "^12.0.0",
"json2csv": "^5.0.6",
"lodash": "^4.17.21",
Expand All @@ -43,7 +44,7 @@
"sequelize": "^6.5.0",
"sequelize-typescript": "^2.1.0",
"swagger-ui-express": "^4.1.6",
"ts-node": "^10.0.0",
"ts-node": "^10.9.1",
"umzug": "^3.0.0-beta.16",
"uuid": "^8.3.2",
"winston": "^3.3.3",
Expand All @@ -63,8 +64,8 @@
"@types/pg": "^7.14.10",
"@types/umzug": "^2.3.0",
"@types/validator": "^13.1.3",
"@typescript-eslint/eslint-plugin": "^4.4.1",
"@typescript-eslint/parser": "^4.15.2",
"@typescript-eslint/eslint-plugin": "^6.11.0",
"@typescript-eslint/parser": "^6.11.0",
"eslint": "^7.20.0",
"eslint-config-airbnb-typescript": "^12.3.1",
"eslint-config-prettier": "^8.0.0",
Expand All @@ -76,13 +77,13 @@
"prettier": "^2.2.1",
"prisma": "^5.4.2",
"ts-jest": "^27.0.3",
"typescript": "^4.1.5"
"typescript": "^5.2.2"
},
"resolutions": {
"fs-capacitor": "^6.2.0",
"graphql-upload": "^11.0.0"
},
"engines": {
"node": "18.16.0"
"node": "18.18.2"
}
}
Loading

0 comments on commit 7841fb1

Please sign in to comment.