diff options
| -rw-r--r-- | .circleci/config.yml | 38 | ||||
| -rw-r--r-- | hooks/convertPoll.ts | 4 | ||||
| -rw-r--r-- | models/polls/poll.model.ts | 10 | ||||
| -rw-r--r-- | models/polls/poll.schema.ts | 2 | ||||
| -rw-r--r-- | package.json | 6 | ||||
| -rw-r--r-- | populateDb.ts | 6 | ||||
| -rw-r--r-- | services/index.ts | 2 | ||||
| -rw-r--r-- | services/polls/polls.hooks.ts | 2 | ||||
| -rw-r--r-- | services/users/users.hooks.ts | 2 | ||||
| -rw-r--r-- | services/votes/votes.hooks.ts | 2 | 
10 files changed, 56 insertions, 18 deletions
| diff --git a/.circleci/config.yml b/.circleci/config.yml new file mode 100644 index 0000000..a6876ba --- /dev/null +++ b/.circleci/config.yml @@ -0,0 +1,38 @@ +version: 2 + +defaults: &defaults +  working_directory: ~/repo +  docker: +    - image: circleci/node:12-stretch + +jobs: +  checkout_and_test: +    <<: *defaults +    steps: +      - checkout +      - restore_cache: +          keys: +            - v1-dependencies-{{ checksum "package.json" }} +            # fallback to using the latest cache if no exact match is found +            - v1-dependencies- + +      - run: +          name: Install NPM dependencies +          command: npm install + +      - save_cache: +          paths: +            - node_modules +          key: v1-dependencies-{{ checksum "package.json" }} + +      - run: +          name: Test syntax and perform type checking +          command: npm test + +workflows: +  version: 2 + +  test: +    jobs: +      - checkout_and_test + diff --git a/hooks/convertPoll.ts b/hooks/convertPoll.ts index 1c32851..5e6f9f4 100644 --- a/hooks/convertPoll.ts +++ b/hooks/convertPoll.ts @@ -2,7 +2,7 @@ import { HookContext } from '@feathersjs/feathers';  import { Types } from 'mongoose';  import bluebird from 'bluebird';  import _ from 'lodash'; -import { Poll, User, Vote } from 'which-types'; +import { Poll } from 'which-types';  import { PollSchema } from '../models/polls/poll.schema';  import VoteModel from '../models/votes/vote.model'; @@ -18,7 +18,7 @@ export default async (context: HookContext): Promise<HookContext> => {        { $match: { pollId: Types.ObjectId(poll._id) } },        { $group: { _id: '$which', total: { $sum: 1 } } }      ]).then(groups => groups.reduce( -      (acc, group) =>  _.set(acc, group._id + '.votes', group.total), +      (acc, group) => _.set(acc, `${group._id}.votes`, group.total),        { left: { votes: 0 }, right: { votes: 0 } }      )); diff --git a/models/polls/poll.model.ts b/models/polls/poll.model.ts index 6749e5c..ed05cc7 100644 --- a/models/polls/poll.model.ts +++ b/models/polls/poll.model.ts @@ -1,9 +1,9 @@ -import { Model, model } from 'mongoose'; -import { PollSchema, pollSchema } from './poll.schema'; -import { Types } from 'mongoose'; +import { Model, model, Types } from 'mongoose';  import { Which } from 'which-types'; +import { PollSchema, pollSchema } from './poll.schema'; + -pollSchema.methods.vote = function(userId: string, which: Which): PollSchema { +pollSchema.methods.vote = function vote(userId: string, which: Which): PollSchema {    const participants: Types.ObjectId[] = ['left', 'right'].reduce((acc, option) => {      const { votes } = this.contents[option];      return acc.concat(votes); @@ -14,7 +14,7 @@ pollSchema.methods.vote = function(userId: string, which: Which): PollSchema {    }    return this.save(); -} +};  export default model<PollSchema, Model<PollSchema>>('Poll', pollSchema); diff --git a/models/polls/poll.schema.ts b/models/polls/poll.schema.ts index 4d1d762..3a57c28 100644 --- a/models/polls/poll.schema.ts +++ b/models/polls/poll.schema.ts @@ -15,7 +15,7 @@ export interface PollSchema extends Document {  }  export const imageDataSchema = { -  url: String, +  url: String  };  export const pollSchema = new Schema({ diff --git a/package.json b/package.json index ecdd31d..1a21fcf 100644 --- a/package.json +++ b/package.json @@ -21,7 +21,8 @@      "cors": "^2.8.5",      "feathers-mongoose": "^8.3.0",      "lodash": "^4.17.15", -    "mongoose": "^5.9.18" +    "mongoose": "^5.9.18", +    "which-types": "^1.4.0"    },    "repository": {      "type": "git", @@ -42,7 +43,6 @@      "eslint": "^7.2.0",      "eslint-config-airbnb-typescript": "^8.0.2",      "eslint-plugin-import": "^2.21.2", -    "typescript": "^3.9.5", -    "which-types": "^1.4.0" +    "typescript": "^3.9.5"    }  } diff --git a/populateDb.ts b/populateDb.ts index 757280a..6daa2f8 100644 --- a/populateDb.ts +++ b/populateDb.ts @@ -36,7 +36,7 @@ const choices = [  const createPoll = (authorId: string): Promise<Poll> => {    const generateImageData = () => ({ -    url: _.sample(imageUrls) || '', +    url: _.sample(imageUrls) || ''    });    return app.service('polls').create({ @@ -61,7 +61,7 @@ const createVote = (userId: string, pollId: string): Promise<Vote> => {      pollId,      which: _.sample(choices)    }, { user: { _id: userId } }); -} +};  const populate = async () => { @@ -72,7 +72,7 @@ const populate = async () => {      return createPoll(user?._id || '');    }); -  const votes = await bluebird.map(users, user => { +  await bluebird.map(users, user => {      const pollsToVote = _.sampleSize(polls, _.random(0, POLLS_AMOUNT));      return bluebird.map(pollsToVote, poll => createVote(user?._id || '', poll?._id || ''));    }); diff --git a/services/index.ts b/services/index.ts index fe5ffdc..ce20901 100644 --- a/services/index.ts +++ b/services/index.ts @@ -18,6 +18,6 @@ export default (app: Application): void => {      before: {        all: tryAuthenticate      } -  }) +  });  }; diff --git a/services/polls/polls.hooks.ts b/services/polls/polls.hooks.ts index eba3e63..13d6f63 100644 --- a/services/polls/polls.hooks.ts +++ b/services/polls/polls.hooks.ts @@ -2,7 +2,7 @@ import convertPoll from '../../hooks/convertPoll';  export default {    after: { -    all: [convertPoll], +    all: [convertPoll]    }  }; diff --git a/services/users/users.hooks.ts b/services/users/users.hooks.ts index 8eecca3..ee1ae1c 100644 --- a/services/users/users.hooks.ts +++ b/services/users/users.hooks.ts @@ -6,7 +6,7 @@ const hashPassword = hooks.hashPassword('password');  const localDispatch = async (context: HookContext): Promise<HookContext> => {    context.result = context.dispatch;    return context; -} +};  export default {    after: { diff --git a/services/votes/votes.hooks.ts b/services/votes/votes.hooks.ts index 1cf7261..7d0b3ba 100644 --- a/services/votes/votes.hooks.ts +++ b/services/votes/votes.hooks.ts @@ -2,7 +2,7 @@ import { HookContext } from '@feathersjs/feathers';  import requireAuth from '../../hooks/requireAuth';  const addUserId = async (context: HookContext): Promise<HookContext> => { -  const { params: { user} } = context; +  const { params: { user } } = context;    context.data.userId = user._id;    return context;  }; | 
